lib/listen/event/queue.rb
# frozen_string_literal: true require 'thread' require 'forwardable' module Listen module Event class Queue extend Forwardable class Config def initialize(relative) @relative = relative end def relative? @relative end end def initialize(config) @event_queue = ::Queue.new @config = config end def <<(args) type, change, dir, path, options = *args fail "Invalid type: #{type.inspect}" unless [:dir, :file].include? type fail "Invalid change: #{change.inspect}" unless change.is_a?(Symbol) fail "Invalid path: #{path.inspect}" unless path.is_a?(String) dir = if @config.relative? _safe_relative_from_cwd(dir) else dir end @event_queue << [type, change, dir, path, options] end delegate empty?: :@event_queue delegate pop: :@event_queue delegate close: :@event_queue private def _safe_relative_from_cwd(dir) dir.relative_path_from(Pathname.pwd) rescue ArgumentError dir end end end end