Class: Middleman::CoreExtensions::FileWatcher::API
- Inherits:
-
Object
- Object
- Middleman::CoreExtensions::FileWatcher::API
- Defined in:
- lib/middleman-core/core_extensions/file_watcher.rb
Overview
Core File Change API class
Instance Attribute Summary collapse
-
#app ⇒ Object
readonly
Returns the value of attribute app.
Instance Method Summary collapse
-
#changed(matcher = nil, &block) ⇒ Array<Proc>
Add callback to be run on file change.
-
#deleted(matcher = nil, &block) ⇒ Array<Proc>
Add callback to be run on file deletion.
-
#did_change(path) ⇒ void
Notify callbacks that a file changed.
-
#did_delete(path) ⇒ void
Notify callbacks that a file was deleted.
-
#find_new_files(path) ⇒ void
Like reload_path, but only triggers events on new files.
-
#initialize(app) ⇒ API
constructor
Initialize api and internal path cache.
-
#reload_path(path, only_new = false) ⇒ void
Manually trigger update events.
Constructor Details
#initialize(app) ⇒ API
Initialize api and internal path cache
60 61 62 63 64 65 66 |
# File 'lib/middleman-core/core_extensions/file_watcher.rb', line 60 def initialize(app) @app = app @known_paths = Set.new @_changed = [] @_deleted = [] end |
Instance Attribute Details
#app ⇒ Object (readonly)
Returns the value of attribute app.
56 57 58 |
# File 'lib/middleman-core/core_extensions/file_watcher.rb', line 56 def app @app end |
Instance Method Details
#changed(matcher = nil, &block) ⇒ Array<Proc>
Add callback to be run on file change
72 73 74 75 |
# File 'lib/middleman-core/core_extensions/file_watcher.rb', line 72 def changed(matcher=nil, &block) @_changed << [block, matcher] if block_given? @_changed end |
#deleted(matcher = nil, &block) ⇒ Array<Proc>
Add callback to be run on file deletion
81 82 83 84 |
# File 'lib/middleman-core/core_extensions/file_watcher.rb', line 81 def deleted(matcher=nil, &block) @_deleted << [block, matcher] if block_given? @_deleted end |
#did_change(path) ⇒ void
This method returns an undefined value.
Notify callbacks that a file changed
90 91 92 93 94 95 96 |
# File 'lib/middleman-core/core_extensions/file_watcher.rb', line 90 def did_change(path) path = Pathname(path) return if ignored?(path) logger.debug "== File Change: #{path}" @known_paths << path self.run_callbacks(path, :changed) end |
#did_delete(path) ⇒ void
This method returns an undefined value.
Notify callbacks that a file was deleted
102 103 104 105 106 107 108 |
# File 'lib/middleman-core/core_extensions/file_watcher.rb', line 102 def did_delete(path) path = Pathname(path) return if ignored?(path) logger.debug "== File Deletion: #{path}" @known_paths.delete(path) self.run_callbacks(path, :deleted) end |
#find_new_files(path) ⇒ void
This method returns an undefined value.
Like reload_path, but only triggers events on new files
139 140 141 |
# File 'lib/middleman-core/core_extensions/file_watcher.rb', line 139 def find_new_files(path) reload_path(path, true) end |
#reload_path(path, only_new = false) ⇒ void
This method returns an undefined value.
Manually trigger update events
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/middleman-core/core_extensions/file_watcher.rb', line 115 def reload_path(path, only_new=false) # chdir into the root directory so Pathname can work with relative paths Dir.chdir @app.root_path do path = Pathname(path) return unless path.exist? glob = (path + "**").to_s subset = @known_paths.select { |p| p.fnmatch(glob) } ::Middleman::Util.all_files_under(path).each do |filepath| next if only_new && subset.include?(filepath) subset.delete(filepath) did_change(filepath) end subset.each(&method(:did_delete)) unless only_new end end |