discourse/lib/trashable.rb

41 lines
890 B
Ruby
Raw Normal View History

module Trashable
extend ActiveSupport::Concern
included do
default_scope where(with_deleted_scope_sql)
2013-05-07 00:46:46 -04:00
# scope unscoped does not work
end
module ClassMethods
def with_deleted
2013-05-07 00:46:46 -04:00
# lifted from acts_as_paranoid, works around https://github.com/rails/rails/issues/4306
#
# with this in place Post.limit(10).with_deleted, will work as expected
#
scope = self.scoped.with_default_scope
scope.where_values.delete(with_deleted_scope_sql)
scope
end
def with_deleted_scope_sql
2013-05-07 00:46:46 -04:00
scoped.table[:deleted_at].eq(nil).to_sql
end
end
def trash!
2013-05-07 00:46:46 -04:00
update_column(:deleted_at, DateTime.now)
end
def recover!
# see: https://github.com/rails/rails/issues/8436
2013-05-07 00:46:46 -04:00
#
# Fixed in Rails 4
#
self.class.unscoped.update_all({deleted_at: nil}, id: self.id)
raw_write_attribute :deleted_at, nil
end
end