class Edrive::Dispatcher

Simple Event Dispatcher @author Michinao Shimizu <shimizu.michinao@gmail.com>

Public Class Methods

new() click to toggle source

initialize

# File lib/edrive/dispatcher.rb, line 8
def initialize
  @events = {}
end

Public Instance Methods

clear!(event) click to toggle source

clear event handlers @param [Symbol] event event name symbol @return [Array] emnpty array

# File lib/edrive/dispatcher.rb, line 55
def clear!(event)
  @events[event] = []
end
clear_all!() click to toggle source

clear all of event handlers @return [Hash] emnpty hash

# File lib/edrive/dispatcher.rb, line 61
def clear_all!
  @events = {}
end
dispatch(event, *args) click to toggle source

dispatch specific event handler @param [Symbol] event event name @param [Mixed] args @return [Mixed] last handler return value

# 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) click to toggle source

dispatch specific event handlers with data @param [Symbol] event event name @param [Mixed] data initial value @param [Mixed] args @return [Mixed] last handler return value

# 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) click to toggle source

get event handlers @param [Symbol] event event name symbol @return [Array] registered handler list

# File lib/edrive/dispatcher.rb, line 48
def handlers(event)
  @events[event] || []
end
subscribe(event, handler = nil, &block) click to toggle source

subscribe handler (proc, lambda, block) @param [Symbol] event event name symbol @param [Proc] handler handler (lambda, proc) @param [Block] block handler (block) @raise ArgumentError @return [Array] registered handler list

# 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

Private Instance Methods

regist(event, handler) click to toggle source

regist hanlder to target event @param [Symbol] event event name symbol @param [Proc] handler handler @return [Array] registered handler list

# File lib/edrive/dispatcher.rb, line 71
def regist(event, handler)
  @events[event] ||= []
  @events[event] << handler
end