mongoid-genesis

Created: 2012-03-21 14:46
Updated: 2013-10-25 14:54
License: mit

README.md

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.

Cookies help us deliver our services. By using our services, you agree to our use of cookies Learn more