Sha256: 78f174d4b0e9c3fe5a89ada4a7b17bf344fe9afbce213bdfc43243f4ab0e538b

Contents?: true

Size: 1013 Bytes

Versions: 1

Compression:

Stored size: 1013 Bytes

Contents

require 'active_support/concern'
require 'mongoid'

module Mongoid::Fields
  class Localized
    def mongoize(object)
      if object.is_a? ::Hash
        object
      else
        { ::I18n.locale.to_s => type.mongoize(object) }
      end
    end
  end
end


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')
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mongoid-undo-0.0.1 lib/mongoid/undo.rb