class SimpleStates::States

Public Instance Methods

define_event(name, opts) click to toggle source
Calls superclass method
# File lib/simple_states/states.rb, line 16
def define_event(name, opts)
  events[name] = Event.new(name, { to: to_past(name).to_sym }.merge(opts))

  send(:define_method, name) do |data = {}, opts = {}|
    self.class::States.events[name].call(self, data, opts) do
      if method(name).respond_to?(:super_method)
        supa = method(name).super_method
        supa.call(*[name, data].slice(0, supa.arity.abs)) if supa
      elsif defined?(super)
        super(name, data)
      end
    end
  end

  send(:define_method, :"#{name}!") do |data = {}|
    send(name, data, save: true)
  end
end
events() click to toggle source
# File lib/simple_states/states.rb, line 8
def events
  @events ||= {}
end
states() click to toggle source
# File lib/simple_states/states.rb, line 12
def states
  events.values.map { |event| event.opts[:to] }.flatten.compact
end
update_events(_, opts) click to toggle source
# File lib/simple_states/states.rb, line 35
def update_events(_, opts)
  events.values.each do |event|
    opts.each do |key, value|
      event.opts[key] = Array(event.opts[key]).concat(Array(value))
    end
  end
end