Add a bit of laziness
This commit is contained in:
parent
f73e89370d
commit
445443cffc
|
@ -1,4 +1,5 @@
|
||||||
require 'middleman-core/contracts'
|
require 'middleman-core/contracts'
|
||||||
|
require 'backports/2.0.0/enumerable/lazy'
|
||||||
|
|
||||||
module Middleman
|
module Middleman
|
||||||
# The standard "record" that contains information about a file on disk.
|
# The standard "record" that contains information about a file on disk.
|
||||||
|
@ -168,6 +169,7 @@ module Middleman
|
||||||
Contract Symbol, String, Maybe[Bool] => Maybe[SourceFile]
|
Contract Symbol, String, Maybe[Bool] => Maybe[SourceFile]
|
||||||
def find(type, path, glob=false)
|
def find(type, path, glob=false)
|
||||||
watchers
|
watchers
|
||||||
|
.lazy
|
||||||
.select { |d| d.type == type }
|
.select { |d| d.type == type }
|
||||||
.map { |d| d.find(path, glob) }
|
.map { |d| d.find(path, glob) }
|
||||||
.reject { |d| d.nil? }
|
.reject { |d| d.nil? }
|
||||||
|
@ -182,6 +184,7 @@ module Middleman
|
||||||
Contract Symbol, String => Bool
|
Contract Symbol, String => Bool
|
||||||
def exists?(type, path)
|
def exists?(type, path)
|
||||||
watchers
|
watchers
|
||||||
|
.lazy
|
||||||
.select { |d| d.type == type }
|
.select { |d| d.type == type }
|
||||||
.any? { |d| d.exists?(path) }
|
.any? { |d| d.exists?(path) }
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# Watcher Library
|
# Watcher Library
|
||||||
require 'listen'
|
require 'listen'
|
||||||
|
|
||||||
require 'middleman-core/contracts'
|
require 'middleman-core/contracts'
|
||||||
|
require 'backports/2.0.0/enumerable/lazy'
|
||||||
|
|
||||||
module Middleman
|
module Middleman
|
||||||
# The default source watcher implementation. Watches a directory on disk
|
# The default source watcher implementation. Watches a directory on disk
|
||||||
|
@ -211,25 +211,31 @@ module Middleman
|
||||||
Contract ArrayOf[Pathname], ArrayOf[Pathname] => Any
|
Contract ArrayOf[Pathname], ArrayOf[Pathname] => Any
|
||||||
def update(updated_paths, removed_paths)
|
def update(updated_paths, removed_paths)
|
||||||
valid_updates = updated_paths
|
valid_updates = updated_paths
|
||||||
|
.lazy
|
||||||
.map(&method(:path_to_source_file))
|
.map(&method(:path_to_source_file))
|
||||||
.select(&method(:valid?))
|
.select(&method(:valid?))
|
||||||
|
.to_a
|
||||||
valid_updates.each do |f|
|
.each do |f|
|
||||||
add_file_to_cache(f)
|
add_file_to_cache(f)
|
||||||
logger.debug "== Change (#{f[:type]}): #{f[:relative_path]}"
|
logger.debug "== Change (#{f[:type]}): #{f[:relative_path]}"
|
||||||
end
|
end
|
||||||
|
|
||||||
valid_removes = removed_paths
|
valid_removes = removed_paths
|
||||||
|
.lazy
|
||||||
.select(&@files.method(:key?))
|
.select(&@files.method(:key?))
|
||||||
.map(&@files.method(:[]))
|
.map(&@files.method(:[]))
|
||||||
.select(&method(:valid?))
|
.select(&method(:valid?))
|
||||||
|
.to_a
|
||||||
|
.each do |f|
|
||||||
|
remove_file_from_cache(f)
|
||||||
|
logger.debug "== Deletion (#{f[:type]}): #{f[:relative_path]}"
|
||||||
|
end
|
||||||
|
|
||||||
valid_removes.each do |f|
|
run_callbacks(
|
||||||
remove_file_from_cache(f)
|
@on_change_callbacks,
|
||||||
logger.debug "== Deletion (#{f[:type]}): #{f[:relative_path]}"
|
valid_updates,
|
||||||
end
|
valid_removes
|
||||||
|
) unless valid_updates.empty? && valid_removes.empty?
|
||||||
run_callbacks(@on_change_callbacks, valid_updates, valid_removes) unless valid_updates.empty? && valid_removes.empty?
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_file_to_cache(f)
|
def add_file_to_cache(f)
|
||||||
|
@ -260,7 +266,7 @@ module Middleman
|
||||||
Contract Pathname => IsA['Middleman::SourceFile']
|
Contract Pathname => IsA['Middleman::SourceFile']
|
||||||
def path_to_source_file(path)
|
def path_to_source_file(path)
|
||||||
::Middleman::SourceFile.new(
|
::Middleman::SourceFile.new(
|
||||||
path.relative_path_from(@directory), path, @directory, @type)
|
path.relative_path_from(@directory), path, @directory, @type)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Notify callbacks for a file given an array of callbacks
|
# Notify callbacks for a file given an array of callbacks
|
||||||
|
|
|
@ -20,6 +20,7 @@ Gem::Specification.new do |s|
|
||||||
|
|
||||||
# Core
|
# Core
|
||||||
s.add_dependency('bundler', ['~> 1.1'])
|
s.add_dependency('bundler', ['~> 1.1'])
|
||||||
|
s.add_dependency('backports', ['~> 3.6'])
|
||||||
s.add_dependency('rack', ['>= 1.4.5', '< 2.0'])
|
s.add_dependency('rack', ['>= 1.4.5', '< 2.0'])
|
||||||
s.add_dependency('tilt', ['~> 1.4.1'])
|
s.add_dependency('tilt', ['~> 1.4.1'])
|
||||||
s.add_dependency('erubis')
|
s.add_dependency('erubis')
|
||||||
|
|
Loading…
Reference in a new issue