Class: Cucumber::Core::EventBus
- Defined in:
- lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/cucumber-core-11.0.0/lib/cucumber/core/event_bus.rb
Overview
Event Bus
Implements an in-process pub-sub event broadcaster allowing multiple observers to subscribe to events that fire as your tests are executed.
Instance Attribute Summary collapse
-
#event_types ⇒ Object
readonly
Returns the value of attribute event_types.
Instance Method Summary collapse
-
#broadcast(event) ⇒ Object
Broadcast an event.
-
#initialize(registry = Events.registry) ⇒ EventBus
constructor
A new instance of EventBus.
- #method_missing(event_id, *args) ⇒ Object
-
#on(event_id, handler_object = nil, &handler_proc) ⇒ Object
Register for an event.
Constructor Details
#initialize(registry = Events.registry) ⇒ EventBus
Returns a new instance of EventBus.
15 16 17 18 19 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/cucumber-core-11.0.0/lib/cucumber/core/event_bus.rb', line 15 def initialize(registry = Events.registry) @event_types = registry.freeze @handlers = {} @event_queue = [] end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(event_id, *args) ⇒ Object
38 39 40 41 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/cucumber-core-11.0.0/lib/cucumber/core/event_bus.rb', line 38 def method_missing(event_id, *args) event_class = event_types.fetch(event_id) { super } broadcast event_class.new(*args) end |
Instance Attribute Details
#event_types ⇒ Object (readonly)
Returns the value of attribute event_types.
12 13 14 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/cucumber-core-11.0.0/lib/cucumber/core/event_bus.rb', line 12 def event_types @event_types end |
Instance Method Details
#broadcast(event) ⇒ Object
Broadcast an event
32 33 34 35 36 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/cucumber-core-11.0.0/lib/cucumber/core/event_bus.rb', line 32 def broadcast(event) raise ArgumentError, "Event type #{event.class} is not registered. Try one of these:\n#{event_types.values.join("\n")}" unless is_registered_type?(event.class) handlers_for(event.class).each { |handler| handler.call(event) } @event_queue << event end |
#on(event_id, handler_object = nil, &handler_proc) ⇒ Object
Register for an event. The handler proc will be called back with each of the attributes of the event.
23 24 25 26 27 28 29 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/cucumber-core-11.0.0/lib/cucumber/core/event_bus.rb', line 23 def on(event_id, handler_object = nil, &handler_proc) handler = handler_proc || handler_object validate_handler_and_event_id!(handler, event_id) event_class = event_types[event_id] handlers_for(event_class) << handler broadcast_queued_events_to handler, event_class end |