class Spring::Watcher::Listen

Attributes

listener[R]

Public Class Methods

new(*) click to toggle source
Calls superclass method
# File lib/spring/watcher/listen.rb, line 26
def initialize(*)
  super
  @listener = nil
end

Public Instance Methods

base_directories() click to toggle source
# File lib/spring/watcher/listen.rb, line 76
def base_directories
  ([root] +
    files.keys.reject       { |f| f.start_with? "#{root}/" }.map { |f| File.expand_path("#{f}/..") } +
    directories.keys.reject { |d| d.start_with? "#{root}/" }
  ).uniq.map { |path| Pathname.new(path) }
end
changed(modified, added, removed) click to toggle source
# File lib/spring/watcher/listen.rb, line 60
def changed(modified, added, removed)
  synchronize do
    if (modified + added + removed).any? { |f| watching? f }
      mark_stale
    end
  end
end
mark_stale() click to toggle source
Calls superclass method
# File lib/spring/watcher/listen.rb, line 68
def mark_stale
  super

  # May be called from listen thread which won't be happy
  # about stopping itself, so stop from another thread.
  Thread.new { stop }.join
end
running?() click to toggle source
# File lib/spring/watcher/listen.rb, line 45
def running?
  @listener && @listener.processing?
end
start() click to toggle source
# File lib/spring/watcher/listen.rb, line 31
def start
  return if @listener

  @listener = ::Listen.to(*base_directories, latency: latency, &method(:changed))
  @listener.start
end
stop() click to toggle source
# File lib/spring/watcher/listen.rb, line 38
def stop
  if @listener
    @listener.stop
    @listener = nil
  end
end
subjects_changed() click to toggle source
# File lib/spring/watcher/listen.rb, line 49
def subjects_changed
  return unless @listener
  return unless @listener.respond_to?(:directories)
  return unless @listener.directories.sort != base_directories.sort
  restart
end
watching?(file) click to toggle source
# File lib/spring/watcher/listen.rb, line 56
def watching?(file)
  files.include?(file) || file.start_with?(*directories.keys)
end