Home

Awesome

mongoid-undo Build Status

Super simple undo for your Mongoid app, based on both great modules Mongoid::Paranoia and Mongoid::Versioning.

How does it work?

But instead of explaining all the details, you should get the idea by looking at the Usage section.

Installation

In your Gemfile:

gem 'mongoid-undo'

Usage

class Document
  include Mongoid::Document
  include Mongoid::Undo
end

Creating (and undoing)

document = Document.create
document.persisted? #=> true

document.undo
document.persisted? #=> false

document.redo # A nice alias for undo ;)
document.persisted? #=> true

Updating (and undoing)

document = Document.create(name: 'foo')

document.undoable? # => false
document.save
document.undoable? # => false

document.update_attributes(name: 'bar')
document.undoable? # => true
document.name #=> 'bar'

document.undo
document.name #=> 'foo'

document.redo
document.name #=> 'bar'

Destroying (and undoing)

document = Document.first

document.destroy
document.persisted? #=> false

document.undo
document.persisted? #=> true

document.redo
document.persisted? #=> false

Callbacks

Mongoid::Undo defines two callbacks which are called before and after undo, respectively redo. Both are based on ActiveModel::Callbacks which means they behave like the already known Rails callbacks.

class Document
  include Mongoid::Document
  include Mongoid::Undo

  before_undo do
    # Do something fancy.
  end

  before_redo { false } # Don't allow redoing.
end

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Copyright

(The MIT license)

Copyright (c) 2012-2015 Mario Uher

See LICENSE.md.