Class: Edrive::Dispatcher

Inherits:
Object
  • Object
show all
Defined in:
lib/edrive/dispatcher.rb

Overview

Simple Event Dispatcher

Author:

Direct Known Subclasses

ProcessorDispatcher

Instance Method Summary collapse

Constructor Details

#initializeDispatcher

initialize



8
9
10
# File 'lib/edrive/dispatcher.rb', line 8

def initialize
  @events = {}
end

Instance Method Details

#clear!(event) ⇒ Array

clear event handlers

Parameters:

  • event (Symbol)

    event name symbol

Returns:

  • (Array)

    emnpty array



55
56
57
# File 'lib/edrive/dispatcher.rb', line 55

def clear!(event)
  @events[event] = []
end

#clear_all!Hash

clear all of event handlers

Returns:

  • (Hash)

    emnpty hash



61
62
63
# File 'lib/edrive/dispatcher.rb', line 61

def clear_all!
  @events = {}
end

#dispatch(event, *args) ⇒ Mixed

dispatch specific event handler

Parameters:

  • event (Symbol)

    event name

  • args (Mixed)

Returns:

  • (Mixed)

    last handler return value



28
29
30
31
32
# File 'lib/edrive/dispatcher.rb', line 28

def dispatch(event, *args)
  result = nil
  @events[event]&.each { |hdl| result = hdl.call(*args) }
  result
end

#dispatch_with_data(event, data, *args) ⇒ Mixed

dispatch specific event handlers with data

Parameters:

  • event (Symbol)

    event name

  • data (Mixed)

    initial value

  • args (Mixed)

Returns:

  • (Mixed)

    last handler return value



39
40
41
42
43
# File 'lib/edrive/dispatcher.rb', line 39

def dispatch_with_data(event, data, *args)
  result = data.dup
  @events[event]&.each { |hdl| result = hdl.call(result, *args) }
  result
end

#handlers(event) ⇒ Array

get event handlers

Parameters:

  • event (Symbol)

    event name symbol

Returns:

  • (Array)

    registered handler list



48
49
50
# File 'lib/edrive/dispatcher.rb', line 48

def handlers(event)
  @events[event] || []
end

#subscribe(event, handler = nil, &block) ⇒ Array

subscribe handler (proc, lambda, block)

Parameters:

  • event (Symbol)

    event name symbol

  • handler (Proc) (defaults to: nil)

    handler (lambda, proc)

  • block (Block)

    handler (block)

Returns:

  • (Array)

    registered handler list

Raises:

  • ArgumentError



18
19
20
21
22
# File 'lib/edrive/dispatcher.rb', line 18

def subscribe(event, handler = nil, &block)
  hdl = block_given? ? block : handler
  raise ArgumentError, 'handler must be proc object.' unless hdl.is_a?(Proc)
  regist(event, hdl)
end