class Listen::Adapter::Darwin
Adapter implementation for Mac OS X `FSEvents`.
Constants
- DEFAULTS
The default delay between checking for changes.
- OS_REGEXP
Private Instance Methods
_configure(dir, &callback)
click to toggle source
NOTE: each directory gets a DIFFERENT callback!
# File lib/listen/adapter/darwin.rb, line 17 def _configure(dir, &callback) require 'rb-fsevent' opts = { latency: options.latency } @workers ||= ::Queue.new @workers << FSEvent.new.tap do |worker| worker.watch(dir.to_s, opts, &callback) end end
_process_event(dir, event)
click to toggle source
# File lib/listen/adapter/darwin.rb, line 44 def _process_event(dir, event) event.each do |path| new_path = Pathname.new(path.sub(/\/$/, '')) _log :debug, "fsevent: #{new_path}" # TODO: does this preserve symlinks? rel_path = new_path.relative_path_from(dir).to_s _queue_change(:dir, dir, rel_path, recursive: true) end end
_run()
click to toggle source
NOTE: _run is called within a thread, so run every other worker in it's own thread
# File lib/listen/adapter/darwin.rb, line 29 def _run first = @workers.pop until @workers.empty? next_worker = @workers.pop Listen::Internals::ThreadPool.add do begin next_worker.run rescue _log_exception 'run() in extra thread(s) failed: %s: %s' end end end first.run end