Module: Stateful::ClassMethods
- Defined in:
- lib/Stateful/ClassMethods.rb
Instance Method Summary collapse
- #define_event_method(transition, machine_name: nil) ⇒ Object
- #define_final_stateQ_method(machine_name: nil) ⇒ Object
- #define_initial_stateQ_method(machine_name: nil) ⇒ Object
-
#define_named_machine_methods(machine_name) ⇒ Object
adapter methods.
- #define_next_state_method(machine_name: nil) ⇒ Object
- #define_status_predicate_method(state_name, machine_name: nil) ⇒ Object
- #define_transitions_method(machine_name: nil) ⇒ Object
- #final_state(*state_names) ⇒ Object
-
#final_state? ⇒ Boolean
(also: #has_final_state?)
predicate methods.
- #final_states(*state_names) ⇒ Object
- #initial_state(state_name = nil, options = {}, &block) ⇒ Object
- #state(state_name, options = {}, &block) ⇒ Object
- #state_machine(name, options = {}, &block) ⇒ Object
- #state_machines ⇒ Object
-
#stateful(options = {}, &block) ⇒ Object
start DSL.
- #stateful_state_machine(machine_name = nil) ⇒ Object
Instance Method Details
#define_event_method(transition, machine_name: nil) ⇒ Object
65 66 67 68 69 70 71 72 |
# File 'lib/Stateful/ClassMethods.rb', line 65 def define_event_method(transition, machine_name: nil) attribute_name = stateful_attribute_name_for_machine(machine_name) define_method(transition.event_name) do next_state_name = self.send(attribute_name).next_state_name(transition.event_name) next_state = self.class.stateful_state_machine(machine_name).find(next_state_name) self.send("#{attribute_name}=", next_state) end end |
#define_final_stateQ_method(machine_name: nil) ⇒ Object
106 107 108 109 110 111 112 |
# File 'lib/Stateful/ClassMethods.rb', line 106 def define_final_stateQ_method(machine_name: nil) attribute_name = stateful_attribute_name_for_machine(machine_name) method_name = machine_name ? "#{machine_name}_final_state?" : :final_state? define_method(method_name) do self.class.stateful_state_machine(machine_name).final_states.include?(self.send(attribute_name)) end end |
#define_initial_stateQ_method(machine_name: nil) ⇒ Object
98 99 100 101 102 103 104 |
# File 'lib/Stateful/ClassMethods.rb', line 98 def define_initial_stateQ_method(machine_name: nil) attribute_name = stateful_attribute_name_for_machine(machine_name) method_name = machine_name ? "#{machine_name}_initial_state?" : :initial_state? define_method(method_name) do self.send(attribute_name) == self.class.stateful_state_machine(machine_name).initial_state end end |
#define_named_machine_methods(machine_name) ⇒ Object
adapter methods
56 57 58 59 60 61 62 63 |
# File 'lib/Stateful/ClassMethods.rb', line 56 def define_named_machine_methods(machine_name) define_stateful_attribute_setter_method(machine_name: machine_name) define_stateful_attribute_getter_method(machine_name: machine_name) define_next_state_method(machine_name: machine_name) define_transitions_method(machine_name: machine_name) define_initial_stateQ_method(machine_name: machine_name) define_final_stateQ_method(machine_name: machine_name) end |
#define_next_state_method(machine_name: nil) ⇒ Object
81 82 83 84 85 86 87 88 |
# File 'lib/Stateful/ClassMethods.rb', line 81 def define_next_state_method(machine_name: nil) attribute_name = stateful_attribute_name_for_machine(machine_name) method_name = machine_name ? "#{machine_name}_next_state" : :next_state define_method(method_name) do |event_name| next_state_name = self.send(attribute_name).next_state_name(event_name) self.class.stateful_state_machine(machine_name).find(next_state_name) end end |
#define_status_predicate_method(state_name, machine_name: nil) ⇒ Object
74 75 76 77 78 79 |
# File 'lib/Stateful/ClassMethods.rb', line 74 def define_status_predicate_method(state_name, machine_name: nil) attribute_name = stateful_attribute_name_for_machine(machine_name) define_method("#{state_name}?") do self.send(attribute_name).name == state_name end end |
#define_transitions_method(machine_name: nil) ⇒ Object
90 91 92 93 94 95 96 |
# File 'lib/Stateful/ClassMethods.rb', line 90 def define_transitions_method(machine_name: nil) attribute_name = stateful_attribute_name_for_machine(machine_name) method_name = machine_name ? "#{machine_name}_transitions" : :transitions define_method(method_name) do self.send(attribute_name).transitions end end |
#final_state(*state_names) ⇒ Object
44 45 46 |
# File 'lib/Stateful/ClassMethods.rb', line 44 def final_state(*state_names) stateful_state_machine.final_state(*state_names) end |
#final_state? ⇒ Boolean Also known as: has_final_state?
predicate methods
116 117 118 119 120 121 122 |
# File 'lib/Stateful/ClassMethods.rb', line 116 def final_state? if state_machines.empty? !final_states.empty? else state_machines.all?{|_name, states| !states.final_states.empty?} end end |
#final_states(*state_names) ⇒ Object
48 49 50 |
# File 'lib/Stateful/ClassMethods.rb', line 48 def final_states(*state_names) stateful_state_machine.final_states(*state_names) end |
#initial_state(state_name = nil, options = {}, &block) ⇒ Object
36 37 38 |
# File 'lib/Stateful/ClassMethods.rb', line 36 def initial_state(state_name = nil, = {}, &block) stateful_state_machine.initial_state(state_name, , &block) end |
#state(state_name, options = {}, &block) ⇒ Object
40 41 42 |
# File 'lib/Stateful/ClassMethods.rb', line 40 def state(state_name, = {}, &block) stateful_state_machine.state(state_name, , &block) end |
#state_machine(name, options = {}, &block) ⇒ Object
27 28 29 30 31 32 33 34 |
# File 'lib/Stateful/ClassMethods.rb', line 27 def state_machine(name, = {}, &block) unless state_machines.key?(name) define_named_machine_methods(name) end sm = stateful_state_machine(name) sm. = unless .empty? sm.instance_eval(&block) if block end |
#state_machines ⇒ Object
8 9 10 |
# File 'lib/Stateful/ClassMethods.rb', line 8 def state_machines @state_machines ||= {} end |
#stateful(options = {}, &block) ⇒ Object
start DSL
22 23 24 25 |
# File 'lib/Stateful/ClassMethods.rb', line 22 def stateful( = {}, &block) stateful_state_machine. = unless .empty? class_eval(&block) if block end |
#stateful_state_machine(machine_name = nil) ⇒ Object
12 13 14 15 16 17 18 |
# File 'lib/Stateful/ClassMethods.rb', line 12 def stateful_state_machine(machine_name = nil) if machine_name state_machines[machine_name] ||= Stateful::StateMachine.new(self, machine_name: machine_name) else @stateful_state_machine ||= Stateful::StateMachine.new(self) end end |