Module: StateAttr::ClassMethods
- Defined in:
- lib/state_attr.rb,
lib/state_attr/state.rb
Defined Under Namespace
Classes: State
Instance Method Summary collapse
Instance Method Details
#state_attr(attr, machine, options = {}, &block) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/state_attr.rb', line 5 def state_attr(attr, machine, ={}, &block) #attr, initial = attr self.send :define_method, attr do @state_handlers ||= {} @state_handlers[attr] ||= State.new(self, attr, machine, logger, ) @state_handlers[attr] end if [:setter] == :exception self.send :define_method, "#{attr}=".to_sym do |state| raise "#{self.class.name} error, manual setting of state is not allowed (new value '#{state}')" end else self.send :define_method, "#{attr}=".to_sym do |state| @state_handlers ||= {} @state_handlers[attr] ||= State.new(self, attr, machine, logger, ) @state_handlers[attr].switch(state) end end if block_given? self.send :define_method, "on_#{attr}_change".to_sym, block end end |