Class: Bidi2pdf::Bidi::EventManager
- Inherits:
-
Object
- Object
- Bidi2pdf::Bidi::EventManager
- Defined in:
- lib/bidi2pdf/bidi/event_manager.rb
Defined Under Namespace
Classes: Listener
Instance Attribute Summary collapse
-
#type ⇒ Object
readonly
Returns the value of attribute type.
Instance Method Summary collapse
- #clear(event_name = nil) ⇒ Object
- #dispatch(event_name, *args) ⇒ Object
-
#initialize(type) ⇒ EventManager
constructor
A new instance of EventManager.
- #off(event_name, listener) ⇒ Object
- #on(*event_names, &block) ⇒ Object
Constructor Details
#initialize(type) ⇒ EventManager
Returns a new instance of EventManager.
29 30 31 32 |
# File 'lib/bidi2pdf/bidi/event_manager.rb', line 29 def initialize(type) @listeners = Concurrent::Hash.new { |h, k| h[k] = [] } @type = type end |
Instance Attribute Details
#type ⇒ Object (readonly)
Returns the value of attribute type.
27 28 29 |
# File 'lib/bidi2pdf/bidi/event_manager.rb', line 27 def type @type end |
Instance Method Details
#clear(event_name = nil) ⇒ Object
64 65 66 67 68 69 70 |
# File 'lib/bidi2pdf/bidi/event_manager.rb', line 64 def clear(event_name = nil) if event_name @listeners[event_name].clear else @listeners.clear end end |
#dispatch(event_name, *args) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/bidi2pdf/bidi/event_manager.rb', line 51 def dispatch(event_name, *args) listeners = @listeners[event_name.to_sym] || [] if event_name.to_s.include?(".") toplevel_event_name = event_name.to_s.split(".").first listeners += @listeners[toplevel_event_name.to_sym] end log_msg("Dispatching #{type} '#{event_name}' to #{listeners.size} listeners", args) listeners.each { |listener| listener.call(*args) } end |
#off(event_name, listener) ⇒ Object
43 44 45 46 47 48 49 |
# File 'lib/bidi2pdf/bidi/event_manager.rb', line 43 def off(event_name, listener) raise ArgumentError, "Listener not registered" unless listener.is_a?(Listener) log_msg("Removing #{event_name} listener", listener) @listeners[event_name.to_sym].delete(listener) end |
#on(*event_names, &block) ⇒ Object
34 35 36 37 38 39 40 41 |
# File 'lib/bidi2pdf/bidi/event_manager.rb', line 34 def on(*event_names, &block) Listener.new(block).tap do |listener| event_names.each do |event_name| @listeners[event_name.to_sym] << listener log_msg("Adding #{event_name} listener", listener) end end end |