| Module | Opensteam::StateLogic::Mod::ClassMethods |
| In: |
lib/opensteam/state_logic.rb
|
# File lib/opensteam/state_logic.rb, line 71
71: def available_states
72: self.included_modules.select { |s|
73: s.ancestors.include?( Opensteam::StateLogic::Mod ) }.reject { |s|
74: s == Opensteam::StateLogic::Mod }
75: end
included method called when the state-module is included into the receiver-class (like Order, Shipment, Invoice)
for each instance-method of the state-module, it creates an alias (in the receiver-klass) and delegates it to the corresponding state-module (based on receiver.state -> StatePattern) through the fire_event method.
# File lib/opensteam/state_logic.rb, line 56
56: def included(receiver)
57: self.instance_methods(false).each do |m|
58:
59: receiver.class_eval do
60: define_method(m) { |*args| fire_event( m, *args ) }
61: end
62:
63: end
64:
65: state_name = self.to_s.demodulize.downcase
66: receiver.class_eval do
67: define_method("#{state_name}?") { self.state == state_name }
68: named_scope state_name, :conditions => ["#{self.table_name}.state = ?", state_name ]
69:
70: class << self ;
71: def available_states
72: self.included_modules.select { |s|
73: s.ancestors.include?( Opensteam::StateLogic::Mod ) }.reject { |s|
74: s == Opensteam::StateLogic::Mod }
75: end
76: end
77: end
78:
79: end
# File lib/opensteam/state_logic.rb, line 38
38: def name ; self.to_s.demodulize.downcase.to_sym ; end
# File lib/opensteam/state_logic.rb, line 40
40: def respond_to?( method )
41: self.protected_instance_methods.include?( method )
42: end