Mongoid Genesis =============== [![Build Status](https://secure.travis-ci.org/demarque/mongoid-genesis.png?branch=master)](http://travis-ci.org/demarque/mongoid-genesis) Mongoid Genesis will give you the ability to override data in your model without losing the initial data. Install ------- ``` gem install mongoid-genesis ``` Rails 3 ------- In your Gemfile: ```ruby gem 'mongoid-genesis' ``` Usage ----- Mongoid Genesis is compatible with any mongoid collection or embedded object. #### Model integration ```ruby class Book include Mongoid::Document include Mongoid::Genesis end ``` This will create an embedded object that will store the original data. #### Basic structure ```ruby book = Book.new(:title => 'The Art of War', :author => 'Sun Tzu') #=> # book.genesis #=> # ``` #### Preserve the original attribute ```ruby book.write_and_preserve_attribute(:author, 'Sun Zi') #=> # book.genesis #=> # ``` #### After preserving the original attribute, it will not be overwritten ```ruby book.write_and_preserve_attribute(:author, 'Sun Wu') #=> # book.genesis #=> # ``` #### At all time, you can read the original attribute ```ruby book.read_attribute_genesis(:title) #=> "The Art of War" book.write_and_preserve_attribute(:title, 'The Art of Peace') book.read_attribute_genesis(:title) #=> "The Art of War" ``` #### You can restore the original attribute ```ruby book.restore_genesis(:author) #=> # book.genesis #=> # ``` #### To update the original document without losing the current state ```ruby book.write_and_preserve_attribute(:title, 'The Art of Peace') book.reverse_genesis #=> # #=> # book.title = "The Art of War : Revisited" book.reverse_genesis #=> # #=> # ``` Cheat Sheet --------- #### read_attribute_genesis(field_name) Read the original attribute of the record. If the attribute wasn't overwritten, it will return the same thing as .read_attribute. #### restore_genesis(field_name) Restore the original value for the given field #### reverse_genesis Restore the record to its original state #### write_and_preserve_attribute(field_name, value) Overwrite the attribute with the *value* and saves the original value in the genesis object. Copyright --------- Copyright (c) 2012 De Marque inc. See LICENSE for further details.