Class: Invoker::Event::Manager
- Inherits:
-
Object
- Object
- Invoker::Event::Manager
- Defined in:
- lib/invoker/event/manager.rb
Instance Attribute Summary collapse
-
#scheduled_events ⇒ Object
Returns the value of attribute scheduled_events.
-
#triggered_events ⇒ Object
Returns the value of attribute triggered_events.
Instance Method Summary collapse
-
#initialize ⇒ Manager
constructor
A new instance of Manager.
-
#run_scheduled_events ⇒ Object
On next iteration of event loop, this method is called and we try to match scheduled events with events that were triggered.
-
#schedule_event(command_label, event_name = nil, &block) ⇒ Object
Schedule an Event.
-
#trigger(command_label, event_name = nil) ⇒ Object
Trigger an event.
Constructor Details
#initialize ⇒ Manager
Returns a new instance of Manager.
6 7 8 9 10 |
# File 'lib/invoker/event/manager.rb', line 6 def initialize @scheduled_events = Hash.new {|h,k| h[k] = [] } @triggered_events = [] @trigger_mutex = Mutex.new() end |
Instance Attribute Details
#scheduled_events ⇒ Object
Returns the value of attribute scheduled_events.
4 5 6 |
# File 'lib/invoker/event/manager.rb', line 4 def scheduled_events @scheduled_events end |
#triggered_events ⇒ Object
Returns the value of attribute triggered_events.
4 5 6 |
# File 'lib/invoker/event/manager.rb', line 4 def triggered_events @triggered_events end |
Instance Method Details
#run_scheduled_events ⇒ Object
On next iteration of event loop, this method is called and we try to match scheduled events with events that were triggered.
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/invoker/event/manager.rb', line 39 def run_scheduled_events filtered_events_by_name_and_command = [] triggered_events.each_with_index do |triggered_event, index| matched_events = scheduled_events[triggered_event.command_label] if matched_events && !matched_events.empty? filtered_events_by_name_and_command, unmatched_events = filter_matched_events(matched_events, triggered_event) triggered_events[index] = nil remove_scheduled_event(unmatched_events, triggered_event.command_label) end end triggered_events.compact! filtered_events_by_name_and_command.each {|event| yield event } end |
#schedule_event(command_label, event_name = nil, &block) ⇒ Object
Schedule an Event. The event will only trigger when a scheduled event matches a triggered event.
31 32 33 34 35 |
# File 'lib/invoker/event/manager.rb', line 31 def schedule_event(command_label, event_name = nil, &block) @trigger_mutex.synchronize do scheduled_events[command_label] << OpenStruct.new(:event_name => event_name, :block => block) end end |
#trigger(command_label, event_name = nil) ⇒ Object
Trigger an event. The event is not triggered immediately, but is just scheduled to be triggered.
17 18 19 20 21 22 23 |
# File 'lib/invoker/event/manager.rb', line 17 def trigger(command_label, event_name = nil) @trigger_mutex.synchronize do triggered_events << OpenStruct.new( :command_label => command_label, :event_name => event_name) end end |