Sha256: 21685ac2b05650bf8c28a4987b609ceeaeb6d18ebe196c15634fda4853c08fa5

Contents?: true

Size: 1.09 KB

Versions: 1

Compression:

Stored size: 1.09 KB

Contents

module Paranoia
  def self.included(klazz)
    klazz.extend Query
  end

  module Query
    def paranoid? ; true ; end

    def only_deleted
      all.tap { |x| x.default_scoped = false }.where.not(deleted_at: nil)
    end

    def with_deleted
      all.tap { |x| x.default_scoped = false }
    end
  end

  def destroy
    run_callbacks(:destroy) { delete }
  end

  def delete
    return if new_record? or destroyed?
    update_column :deleted_at, Time.now
  end

  def restore!
    update_column :deleted_at, nil
  end

  def destroyed?
    !self.deleted_at.nil?
  end
  alias :deleted? :destroyed?
end

class ActiveRecord::Base
  def self.acts_as_paranoid
    alias :destroy! :destroy
    alias :delete!  :delete
    include Paranoia
    default_scope { where(:deleted_at => nil) }
  end

  def self.paranoid? ; false ; end
  def paranoid? ; self.class.paranoid? ; end

  # Override the persisted method to allow for the paranoia gem.
  # If a paranoid record is selected, then we only want to check
  # if it's a new record, not if it is "destroyed".
  def persisted?
    paranoid? ? !new_record? : super
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
paranoia-2.0.0 lib/paranoia.rb