Module: StateManager::Adapters::ActiveRecord::ManagerMethods

Defined in:
lib/state_manager/adapters/active_record.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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

Returns:

  • (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

Raises:



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