Skip to content

Latest commit

 

History

History
131 lines (87 loc) · 2.8 KB

README.md

File metadata and controls

131 lines (87 loc) · 2.8 KB

Mongoid Genesis

Build Status

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:

gem 'mongoid-genesis'

Usage

Mongoid Genesis is compatible with any mongoid collection or embedded object.

Model integration

class Book
  include Mongoid::Document
  include Mongoid::Genesis
end

This will create an embedded object that will store the original data.

Basic structure

book = Book.new(:title => 'The Art of War', :author => 'Sun Tzu')
#=> #<Book _id: 1, title: "The Art of War", author: "Sun Tzu">

book.genesis
#=> #<BookGenesis _id: 1>

Preserve the original attribute

book.write_and_preserve_attribute(:author, 'Sun Zi')
#=> #<Book _id: 1, title: "The Art of War", author: "Sun Zi">

book.genesis
#=> #<BookGenesis _id: 1, author: "Sun Tzu">

After preserving the original attribute, it will not be overwritten

book.write_and_preserve_attribute(:author, 'Sun Wu')
#=> #<Book _id: 1, title: "The Art of War", author: "Sun Wu">

book.genesis
#=> #<BookGenesis _id: 1, author: "Sun Tzu">

At all time, you can read the original attribute

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

book.restore_genesis(:author)
#=> #<Book _id: 1, title: "The Art of War", author: "Sun Tzu">

book.genesis
#=> #<BookGenesis _id: 1, author: nil>

To update the original document without losing the current state

book.write_and_preserve_attribute(:title, 'The Art of Peace')
book.reverse_genesis

#=> #<Book _id: 1, title: "The Art of War", author: "Sun Tzu">
#=> #<BookGenesis _id: 1, title: "The Art of Peace">

book.title = "The Art of War : Revisited"
book.reverse_genesis

#=> #<Book _id: 1, title: "The Art of Peace", author: "Sun Tzu">
#=> #<BookGenesis _id: 1, title: "The Art of War : Revisited">

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.