class Middleman::CoreExtensions::FileWatcher::API
Core File Change API class
def changed(matcher=nil, &block)
-
(Array
-)
Parameters:
-
matcher
(nil, Regexp
) -- A Regexp to match the change path against
def changed(matcher=nil, &block) @_changed << [block, matcher] if block_given? @_changed end
def deleted(matcher=nil, &block)
-
(Array
-)
Parameters:
-
matcher
(nil, Regexp
) -- A Regexp to match the deleted path against
def deleted(matcher=nil, &block) @_deleted << [block, matcher] if block_given? @_deleted end
def did_change(path)
-
(void)
-
Parameters:
-
path
(String
) -- The file that changed
def did_change(path) return if IGNORE_LIST.any? { |r| path.match(r) } puts "== File Change: #{path}" if @app.logging? @known_paths << path self.run_callbacks(path, :changed) end
def did_delete(path)
-
(void)
-
Parameters:
-
path
(String
) -- The file that was deleted
def did_delete(path) return if IGNORE_LIST.any? { |r| path.match(r) } puts "== File Deletion: #{path}" if @app.logging? @known_paths.delete(path) self.run_callbacks(path, :deleted) end
def find_new_files(path)
-
(void)
-
Parameters:
-
path
(String
) -- The path to reload
def find_new_files(path) relative_path = path.sub("#{@app.root}/", "") subset = @known_paths.select { |p| p.match(%r{^#{relative_path}}) } Find.find(path) do |file| next if File.directory?(file) relative_path = file.sub("#{@app.root}/", "") self.did_change(relative_path) unless subset.include?(relative_path) end if File.exists?(path) end
def initialize(app)
def initialize(app) @app = app @known_paths = Set.new @_changed = [] @_deleted = [] end
def reload_path(path)
-
(void)
-
Parameters:
-
path
(String
) -- The path to reload
def reload_path(path) relative_path = path.sub("#{@app.root}/", "") subset = @known_paths.select { |p| p.match(%r{^#{relative_path}}) } Find.find(path) do |path| next if File.directory?(path) relative_path = path.sub("#{@app.root}/", "") subset.delete(relative_path) self.did_change(relative_path) end if File.exists?(path) subset.each do |removed_path| self.did_delete(removed_path) end end
def run_callbacks(path, callbacks_name)
-
(void)
-
Parameters:
-
callbacks_name
(Symbol
) -- The name of the callbacks method -
path
(String
) -- The file that was changed
def run_callbacks(path, callbacks_name) self.send(callbacks_name).each do |callback, matcher| next if path.match(%r{^#{@app.build_dir}/}) next unless matcher.nil? || path.match(matcher) @app.instance_exec(path, &callback) end end