# module Listen

Listener implementation for BSD's `kqueue`. @see www.freebsd.org/cgi/man.cgi?query=kqueue @see github.com/mat813/rb-kqueue/blob/master/lib/rb-kqueue/queue.rb

### Constants

VERSION

### Public Class Methods

on(target, *args, &block) click to toggle source

Listens to file system modifications broadcast over TCP.

@param [String/Fixnum] target to listen on (hostname:port or port)

@yield [modified, added, removed] the changed files @yieldparam [Array<String>] modified the list of modified files @yieldparam [Array<String>] added the list of added files @yieldparam [Array<String>] removed the list of removed files

@return [Listen::Listener] the listener

    # File lib/listen.rb, line 63
    def on(target, *args, &block)
      _add_listener(target, :recipient, *args, &block)
    end

stop() click to toggle source

Stop all listeners & Celluloid

Use it for testing purpose or when you are sure that Celluloid could be ended.

This is used by the `listen` binary to handle Ctrl-C

    # File lib/listen.rb, line 38
    def stop
      Internals::ThreadPool.stop
      @listeners ||= []

      # TODO: should use a mutex for this
      @listeners.each do |listener|
        # call stop to halt the main loop
        listener.stop
      end
      @listeners = nil

      Celluloid.shutdown
    end

to(*args, &block) click to toggle source

Listens to file system modifications on a either single directory or multiple directories.

When :forward_to is specified, this listener will broadcast modifications over TCP.

@param (see Listen::Listener#new)

@yield [modified, added, removed] the changed files @yieldparam [Array<String>] modified the list of modified files @yieldparam [Array<String>] added the list of added files @yieldparam [Array<String>] removed the list of removed files

@return [Listen::Listener] the listener

    # File lib/listen.rb, line 23
    def to(*args, &block)
      Celluloid.boot unless Celluloid.running?
      options = args.last.is_a?(Hash) ? args.last : {}
      target = options.delete(:forward_to)
      args = ([target, :broadcaster] + args) if target
      _add_listener(*args, &block)
    end

### Private Class Methods

_add_listener(*args, &block) click to toggle source

    # File lib/listen.rb, line 69
    def _add_listener(*args, &block)
      @listeners ||= []
      Listener.new(*args, &block).tap do |listener|
        @listeners << listener
      end
    end