Class: Listen::Event::Loop
- Inherits:
-
Object
- Object
- Listen::Event::Loop
- Defined in:
- lib/listen/event/loop.rb
Defined Under Namespace
Classes: Error
Instance Method Summary collapse
-
#initialize(config) ⇒ Loop
constructor
A new instance of Loop.
- #pause ⇒ Object
- #paused? ⇒ Boolean
- #processing? ⇒ Boolean
- #resume ⇒ Object
- #setup ⇒ Object
- #stopped? ⇒ Boolean
- #teardown ⇒ Object
- #wakeup_on_event ⇒ Object
Constructor Details
#initialize(config) ⇒ Loop
Returns a new instance of Loop.
14 15 16 17 18 19 |
# File 'lib/listen/event/loop.rb', line 14 def initialize(config) @config = config @wait_thread = nil @state = :paused @reasons = ::Queue.new end |
Instance Method Details
#pause ⇒ Object
55 56 57 58 |
# File 'lib/listen/event/loop.rb', line 55 def pause # TODO: works? # fail NotImplementedError end |
#paused? ⇒ Boolean
28 29 30 |
# File 'lib/listen/event/loop.rb', line 28 def paused? wait_thread && state == :paused end |
#processing? ⇒ Boolean
32 33 34 35 36 |
# File 'lib/listen/event/loop.rb', line 32 def processing? return false if stopped? return false if paused? state == :processing end |
#resume ⇒ Object
49 50 51 52 53 |
# File 'lib/listen/event/loop.rb', line 49 def resume fail Error::NotStarted if stopped? return unless wait_thread _wakeup(:resume) end |
#setup ⇒ Object
38 39 40 41 42 43 44 45 46 47 |
# File 'lib/listen/event/loop.rb', line 38 def setup # TODO: use a Fiber instead? q = ::Queue.new @wait_thread = Internals::ThreadPool.add do _wait_for_changes(q, config) end Listen::Logger.debug('Waiting for processing to start...') Timeout.timeout(5) { q.pop } end |
#stopped? ⇒ Boolean
69 70 71 |
# File 'lib/listen/event/loop.rb', line 69 def stopped? !wait_thread end |
#teardown ⇒ Object
60 61 62 63 64 65 66 67 |
# File 'lib/listen/event/loop.rb', line 60 def teardown return unless wait_thread if wait_thread.alive? _wakeup(:teardown) wait_thread.join end @wait_thread = nil end |
#wakeup_on_event ⇒ Object
21 22 23 24 25 26 |
# File 'lib/listen/event/loop.rb', line 21 def wakeup_on_event return if stopped? return unless processing? return unless wait_thread.alive? _wakeup(:event) end |