module ActiveModel::Transitions

Private Instance Methods

new_transitions_initialize(*args, &block) click to toggle source
# File lib/active_model/transitions.rb, line 12
def new_transitions_initialize(*args, &block)
  @attribute_name = :state
  old_transitions_initialize(*args, &block)
end
new_transitions_update(options = {}, &block) click to toggle source
# File lib/active_model/transitions.rb, line 17
def new_transitions_update(options = {}, &block)
  @attribute_name = options[:attribute_name] if options.key?(:attribute_name)
  old_transitions_update(options, &block)
end
read_state() click to toggle source
# File lib/active_model/transitions.rb, line 63
def read_state
  self[transitions_state_column_name] && self[transitions_state_column_name].to_sym
end
reload(*) click to toggle source

The optional options argument is passed to find when reloading so you may do e.g. record.reload(:lock => true) to reload the same record with an exclusive row lock.

Calls superclass method
# File lib/active_model/transitions.rb, line 35
def reload(*)
  super.tap do
    sm = self.class.get_state_machine
    remove_instance_variable(sm.current_state_variable) if instance_variable_defined?(sm.current_state_variable)
  end
end
set_initial_state() click to toggle source

rubocop:disable Metrics/AbcSize

# File lib/active_model/transitions.rb, line 70
def set_initial_state
  # In case we use a query with a custom select that excludes our state attribute
  # name we need to skip the initialization below.
  return unless attribute_names.include?(transitions_state_column_name.to_s) && state_not_set?
  self[transitions_state_column_name] = self.class.get_state_machine.initial_state.to_s
  self.class.get_state_machine.state_index[self[transitions_state_column_name].to_sym].call_action(:enter, self)
end
state_included?() click to toggle source
# File lib/active_model/transitions.rb, line 92
def state_included?
  self.class.get_state_machine.states
      .map { |s| s.name.to_s }
      .include?(self[transitions_state_column_name].to_s)
end
state_inclusion() click to toggle source
# File lib/active_model/transitions.rb, line 83
def state_inclusion
  return if state_included?
  errors.add(transitions_state_column_name, :inclusion, value: self[transitions_state_column_name])
end
state_not_set?() click to toggle source
# File lib/active_model/transitions.rb, line 88
def state_not_set?
  self[transitions_state_column_name].nil?
end
state_presence() click to toggle source
# File lib/active_model/transitions.rb, line 78
def state_presence
  return if self[transitions_state_column_name].present?
  errors.add(transitions_state_column_name, :presence)
end
transitions_state_column_name() click to toggle source
# File lib/active_model/transitions.rb, line 44
def transitions_state_column_name
  self.class.state_machine.attribute_name
end
write_state(state) click to toggle source
# File lib/active_model/transitions.rb, line 48
def write_state(state)
  prev_state = current_state
  write_state_without_persistence(state)
  save!
rescue ActiveRecord::RecordInvalid
  write_state_without_persistence(prev_state)
  raise
end
write_state_without_persistence(state) click to toggle source
# File lib/active_model/transitions.rb, line 57
def write_state_without_persistence(state)
  ivar = self.class.get_state_machine.current_state_variable
  instance_variable_set(ivar, state)
  self[transitions_state_column_name] = state.to_s
end