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.
Class Method Summary collapse
Instance Method Summary collapse
- #after_save ⇒ Object
- #before_save ⇒ Object
- #perform_initial_transition? ⇒ Boolean
- #persist_state ⇒ Object
- #transition_to(*args) ⇒ Object
- #write_state(value) ⇒ Object
Instance Attribute Details
#pending_transition ⇒ Object
Returns the value of attribute pending_transition.
63 64 65 |
# File 'lib/state_manager/adapters/active_record.rb', line 63 def pending_transition @pending_transition end |
Class Method Details
.included(base) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/state_manager/adapters/active_record.rb', line 65 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_save ⇒ Object
91 92 93 94 95 |
# File 'lib/state_manager/adapters/active_record.rb', line 91 def after_save return unless pending_transition _run_after_callbacks(*pending_transition) self.pending_transition = nil end |
#before_save ⇒ Object
86 87 88 89 |
# File 'lib/state_manager/adapters/active_record.rb', line 86 def before_save return unless pending_transition _run_before_callbacks(*pending_transition) end |
#perform_initial_transition? ⇒ Boolean
105 106 107 |
# File 'lib/state_manager/adapters/active_record.rb', line 105 def perform_initial_transition? !current_state || resource.new_record? end |
#persist_state ⇒ Object
101 102 103 |
# File 'lib/state_manager/adapters/active_record.rb', line 101 def persist_state resource.save end |
#transition_to(*args) ⇒ Object
81 82 83 84 |
# File 'lib/state_manager/adapters/active_record.rb', line 81 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
97 98 99 |
# File 'lib/state_manager/adapters/active_record.rb', line 97 def write_state(value) resource.send :write_attribute, self.class._state_property, value.path end |