Class: Whatsapp::Events

Inherits:
Object
  • Object
show all
Defined in:
lib/whatsapp/events.rb

Overview

Simple pub/sub event emitter.

Used internally by Client and Session to dispatch WhatsApp events (messages, connection changes, QR codes, etc.).

Examples:

events = Whatsapp::Events.new
events.on("message.new") { |data| puts data }
events.emit("message.new", { text: "hello" })

Instance Method Summary collapse

Constructor Details

#initializeEvents

Returns a new instance of Events.



13
14
15
# File 'lib/whatsapp/events.rb', line 13

def initialize
  @handlers = Hash.new { |h, k| h[k] = [] }
end

Instance Method Details

#clear!void

This method returns an undefined value.

Remove all registered handlers.



60
61
62
# File 'lib/whatsapp/events.rb', line 60

def clear!
  @handlers.clear
end

#emit(event_name, data = nil) ⇒ void

This method returns an undefined value.

Emit an event, calling all registered handlers.

Parameters:

  • event_name (String)

    event name

  • data (Hash, nil) (defaults to: nil)

    event payload



45
46
47
# File 'lib/whatsapp/events.rb', line 45

def emit(event_name, data = nil)
  @handlers[event_name.to_s].each { |handler| handler.call(data) }
end

#listeners(event_name) ⇒ Array<Proc>

List all handlers for an event.

Parameters:

  • event_name (String)

    event name

Returns:

  • (Array<Proc>)

    registered handlers (copy)



53
54
55
# File 'lib/whatsapp/events.rb', line 53

def listeners(event_name)
  @handlers[event_name.to_s].dup
end

#off(event_name) {|data| ... } ⇒ void

This method returns an undefined value.

Remove a specific handler, or all handlers for an event.

Parameters:

  • event_name (String)

    event name

Yields:

  • (data)

    specific handler to remove (optional)



32
33
34
35
36
37
38
# File 'lib/whatsapp/events.rb', line 32

def off(event_name, &block)
  if block
    @handlers[event_name.to_s].delete(block)
  else
    @handlers.delete(event_name.to_s)
  end
end

#on(event_name) {|data| ... } ⇒ void

This method returns an undefined value.

Register a handler for an event.

Parameters:

  • event_name (String)

    event name to listen for

Yields:

  • (data)

    block called when the event fires

Yield Parameters:

  • data (Hash, nil)

    event payload



23
24
25
# File 'lib/whatsapp/events.rb', line 23

def on(event_name, &block)
  @handlers[event_name.to_s] << block
end