Class: Bidi2pdf::Bidi::EventManager

Inherits:
Object
  • Object
show all
Defined in:
lib/bidi2pdf/bidi/event_manager.rb

Defined Under Namespace

Classes: Listener

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#typeObject (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

Raises:

  • (ArgumentError)


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