Class: Build::Files::Monitor
- Inherits:
-
Object
- Object
- Build::Files::Monitor
- Defined in:
- lib/build/files/monitor.rb
Instance Attribute Summary collapse
-
#updated ⇒ Object
readonly
Returns the value of attribute updated.
Instance Method Summary collapse
- #add(handle) ⇒ Object
- #delete(handle) ⇒ Object
-
#initialize ⇒ Monitor
constructor
A new instance of Monitor.
- #roots ⇒ Object
- #run(options = {}, &block) ⇒ Object
- #track_changes(files, &block) ⇒ Object
-
#update(directories, *args) ⇒ Object
Notify the monitor that files in these directories have changed.
Constructor Details
#initialize ⇒ Monitor
Returns a new instance of Monitor.
28 29 30 31 32 |
# File 'lib/build/files/monitor.rb', line 28 def initialize @directories = Hash.new { |hash, key| hash[key] = Set.new } @updated = false end |
Instance Attribute Details
#updated ⇒ Object (readonly)
Returns the value of attribute updated.
34 35 36 |
# File 'lib/build/files/monitor.rb', line 34 def updated @updated end |
Instance Method Details
#add(handle) ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/build/files/monitor.rb', line 70 def add(handle) handle.directories.each do |directory| @directories[directory] << handle # We just added the first handle: if @directories[directory].size == 1 # If the handle already existed, this might trigger unnecessarily. @updated = true end end handle end |
#delete(handle) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/build/files/monitor.rb', line 51 def delete(handle) handle.directories.each do |directory| @directories[directory].delete(handle) # Remove the entire record if there are no handles: if @directories[directory].size == 0 @directories.delete(directory) @updated = true end end end |
#roots ⇒ Object
47 48 49 |
# File 'lib/build/files/monitor.rb', line 47 def roots @directories.keys end |
#run(options = {}, &block) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/build/files/monitor.rb', line 84 def run( = {}, &block) default_driver = case RUBY_PLATFORM when /linux/i; :inotify when /darwin/i; :fsevent else; :polling end if driver = .fetch(:driver, default_driver) method_name = "run_with_#{driver}" Files.send(method_name, self, , &block) end end |
#track_changes(files, &block) ⇒ Object
64 65 66 67 68 |
# File 'lib/build/files/monitor.rb', line 64 def track_changes(files, &block) handle = Handle.new(self, files, &block) add(handle) end |
#update(directories, *args) ⇒ Object
Notify the monitor that files in these directories have changed.
37 38 39 40 41 42 43 44 45 |
# File 'lib/build/files/monitor.rb', line 37 def update(directories, *args) directories.each do |directory| # directory = File.realpath(directory) @directories[directory].each do |handle| handle.changed!(*args) end end end |