class Listen::Adapter::Base

Constants

DEFAULTS

TODO: only used by tests

Attributes

options[R]

Public Class Methods

local_fs?() click to toggle source
# File lib/listen/adapter/base.rb, line 66
def self.local_fs?
  true
end
new(opts) click to toggle source
# File lib/listen/adapter/base.rb, line 13
def initialize(opts)
  @configured = nil
  options = opts.dup
  @mq = options.delete(:mq)
  @directories = options.delete(:directories)

  Array(@directories).each do |dir|
    next if dir.is_a?(Pathname)
    fail ArgumentError, "not a Pathname: #{dir.inspect}"
  end

  # TODO: actually use this in every adapter
  @recursion = options.delete(:recursion)
  @recursion = true if @recursion.nil?

  defaults = self.class.const_get('DEFAULTS')
  @options = Listen::Options.new(options, defaults)
rescue
  _log :error, "adapter config failed: #{$!}:#{$@.join("\n")}"
  raise
end
usable?() click to toggle source
# File lib/listen/adapter/base.rb, line 70
def self.usable?
  const_get('OS_REGEXP') =~ RbConfig::CONFIG['target_os']
end

Private Class Methods

_log(*args) click to toggle source
# File lib/listen/adapter/base.rb, line 86
def self._log(*args)
  Celluloid::Logger.send(*args)
end

Public Instance Methods

configure() click to toggle source

TODO: it's a separate method as a temporary workaround for tests

# File lib/listen/adapter/base.rb, line 36
def configure
  return if @configured
  @configured = true

  @callbacks ||= {}
  @directories.each do |dir|
    unless dir.is_a?(Pathname)
      fail ArgumentError, "not a Pathname: #{dir.inspect}"
    end

    callback = @callbacks[dir] || lambda do |event|
      _process_event(dir, event)
    end
    @callbacks[dir] = callback
    _configure(dir, &callback)
  end
end
start() click to toggle source
# File lib/listen/adapter/base.rb, line 54
def start
  configure
  Thread.new do
    begin
      _run
    rescue
      _log :error, "run() in thread failed: #{$!}:#{$@.join("\n")}"
      raise
    end
  end
end

Private Instance Methods

_log(*args) click to toggle source
# File lib/listen/adapter/base.rb, line 82
def _log(*args)
  self.class.send(:_log, *args)
end
_queue_change(type, dir, rel_path, options) click to toggle source
# File lib/listen/adapter/base.rb, line 76
def _queue_change(type, dir, rel_path, options)
  # TODO: temporary workaround to remove dependency on Change through
  # Celluloid in tests
  @mq.send(:_queue_raw_change, type, dir, rel_path, options)
end