class Edrive::Dispatcher
Simple Event Dispatcher
@author Michinao Shimizu <shimizu.michinao@gmail.com>
Public Class Methods
initialize
# File lib/edrive/dispatcher.rb, line 8 def initialize @events = {} end
Public Instance Methods
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 of event handlers @return [Hash] emnpty hash
# File lib/edrive/dispatcher.rb, line 61 def clear_all! @events = {} end
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 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
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 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 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