Module: RbEvent

Defined in:
lib/rb_event.rb

Constant Summary collapse

VERSION =
'0.3.2'.freeze

Instance Method Summary collapse

Instance Method Details

#listen(name, listener = nil, &listener_block) ⇒ #call Also known as: add_listener

Adds an event listener

listener ‘or’ listener_block required.

Parameters:

  • name (#to_sym)

    the name of event

  • listener (#call) (defaults to: nil)

Returns:

  • (#call)

    The listener added

Raises:

  • (ArgumentError)


13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/rb_event.rb', line 13

def listen(name, listener=nil, &listener_block)
  if listener.nil? && listener_block.nil?
    raise ArgumentError, "listener is nil and block is not given"
  elsif !listener.nil? && !listener_block.nil?
    raise ArgumentError, "Both listener and block is given"
  end
  
  if !listener.nil? && !listener.respond_to?(:call)
    raise ArgumentError, "Invalid listener: #{listener.inspect} not responded to :call"
  end
  listener ||= listener_block
  
  name = name.to_sym
  unless rb_event_listeners.key?(name)
    rb_event_listeners[name] = []
  end
  rb_event_listeners[name] << listener
  listener
end

#listen?(name, listener) ⇒ Boolean Also known as: has_listener?

Check the listener is added

Parameters:

  • name (#to_sym)

    The name of event

  • listener (#call)

Returns:

  • (Boolean)


55
56
57
58
59
# File 'lib/rb_event.rb', line 55

def listen?(name, listener)
  name = name.to_sym
  return false unless rb_event_listeners.key?(name)
  rb_event_listeners[name].include? listener
end

#unlisten(name, listener) ⇒ void Also known as: remove_listener

This method returns an undefined value.

Removes an event listener

Parameters:

  • name (#to_sym)

    The name of event

  • listener (#call)


39
40
41
42
43
44
45
46
47
# File 'lib/rb_event.rb', line 39

def unlisten(name, listener)
  name = name.to_sym
  return nil unless rb_event_listeners.key?(name)
  rb_event_listeners[name].delete listener
  if rb_event_listeners[name].empty?
    rb_event_listeners.delete(name)
  end
  nil
end