module Build::Files
def self.run_with_fsevent(monitor, options = {}, &block)
def self.run_with_fsevent(monitor, options = {}, &block) require 'rb-fsevent' notifier = FSEvent.new catch(:interrupt) do while true notifier.watch monitor.roots do |directories| directories.collect!{|directory| File.expand_path(directory)} monitor.update(directories) yield if monitor.updated notifier.stop end end notifier.run end end end
def self.run_with_inotify(monitor, options = {}, &block)
def self.run_with_inotify(monitor, options = {}, &block) require 'rb-inotify' notifier = INotify::Notifier.new catch(:interrupt) do while true monitor.roots.each do |root| notifier.watch root, :create, :modify, :delete do |event| monitor.update([root]) yield if monitor.updated notifier.stop end end end notifier.run end end end
def self.run_with_polling(monitor, options = {}, &block)
def self.run_with_polling(monitor, options = {}, &block) catch(:interrupt) do while true monitor.update(monitor.roots) yield sleep(options[:latency] || 1.0) end end end