Yet another gem to store versions of your model’s data, but using MongoDB as backend. Based on PaperTrail (github.com/airblade/paper_trail/).
It also allows you to versionate associated models (by now, only one-to-one associations).
It depend on mongo and mongo_mapper gems. Your MongoDB connection might already have been created.
As it uses a NoSQL db, you don’t need migrations to start using it.
The main goal of DejaVue is to keep track of associated models. It’s useful for a model whose relations change among time and to see how it really looked like at a certain point.
As in PaperTrail, there are 3 kinds of versions: create, update and destroy
$ bundle install
$ gem install gemcutter
$ gem build deja_vue.gemspec $ gem install ./deja_vue-*.gem
Add a single line and your model will start beeing versionated:
def SomeModel < ActiveRecord::Base has_deja_vue end
Or, for example, use the ignore option:
def SomeModel < ActiveRecord::Base has_deja_vue :ignore => :location end
Sometimes you might need to set the user that is changing the model data dynamically, eg. while processing background jobs.
In such case, you can set user using:
DejaVue.setting_user_as('admin') do @post.title = 'new title' @post.save end
This way you will set who_did_it as ‘admin’, create a new history version and then rollback to previous user.
You might pass some options, including: :ignore | An Array of fields that will be ignored. If | only those fields have changed, then no version | will be created. | has_deja_vue :ignore => :last_exported_on :associations | Store associated models to be record with the model | so it can be fully restored. Right now it works only | with has_one / belongs_to relationships. | Ex.: | class Account < ActiveRecord::Base | has_one :account_preference | | has_deja_vue :associations => [:account_preference] | end | :extra_info_fields | Almost the same as the above option. But it handles | more simple info (like strings, integers, floats). | Useful to store a tag_list field or a counter cache | Ex: | | class BlogPost < ActiveRecord::Base | acts_as_taggable_on :tags | | has_deja_vue :extra_info_fields => [:tag_list] | end | :who_did_it | a default value for record who_did_it when you | are not in a request-response cycle (ex. in a job). | Ex.: | has_deja_vue :who_did_it => 'admin' | Alternatively you are able to set the user right | before save the model that will be versionated, using: | DejaVue.who_did_it = 'otavio' | SomeModel.save
Differently from PaperTrail, each version will record the current model info.
So PapelTrail create version have reify == nil
DejaVue have create version == model_data_while_creating
github.com/riopro/deja_vue/issues
Otávio Sampaio (osampaio at riopro dot com dot br)
Rodrigo Oliveira (roliveira at riopro dot com dot br)