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 |
# File 'lib/middleman-core/core_extensions/file_watcher.rb', line 90 def did_change(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
101 102 103 104 105 106 |
# File 'lib/middleman-core/core_extensions/file_watcher.rb', line 101 def did_delete(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
140 141 142 |
# File 'lib/middleman-core/core_extensions/file_watcher.rb', line 140 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
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/middleman-core/core_extensions/file_watcher.rb', line 113 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| if only_new next if subset.include?(filepath) else subset.delete(filepath) end self.did_change(filepath) end subset.each(&method(:did_delete)) unless only_new end end |