Sha256: 45583c6b0384293860d309b62626ab81cb630a00462b1a895a8b05121d98ee8a
Contents?: true
Size: 1.05 KB
Versions: 17
Compression:
Stored size: 1.05 KB
Contents
# frozen_string_literal: true require 'rb-inotify' module Impression class FileWatcher def initialize(spec) @notifier = INotify::Notifier.new @buffer = [] setup(spec) end def setup(spec) if File.file?(spec) setup_single_file(spec) elsif File.directory?(spec) setup_directory(spec) else dir = File.dir_name(spec) filename = File.basename(spec) if dir =~ /\/\*\*$/ dir = File.dir_name(dir) filename = "**/#{filename}" end setup_directory(dir, filename) end end def setup_directory(dir) @notifier.watch(dir, :moved_to, :create, :move, :attrib, :modify, :delete) do |event| kind = event.flags.first @buffer << [kind, event.absolute_name] end end def each(&block) @receiver = Fiber.current io = @notifier.to_io loop do io.wait_readable @notifier.process next if @buffer.empty? @buffer.each(&block) @buffer.clear end end end end
Version data entries
17 entries across 17 versions & 1 rubygems