Module: Stateful::Poro::ClassMethods
- Defined in:
- lib/Stateful/Poro/ClassMethods.rb
Class Method Summary collapse
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
class << self.
- #define_next_state_method(machine_name: nil) ⇒ Object
- #define_stateful_variable_name_getter_method(machine_name: nil) ⇒ Object
- #define_stateful_variable_name_setter_method(machine_name: nil) ⇒ Object
- #define_status_predicate_method(state_name, machine_name: nil) ⇒ Object
- #define_transitions_method(machine_name: nil) ⇒ Object
- #stateful_variable_name ⇒ Object
- #stateful_variable_name=(stateful_variable_name) ⇒ Object
- #variable_name_for_machine(machine_name = nil) ⇒ Object
Class Method Details
.extended(klass) ⇒ Object
8 9 10 11 12 13 14 15 |
# File 'lib/Stateful/Poro/ClassMethods.rb', line 8 def extended(klass) klass.define_stateful_variable_name_setter_method klass.define_stateful_variable_name_getter_method klass.define_next_state_method klass.define_transitions_method klass.define_initial_stateQ_method klass.define_final_stateQ_method end |
Instance Method Details
#define_event_method(transition, machine_name: nil) ⇒ Object
43 44 45 46 47 48 49 50 |
# File 'lib/Stateful/Poro/ClassMethods.rb', line 43 def define_event_method(transition, machine_name: nil) variable_name = variable_name_for_machine(machine_name) define_method(transition.event_name) do next_state_name = self.send(variable_name).next_state_name(transition.event_name) next_state = self.class.stateful_state_machine(machine_name).find(next_state_name) self.send("#{variable_name}=", next_state) end end |
#define_final_stateQ_method(machine_name: nil) ⇒ Object
104 105 106 107 108 109 110 |
# File 'lib/Stateful/Poro/ClassMethods.rb', line 104 def define_final_stateQ_method(machine_name: nil) variable_name = variable_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(variable_name)) end end |
#define_initial_stateQ_method(machine_name: nil) ⇒ Object
96 97 98 99 100 101 102 |
# File 'lib/Stateful/Poro/ClassMethods.rb', line 96 def define_initial_stateQ_method(machine_name: nil) variable_name = variable_name_for_machine(machine_name) method_name = machine_name ? "#{machine_name}_initial_state?" : :initial_state? define_method(method_name) do self.send(variable_name) == self.class.stateful_state_machine(machine_name).initial_state end end |
#define_named_machine_methods(machine_name) ⇒ Object
class << self
18 19 20 21 22 23 24 25 |
# File 'lib/Stateful/Poro/ClassMethods.rb', line 18 def define_named_machine_methods(machine_name) define_stateful_variable_name_setter_method(machine_name: machine_name) define_stateful_variable_name_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
79 80 81 82 83 84 85 86 |
# File 'lib/Stateful/Poro/ClassMethods.rb', line 79 def define_next_state_method(machine_name: nil) variable_name = variable_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(variable_name).next_state_name(event_name) self.class.stateful_state_machine(machine_name).find(next_state_name) end end |
#define_stateful_variable_name_getter_method(machine_name: nil) ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/Stateful/Poro/ClassMethods.rb', line 66 def define_stateful_variable_name_getter_method(machine_name: nil) variable_name = variable_name_for_machine(machine_name) define_method(variable_name) do if state = instance_variable_get("@#{variable_name}") state else initial_state = self.class.stateful_state_machine(machine_name).initial_state self.send("#{variable_name}=", initial_state.name) initial_state end end end |
#define_stateful_variable_name_setter_method(machine_name: nil) ⇒ Object
59 60 61 62 63 64 |
# File 'lib/Stateful/Poro/ClassMethods.rb', line 59 def define_stateful_variable_name_setter_method(machine_name: nil) variable_name = variable_name_for_machine(machine_name) define_method("#{variable_name}=") do |state| instance_variable_set("@#{variable_name}", self.class.stateful_state_machine(machine_name).find(state)) end end |
#define_status_predicate_method(state_name, machine_name: nil) ⇒ Object
52 53 54 55 56 57 |
# File 'lib/Stateful/Poro/ClassMethods.rb', line 52 def define_status_predicate_method(state_name, machine_name: nil) variable_name = variable_name_for_machine(machine_name) define_method("#{state_name}?") do self.send(variable_name).name == state_name end end |
#define_transitions_method(machine_name: nil) ⇒ Object
88 89 90 91 92 93 94 |
# File 'lib/Stateful/Poro/ClassMethods.rb', line 88 def define_transitions_method(machine_name: nil) variable_name = variable_name_for_machine(machine_name) method_name = machine_name ? "#{machine_name}_transitions" : :transitions define_method(method_name) do self.send(variable_name).transitions end end |
#stateful_variable_name ⇒ Object
31 32 33 |
# File 'lib/Stateful/Poro/ClassMethods.rb', line 31 def stateful_variable_name @stateful_variable_name end |
#stateful_variable_name=(stateful_variable_name) ⇒ Object
27 28 29 |
# File 'lib/Stateful/Poro/ClassMethods.rb', line 27 def stateful_variable_name=(stateful_variable_name) @stateful_variable_name = stateful_variable_name end |
#variable_name_for_machine(machine_name = nil) ⇒ Object
35 36 37 38 39 40 41 |
# File 'lib/Stateful/Poro/ClassMethods.rb', line 35 def variable_name_for_machine(machine_name = nil) if machine_name "#{machine_name}_state" else instance_variable_get(:@stateful_variable_name) end end |