class Middleman::CoreExtensions::FileWatcher::API

Core File Change API class

def changed(matcher=nil, &block)

Returns:
  • (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)

Returns:
  • (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)

Returns:
  • (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)

Returns:
  • (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)

Returns:
  • (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)

Initialize api and internal path cache
def initialize(app)
  @app = app
  @known_paths = Set.new
  
  @_changed = []
  @_deleted = []
end

def reload_path(path)

Returns:
  • (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)

Returns:
  • (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