Module: MongoidExt::Paranoia::ClassMethods

Defined in:
lib/mongoid_ext/paranoia.rb

Overview

:nodoc:

Instance Method Summary collapse

Instance Method Details

#deletedObject

Find deleted documents

Examples:

<tt>Person.deleted</tt>  # all deleted employees
<tt>Company.first.employees.deleted</tt>  # works with a join
<tt>Person.deleted.find("4c188dea7b17235a2a000001").first</tt>
<tt>Person.deleted.compact!(1.week.ago)</tt>


64
65
66
# File 'lib/mongoid_ext/paranoia.rb', line 64

def deleted
  self.paranoia_klass
end

#paranoia_klassObject



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/mongoid_ext/paranoia.rb', line 69

def paranoia_klass
  parent_klass = self
  @paranoia_klass ||= Class.new do
    include Mongoid::Document
    include Mongoid::Timestamps

    cattr_accessor :parent_class
    self.parent_class = parent_klass

    collection_name = "#{self.parent_class.collection.name}.trash"
    self.storage_options = {:collection => collection_name}

    field :document, :type => Hash

    before_validation :set_id, :on => :create

    def restore
      self.class.parent_class.create(self.document)
    end

    def self.compact!(date = 1.month.ago)
      self.delete_all(:created_at => {:$lte => date.to_time})
    end

    private
    def set_id
      self["_id"] = self.document["_id"]
    end
  end
end