module AASM::Persistence::MongoidPersistence::InstanceMethods

def aasm_ensure_initial_state


foo.aasm_state # => nil
foo.valid?
foo.aasm_state = nil
foo.aasm_state # => 1
foo = Foo.find(:first)


foo.aasm_state # => "open" (where :open is the initial state)
foo.valid?
foo.aasm_state # => nil
foo = Foo.new

that the initial state gets populated before validation on create
Ensures that if the aasm_state column is nil and the record is new
def aasm_ensure_initial_state
  AASM::StateMachineStore.fetch(self.class, true).machine_names.each do |state_machine_name|
    attribute_name = self.class.aasm(state_machine_name).attribute_name.to_s
    # Do not load initial state when object attributes are not loaded,
    # mongoid has_many relationship does not load child object attributes when
    # only ids are loaded, for example parent.child_ids will not load child object attributes.
    # This feature is introduced in mongoid > 4.
    if attribute_names.include?(attribute_name) && !attributes[attribute_name] || attributes[attribute_name].empty?
      # attribute_missing? is defined in mongoid > 4
      return if Mongoid::VERSION.to_f >= 4 && attribute_missing?(attribute_name)
      send("#{self.class.aasm(state_machine_name).attribute_name}=", aasm(state_machine_name).enter_initial_state.to_s)
    end
  end
end

def aasm_raise_invalid_record

def aasm_raise_invalid_record
  raise Mongoid::Errors::Validations.new(self)
end

def aasm_read_attribute(name)

def aasm_read_attribute(name)
  read_attribute(name)
end

def aasm_save

def aasm_save
  self.save
end

def aasm_supports_transactions?

def aasm_supports_transactions?
  false
end

def aasm_update_column(attribute_name, value)

def aasm_update_column(attribute_name, value)
  if Mongoid::VERSION.to_f >= 4
    set(Hash[attribute_name, value])
  else
    set(attribute_name, value)
  end
  true
end

def aasm_write_attribute(name, value)

def aasm_write_attribute(name, value)
  write_attribute(name, value)
end