class ActiveRecord::Base
Public Class Methods
I_AM_THE_DESTROYER!()
click to toggle source
Please do not use this method in production. Pretty please.
# File lib/paranoia.rb, line 233 def self.I_AM_THE_DESTROYER! # TODO: actually implement spelling error fixes puts %Q{ Sharon: "There should be a method called I_AM_THE_DESTROYER!" Ryan: "What should this method do?" Sharon: "It should fix all the spelling errors on the page!" } end
acts_as_paranoid(options={})
click to toggle source
# File lib/paranoia.rb, line 184 def self.acts_as_paranoid(options={}) alias :really_destroyed? :destroyed? alias :really_delete :delete alias :destroy_without_paranoia :destroy def really_destroy! transaction do run_callbacks(:real_destroy) do dependent_reflections = self.class.reflections.select do |name, reflection| reflection.options[:dependent] == :destroy end if dependent_reflections.any? dependent_reflections.each do |name, reflection| association_data = self.send(name) # has_one association can return nil # .paranoid? will work for both instances and classes next unless association_data && association_data.paranoid? if reflection.collection? next association_data.with_deleted.each(&:really_destroy!) end association_data.really_destroy! end end write_attribute(paranoia_column, current_time_from_proper_timezone) destroy_without_paranoia end end end include Paranoia class_attribute :paranoia_column, :paranoia_sentinel_value self.paranoia_column = (options[:column] || :deleted_at).to_s self.paranoia_sentinel_value = options.fetch(:sentinel_value) { Paranoia.default_sentinel_value } def self.paranoia_scope where(paranoia_column => paranoia_sentinel_value) end default_scope { paranoia_scope } before_restore { self.class.notify_observers(:before_restore, self) if self.class.respond_to?(:notify_observers) } after_restore { self.class.notify_observers(:after_restore, self) if self.class.respond_to?(:notify_observers) } end
paranoia_scope()
click to toggle source
# File lib/paranoia.rb, line 218 def self.paranoia_scope where(paranoia_column => paranoia_sentinel_value) end
paranoid?()
click to toggle source
# File lib/paranoia.rb, line 242 def self.paranoid? ; false ; end
Public Instance Methods
paranoid?()
click to toggle source
# File lib/paranoia.rb, line 243 def paranoid? ; self.class.paranoid? ; end
really_destroy!()
click to toggle source
# File lib/paranoia.rb, line 189 def really_destroy! transaction do run_callbacks(:real_destroy) do dependent_reflections = self.class.reflections.select do |name, reflection| reflection.options[:dependent] == :destroy end if dependent_reflections.any? dependent_reflections.each do |name, reflection| association_data = self.send(name) # has_one association can return nil # .paranoid? will work for both instances and classes next unless association_data && association_data.paranoid? if reflection.collection? next association_data.with_deleted.each(&:really_destroy!) end association_data.really_destroy! end end write_attribute(paranoia_column, current_time_from_proper_timezone) destroy_without_paranoia end end end
Private Instance Methods
paranoia_column()
click to toggle source
# File lib/paranoia.rb, line 247 def paranoia_column self.class.paranoia_column end
paranoia_sentinel_value()
click to toggle source
# File lib/paranoia.rb, line 251 def paranoia_sentinel_value self.class.paranoia_sentinel_value end