module Stack class Watcher attr_accessor :source, :target attr_accessor :generator attr_accessor :directory_watcher attr_accessor :keep_alive, :is_first_observe attr_accessor :thread def initialize(generator) self.generator = generator self.source = self.generator.source self.target = self.generator.target self.keep_alive = true require 'directory_watcher' end def observe dirs = "" Dir.chdir(self.source) do dirs = Dir['*'].select { |x| File.directory?(x) } dirs -= ['_stack'] dirs = dirs.map { |x| "#{x}/**/*" } dirs += ['*'] end self.directory_watcher = DirectoryWatcher.new(self.source) self.directory_watcher.interval = 1 self.directory_watcher.glob = dirs self.directory_watcher.add_observer do |*args| if self.is_first_observe self.is_first_observe = false else time = Time.now.strftime("%Y-%m-%d %H:%M:%S") puts "[#{time}] #{args.size} files changed." self.generator.process! self.generator.transform! time = Time.now.strftime("%Y-%m-%d %H:%M:%S") puts "[#{time}] #{args.size} files processed." end end #self.directory_watcher.start self.thread = Thread.new { self.directory_watcher.start } trap("INT") { self.directory_watcher.stop } self.thread.join() #if self.keep_alive # loop { sleep 1000 } #end end end end