Sha256: 6647162b0a5e71ef69f19d7ef016bd5976c769fc773248d27a71a1cbec69e23e

Contents?: true

Size: 814 Bytes

Versions: 3

Compression:

Stored size: 814 Bytes

Contents

require 'active_support'
require 'mongoid'

module Mongoid
  module Undo
    extend ActiveSupport::Concern

    include Mongoid::Paranoia
    include Mongoid::Versioning

    included do
      field :action, type: Symbol, versioned: false
      index deleted_at: 1

      [:create, :update, :destroy].each do |action|
        set_callback action, :after do
          collection.find(atomic_selector).update('$set' => { action: action })
          reload
        end
      end
    end

    def undo
      case action
      when :create, :destroy
        deleted_at.present? ? restore : delete
      when :update
        retrieve
      end
    end
    alias_method :redo, :undo

  private
    def retrieve
      update_attributes(versions.last.versioned_attributes.except('version', 'updated_at'))
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mongoid-undo-0.9.1 lib/mongoid/undo.rb
mongoid-undo-0.9.0 lib/mongoid/undo.rb
mongoid-undo-0.8.0 lib/mongoid/undo.rb