class Kommando::When

Constants

VALID_EVENTS

Public Class Methods

new(parent=nil) click to toggle source
# File lib/kommando/when.rb, line 4
def initialize(parent=nil)
  @parent = parent
  @whens = {}
  @fired = []
end

Public Instance Methods

fire(event_name) click to toggle source
# File lib/kommando/when.rb, line 29
def fire(event_name)
  event_name_as_sym = event_name.to_sym
  validate_event_name(event_name_as_sym)

  @fired << event_name_as_sym
  debug "set #{event_name_as_sym} as fired"

  if blocks = @whens[event_name]
    debug "firing cbs for #{event_name_as_sym}"
    blocks.each do |block|
      debug "firing cb for #{event_name_as_sym}"
      if @parent
        block.call(@parent)
      else
        block.call
      end
      debug "fired cb for #{event_name_as_sym}"
    end
  else
    debug "no cbs for #{event_name_as_sym}"
  end
end
register(event_name, block) click to toggle source
# File lib/kommando/when.rb, line 10
def register(event_name, block)
  event_name_as_sym = event_name.to_sym
  validate_event_name(event_name_as_sym)

  @whens[event_name_as_sym] = if @whens[event_name_as_sym]
    @whens[event_name_as_sym] << block
  else
    [block]
  end

  if @fired.include? event_name_as_sym
    debug "cb firing as #{event_name_as_sym} already fired."
    block.call
    debug "cb fired as #{event_name_as_sym} already fired."
  else
    debug "cb for #{event_name_as_sym} registered, not fired."
  end
end

Private Instance Methods

debug(msg) click to toggle source
# File lib/kommando/when.rb, line 57
def debug(msg)
  return unless ENV["DEBUG"]
  print "W#{msg}"
end
validate_event_name(event_name_as_sym) click to toggle source
# File lib/kommando/when.rb, line 53
def validate_event_name(event_name_as_sym)
  raise Kommando::Error, "When '#{event_name_as_sym}' is not known." unless VALID_EVENTS.include? event_name_as_sym
end