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