Commit 49b9e68e by Iaan Krynauw

Use ActiveSupport.on_load to correctly re-open ActiveRecord::Base.…

Use ActiveSupport.on_load to correctly re-open ActiveRecord::Base. https://github.com/rubysherpas/paranoia/issues/335
parent b5b38231
...@@ -205,56 +205,58 @@ module Paranoia ...@@ -205,56 +205,58 @@ module Paranoia
end end
end end
class ActiveRecord::Base ActiveSupport.on_load(:active_record) do
def self.acts_as_paranoid(options={}) class ActiveRecord::Base
alias_method :really_destroyed?, :destroyed? def self.acts_as_paranoid(options={})
alias_method :really_delete, :delete alias_method :really_destroyed?, :destroyed?
alias_method :destroy_without_paranoia, :destroy alias_method :really_delete, :delete
alias_method :destroy_without_paranoia, :destroy
include Paranoia
class_attribute :paranoia_column, :paranoia_sentinel_value 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 } self.paranoia_column = (options[:column] || :deleted_at).to_s
def self.paranoia_scope self.paranoia_sentinel_value = options.fetch(:sentinel_value) { Paranoia.default_sentinel_value }
where(paranoia_column => paranoia_sentinel_value) def self.paranoia_scope
end where(paranoia_column => paranoia_sentinel_value)
class << self; alias_method :without_deleted, :paranoia_scope end end
class << self; alias_method :without_deleted, :paranoia_scope end
unless options[:without_default_scope] unless options[:without_default_scope]
default_scope { paranoia_scope } default_scope { paranoia_scope }
end end
before_restore { before_restore {
self.class.notify_observers(:before_restore, self) if self.class.respond_to?(:notify_observers) self.class.notify_observers(:before_restore, self) if self.class.respond_to?(:notify_observers)
} }
after_restore { after_restore {
self.class.notify_observers(:after_restore, self) if self.class.respond_to?(:notify_observers) self.class.notify_observers(:after_restore, self) if self.class.respond_to?(:notify_observers)
} }
end end
# Please do not use this method in production. # Please do not use this method in production.
# Pretty please. # Pretty please.
def self.I_AM_THE_DESTROYER! def self.I_AM_THE_DESTROYER!
# TODO: actually implement spelling error fixes # TODO: actually implement spelling error fixes
puts %Q{ puts %Q{
Sharon: "There should be a method called I_AM_THE_DESTROYER!" Sharon: "There should be a method called I_AM_THE_DESTROYER!"
Ryan: "What should this method do?" Ryan: "What should this method do?"
Sharon: "It should fix all the spelling errors on the page!" Sharon: "It should fix all the spelling errors on the page!"
} }
end end
def self.paranoid? ; false ; end def self.paranoid? ; false ; end
def paranoid? ; self.class.paranoid? ; end def paranoid? ; self.class.paranoid? ; end
private private
def paranoia_column def paranoia_column
self.class.paranoia_column self.class.paranoia_column
end end
def paranoia_sentinel_value def paranoia_sentinel_value
self.class.paranoia_sentinel_value self.class.paranoia_sentinel_value
end
end end
end end
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment