Class: Listen::Listener

Inherits:
Object
  • Object
show all
Includes:
FSM
Defined in:
lib/listen/listener.rb,
lib/listen/listener/config.rb

Defined Under Namespace

Classes: Config

Constant Summary

Constants included from FSM

FSM::DEFAULT_STATE

Instance Attribute Summary

Attributes included from FSM

#state

Instance Method Summary collapse

Methods included from FSM

included, #transition, #transition!

Constructor Details

#initialize(*dirs) {|modified, added, removed| ... } ⇒ Listener

Initializes the directories listener.

Parameters:

  • directory (String)

    the directories to listen to

  • options (Hash)

    the listen options (see Listen::Listener::Options)

Yields:

  • (modified, added, removed)

    the changed files

Yield Parameters:

  • modified (Array<String>)

    the list of modified files

  • added (Array<String>)

    the list of added files

  • removed (Array<String>)

    the list of removed files



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/listen/listener.rb', line 35

def initialize(*dirs, &block)
  options = dirs.last.is_a?(Hash) ? dirs.pop : {}

  @config = Config.new(options)

  eq_config = Event::Queue::Config.new(@config.relative?)
  queue = Event::Queue.new(eq_config) { @processor.wakeup_on_event }

  silencer = Silencer.new
  rules = @config.silencer_rules
  @silencer_controller = Silencer::Controller.new(silencer, rules)

  @backend = Backend.new(dirs, queue, silencer, @config)

  optimizer_config = QueueOptimizer::Config.new(@backend, silencer)

  pconfig = Event::Config.new(
    self,
    queue,
    QueueOptimizer.new(optimizer_config),
    @backend.min_delay_between_events,
    &block)

  @processor = Event::Loop.new(pconfig)

  super() # FSM
end

Instance Method Details

#ignore(regexps) ⇒ Object



116
117
118
# File 'lib/listen/listener.rb', line 116

def ignore(regexps)
  @silencer_controller.append_ignores(regexps)
end

#ignore!(regexps) ⇒ Object



120
121
122
# File 'lib/listen/listener.rb', line 120

def ignore!(regexps)
  @silencer_controller.replace_with_bang_ignores(regexps)
end

#only(regexps) ⇒ Object



124
125
126
# File 'lib/listen/listener.rb', line 124

def only(regexps)
  @silencer_controller.replace_with_only(regexps)
end

#pauseObject

Stops invoking callbacks (messages pile up)



103
104
105
# File 'lib/listen/listener.rb', line 103

def pause
  transition :paused
end

#paused?Boolean

Returns:

  • (Boolean)


112
113
114
# File 'lib/listen/listener.rb', line 112

def paused?
  state == :paused
end

#processing?Boolean

processing means callbacks are called

Returns:

  • (Boolean)


108
109
110
# File 'lib/listen/listener.rb', line 108

def processing?
  state == :processing_events
end

#startObject

Starts processing events and starts adapters or resumes invoking callbacks if paused



90
91
92
93
94
95
# File 'lib/listen/listener.rb', line 90

def start
  transition :backend_started if state == :initializing
  transition :frontend_ready if state == :backend_started
  transition :processing_events if state == :frontend_ready
  transition :processing_events if state == :paused
end

#stopObject

Stops both listening for events and processing them



98
99
100
# File 'lib/listen/listener.rb', line 98

def stop
  transition :stopped
end