Object
# File lib/rb-fsevent/fsevent.rb, line 63 def open_pipe IO.popen("'#{self.class.watcher_path}' #{options_string} #{shellescaped_paths}") end
# File lib/rb-fsevent/fsevent.rb, line 69 def options_string @options.join(' ') end
# File lib/rb-fsevent/fsevent.rb, line 35 def run @pipe = open_pipe @running = true # please note the use of IO::select() here, as it is used specifically to # preserve correct signal handling behavior in ruby 1.8. while @running && IO::select([@pipe], nil, nil, nil) if line = @pipe.readline modified_dir_paths = line.split(':').select { |dir| dir != "\n" } callback.call(modified_dir_paths) end end rescue Interrupt, IOError, Errno::EBADF ensure stop end
for Ruby 1.8.6 support
# File lib/rb-fsevent/fsevent.rb, line 78 def shellescape(str) # An empty argument will be skipped, so return empty quotes. return "''" if str.empty? str = str.dup # Process as a single byte sequence because not all shell # implementations are multibyte aware. str.gsub!(/([^A-Za-z0-9_\-.,:\/@\n])/, "\\\\\\1") # A LF cannot be escaped with a backslash because a backslash + LF # combo is regarded as line continuation and simply ignored. str.gsub!(/\n/, "'\n'") return str end
# File lib/rb-fsevent/fsevent.rb, line 73 def shellescaped_paths @paths.map {|path| shellescape(path)}.join(' ') end
# File lib/rb-fsevent/fsevent.rb, line 52 def stop unless @pipe.nil? Process.kill('KILL', @pipe.pid) @pipe.close end rescue IOError ensure @running = false end
# File lib/rb-fsevent/fsevent.rb, line 22 def watch(watch_paths, options=nil, &block) @paths = watch_paths.kind_of?(Array) ? watch_paths : [watch_paths] @callback = block if options.kind_of?(Hash) @options = parse_options(options) elsif options.kind_of?(Array) @options = options else @options = [] end end
Generated with the Darkfish Rdoc Generator 2.