Class: SimpleStates::States

Inherits:
Module
  • Object
show all
Includes:
Helpers
Defined in:
lib/simple_states/states.rb

Instance Method Summary collapse

Methods included from Helpers

#to_past

Instance Method Details

#define_event(name, opts) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 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

#eventsObject



8
9
10
# File 'lib/simple_states/states.rb', line 8

def events
  @events ||= {}
end

#statesObject



12
13
14
# File 'lib/simple_states/states.rb', line 12

def states
  events.values.map { |event| event.opts[:to] }.flatten.compact
end

#update_events(_, opts) ⇒ Object



35
36
37
38
39
40
41
# 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