module Stack class Watcher attr_accessor :source, :target attr_accessor :generator attr_accessor :directory_watcher attr_accessor :keep_alive def initialize(generator) self.generator = generator self.source = self.generator.source self.target = self.generator.target self.keep_alive = true 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| 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 self.directory_watcher.start if self.keep_alive loop { sleep 1000 } end end end end