Class: DirectoryWatcher::CoolioScanner
- Inherits:
-
EventableScanner
- Object
- EventableScanner
- DirectoryWatcher::CoolioScanner
- Defined in:
- lib/directory_watcher/coolio_scanner.rb
Overview
The CoolioScanner uses the Coolio loop to monitor changes to files in the watched directory. This scanner is more efficient than the pure Ruby scanner because it relies on the operating system kernel notifications instead of a periodic polling and stat of every file in the watched directory (the technique used by the Scanner class).
Coolio cannot notify us when a file is added to the watched directory; therefore, added files are only picked up when we apply the glob pattern to the directory. This is done at the configured interval.
Defined Under Namespace
Instance Attribute Summary
Attributes inherited from EventableScanner
#iterations, #maximum_iterations, #watchers
Instance Method Summary collapse
-
#event_loop ⇒ Object
Return the cool.io loop object.
-
#initialize(config) ⇒ CoolioScanner
constructor
call-seq: CoolioScanner.new( config ).
-
#start_loop_with_attached_scan_timer ⇒ Object
Called by EventablScanner#start to start the loop up and attach the periodic timer that will poll the globs for new files.
-
#stop_loop ⇒ Object
Called by EventableScanner#stop to stop the loop as part of the shutdown process.
Methods inherited from EventableScanner
#collection_queue, #finished_iterations?, #interval, #join, #on_modified, #on_removed, #on_scan, #pause, #paused?, #resume, #run, #running?, #start, #stop
Methods included from Logable
Constructor Details
#initialize(config) ⇒ CoolioScanner
call-seq:
CoolioScanner.new( config )
24 25 26 |
# File 'lib/directory_watcher/coolio_scanner.rb', line 24 def initialize( config ) super(config) end |
Instance Method Details
#event_loop ⇒ Object
Return the cool.io loop object.
This is used during the startup, shutdown process and for the Watcher to attach and detach from the event loop
56 57 58 59 60 61 62 |
# File 'lib/directory_watcher/coolio_scanner.rb', line 56 def event_loop if @loop_thread then @loop_thread._coolio_loop else Thread.current._coolio_loop end end |
#start_loop_with_attached_scan_timer ⇒ Object
Called by EventablScanner#start to start the loop up and attach the periodic timer that will poll the globs for new files.
31 32 33 34 35 36 37 38 |
# File 'lib/directory_watcher/coolio_scanner.rb', line 31 def start_loop_with_attached_scan_timer return if @loop_thread @timer = ScanTimer.new( self ) @loop_thread = Thread.new { @timer.attach(event_loop) event_loop.run } end |
#stop_loop ⇒ Object
Called by EventableScanner#stop to stop the loop as part of the shutdown process.
43 44 45 46 47 48 49 |
# File 'lib/directory_watcher/coolio_scanner.rb', line 43 def stop_loop if @loop_thread then event_loop.stop rescue nil @loop_thread.kill @loop_thread = nil end end |