Module: StateManager::Adapters::ActiveRecord::ManagerMethods
- Defined in:
- lib/state_manager/adapters/active_record.rb
Instance Attribute Summary collapse
-
#pending_transition ⇒ Object
Returns the value of attribute pending_transition.
-
#uncommitted_transitions ⇒ Object
Returns the value of attribute uncommitted_transitions.
Class Method Summary collapse
Instance Method Summary collapse
- #after_commit ⇒ Object
- #after_save ⇒ Object
- #before_save ⇒ Object
- #initialize ⇒ Object
- #perform_initial_transition? ⇒ Boolean
- #persist_state ⇒ Object
- #run_commit_callbacks(from_state, to_state, current_event, enter_states, exit_states) ⇒ Object
- #transition_to(*args) ⇒ Object
- #write_state(value) ⇒ Object
Instance Attribute Details
#pending_transition ⇒ Object
Returns the value of attribute pending_transition.
60 61 62 |
# File 'lib/state_manager/adapters/active_record.rb', line 60 def pending_transition @pending_transition end |
#uncommitted_transitions ⇒ Object
Returns the value of attribute uncommitted_transitions.
61 62 63 |
# File 'lib/state_manager/adapters/active_record.rb', line 61 def uncommitted_transitions @uncommitted_transitions end |
Class Method Details
.included(base) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/state_manager/adapters/active_record.rb', line 63 def self.included(base) base.class_eval do alias_method :_run_before_callbacks, :run_before_callbacks alias_method :_run_after_callbacks, :run_after_callbacks # In the AR use case, we don't want to run any callbacks # until the model has been saved def run_before_callbacks(*args) self.pending_transition = args end def run_after_callbacks(*args) end end end |
Instance Method Details
#after_commit ⇒ Object
105 106 107 108 109 110 111 |
# File 'lib/state_manager/adapters/active_record.rb', line 105 def after_commit transitions = self.uncommitted_transitions.dup self.uncommitted_transitions.clear transitions.each{ |t| run_commit_callbacks(*t) } end |
#after_save ⇒ Object
95 96 97 98 99 100 101 102 103 |
# File 'lib/state_manager/adapters/active_record.rb', line 95 def after_save return unless pending_transition transition = pending_transition self.uncommitted_transitions << self.pending_transition self.pending_transition = nil _run_after_callbacks(*transition) end |
#before_save ⇒ Object
90 91 92 93 |
# File 'lib/state_manager/adapters/active_record.rb', line 90 def before_save return unless pending_transition _run_before_callbacks(*pending_transition) end |
#initialize ⇒ Object
80 81 82 83 |
# File 'lib/state_manager/adapters/active_record.rb', line 80 def initialize(*) super self.uncommitted_transitions = [] end |
#perform_initial_transition? ⇒ Boolean
126 127 128 |
# File 'lib/state_manager/adapters/active_record.rb', line 126 def perform_initial_transition? !current_state || resource.new_record? end |
#persist_state ⇒ Object
122 123 124 |
# File 'lib/state_manager/adapters/active_record.rb', line 122 def persist_state resource.save! end |
#run_commit_callbacks(from_state, to_state, current_event, enter_states, exit_states) ⇒ Object
113 114 115 116 |
# File 'lib/state_manager/adapters/active_record.rb', line 113 def run_commit_callbacks(from_state, to_state, current_event, enter_states, exit_states) exit_states.each{ |s| s.exit_committed if s.respond_to? :exit_committed } enter_states.each{ |s| s.enter_committed if s.respond_to? :enter_committed } end |
#transition_to(*args) ⇒ Object
85 86 87 88 |
# File 'lib/state_manager/adapters/active_record.rb', line 85 def transition_to(*args) raise(DirtyTransition, "Only one state transition may be performed before saving a record. This error could be caused by the record being initialized to a default state.") if pending_transition super end |
#write_state(value) ⇒ Object
118 119 120 |
# File 'lib/state_manager/adapters/active_record.rb', line 118 def write_state(value) resource.send :write_attribute, self.class._state_property, value.path end |