85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
# File 'lib/simple_machine.rb', line 85
def implement_state_machine_for(state_field_name, &block)
machine_property_name = "#{state_field_name}_machine".to_sym
default_state_field_name = "#{state_field_name}_default_state".to_sym
define_method state_field_name do
result = instance_variable_get "@#{state_field_name}"
result = instance_variable_set "@#{state_field_name}", self.class.send(default_state_field_name) unless result
result
end
define_method machine_property_name do
result = instance_variable_get "@#{machine_property_name}"
result = instance_variable_set "@#{machine_property_name}", SimpleMachine::ClassMethods.get_state_machine_class_for(self.class, state_field_name).new(self) unless result
result
end
self.class.class_eval do
define_method default_state_field_name do
instance_variable_get "@#{default_state_field_name}"
end
end
SimpleMachine::ClassMethods.get_state_machine_class_for(self, state_field_name).instance_eval &block
raise "Initial state not defined." unless send default_state_field_name
end
|