module Mongoid::Genesis

Public Class Methods

included(base) click to toggle source
# File lib/mongoid/genesis.rb, line 5
def self.included(base)
  Object.const_set("#{base.name}Genesis", Class.new do
    include Mongoid::Document
    include Mongoid::Genesis::Storage

    embedded_in :alter, :class_name => base.name, :inverse_of => :genesis
  end)

  base.embeds_one :genesis, :class_name => "#{base.name}Genesis", :inverse_of => :alter
end

Public Instance Methods

init_genesis() click to toggle source
# File lib/mongoid/genesis.rb, line 16
def init_genesis
  self.genesis = "#{self.class.name}Genesis".constantize.new
end
read_attribute_genesis(field_name) click to toggle source
# File lib/mongoid/genesis.rb, line 20
def read_attribute_genesis(field_name)
  source = (self.genesis and self.genesis.field_preserved?(field_name)) ? self.genesis : self

  return source.read_attribute field_name
end
restore_genesis(field_name) click to toggle source
# File lib/mongoid/genesis.rb, line 26
def restore_genesis(field_name)
  self.genesis.restore field_name
end
reverse_genesis() click to toggle source
# File lib/mongoid/genesis.rb, line 30
def reverse_genesis
  self.genesis.reverse
end
write_and_preserve_attribute(field_name, value) click to toggle source
# File lib/mongoid/genesis.rb, line 34
def write_and_preserve_attribute(field_name, value)
  init_genesis if not self.genesis

  if value and self.genesis.read_attribute(field_name) == value
    self.restore_genesis(field_name)
  else
    self.genesis.preserve field_name
    self.write_attribute(field_name, value)
  end
end