require "listen" require "singleton" require "cuco" require "script" class Controller include Singleton attr_reader :listener attr_reader :options attr_reader :pwd_size attr_reader :script_name attr_reader :script def init(options, argv) @options = options @script_name = argv.first || ".watchr" @pwd_size = Dir.pwd.size if @options[:debug] puts "options #{@options}" puts "pwd <#{@pwd}>" puts "script_name <#{@script_name}>" end end def run stop @script = Script.new @script.load_file(@script_name) @listener = Listen.to(".") do |modified, added, removed| run_files(modified, :modified) run_files(added, :added) end @listener.start sleep end def stop @listener&.stop @script = nil @listener = nil end private def run_files(files, type) files.map! { |filename| filename[@pwd_size + 1..] } files.each { |filename| @script.run(filename, type) } end end