Module: Stateful::ActiveRecord::ClassMethods
- Defined in:
- lib/Stateful/ActiveRecord/ClassMethods.rb
Class Method Summary collapse
Instance Method Summary collapse
- #define_stateful_attribute_getter_method(machine_name: nil) ⇒ Object
- #define_stateful_attribute_setter_method(machine_name: nil) ⇒ Object
- #stateful_attribute_name_for_machine(machine_name = nil) ⇒ Object
- #stateful_column_name ⇒ Object
-
#stateful_column_name=(stateful_column_name) ⇒ Object
class << self.
Class Method Details
.extended(klass) ⇒ Object
8 9 10 11 12 13 14 15 |
# File 'lib/Stateful/ActiveRecord/ClassMethods.rb', line 8 def extended(klass) klass.define_stateful_attribute_setter_method klass.define_stateful_attribute_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_stateful_attribute_getter_method(machine_name: nil) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/Stateful/ActiveRecord/ClassMethods.rb', line 44 def define_stateful_attribute_getter_method(machine_name: nil) stateful_column_name = stateful_attribute_name_for_machine(machine_name) define_method(stateful_column_name) do instance_variable_set("@#{stateful_column_name}", self.class.stateful_state_machine(machine_name).find(read_attribute(stateful_column_name))) if state = instance_variable_get("@#{stateful_column_name}") state else initial_state = self.class.stateful_state_machine(machine_name).initial_state self.send("#{stateful_column_name}=", initial_state.name) initial_state end end end |
#define_stateful_attribute_setter_method(machine_name: nil) ⇒ Object
34 35 36 37 38 39 40 41 42 |
# File 'lib/Stateful/ActiveRecord/ClassMethods.rb', line 34 def define_stateful_attribute_setter_method(machine_name: nil) stateful_column_name = stateful_attribute_name_for_machine(machine_name) define_method("#{stateful_column_name}=") do |state| instance_variable_set("@#{stateful_column_name}", self.class.stateful_state_machine(machine_name).find(state)) write_attribute(stateful_column_name, instance_variable_get("@#{stateful_column_name}").name) self.save instance_variable_get("@#{stateful_column_name}") end end |
#stateful_attribute_name_for_machine(machine_name = nil) ⇒ Object
26 27 28 29 30 31 32 |
# File 'lib/Stateful/ActiveRecord/ClassMethods.rb', line 26 def stateful_attribute_name_for_machine(machine_name = nil) if machine_name "#{machine_name}_state" else instance_variable_get(:@stateful_column_name) end end |
#stateful_column_name ⇒ Object
22 23 24 |
# File 'lib/Stateful/ActiveRecord/ClassMethods.rb', line 22 def stateful_column_name @stateful_column_name end |
#stateful_column_name=(stateful_column_name) ⇒ Object
class << self
18 19 20 |
# File 'lib/Stateful/ActiveRecord/ClassMethods.rb', line 18 def stateful_column_name=(stateful_column_name) @stateful_column_name = stateful_column_name end |