mirror of
https://github.com/discourse/discourse.git
synced 2025-02-03 23:05:32 +08:00
89ad2b5900
This updates tests to use latest rails 5 practice and updates ALL dependencies that could be updated Performance testing shows that performance has not regressed if anything it is marginally faster now.
53 lines
1.3 KiB
Ruby
53 lines
1.3 KiB
Ruby
module Trashable
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
default_scope { where(with_deleted_scope_sql) }
|
|
|
|
# scope unscoped does not work
|
|
belongs_to :deleted_by, class_name: 'User'
|
|
end
|
|
|
|
module ClassMethods
|
|
def with_deleted
|
|
# 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.all
|
|
|
|
scope.where_clause.send(:predicates).delete(with_deleted_scope_sql)
|
|
scope
|
|
end
|
|
|
|
def with_deleted_scope_sql
|
|
all.table[:deleted_at].eq(nil).to_sql
|
|
end
|
|
end
|
|
|
|
def trashed?
|
|
deleted_at.present?
|
|
end
|
|
|
|
def trash!(trashed_by = nil)
|
|
# note, an argument could be made that the column should probably called trashed_at
|
|
# however, deleted_at is the terminology used in the UI
|
|
#
|
|
# we could hijack use a delete! and delete - redirecting the originals elsewhere, but that is
|
|
# confusing as well. So for now, we go with trash!
|
|
#
|
|
trash_update(DateTime.now, trashed_by.try(:id))
|
|
end
|
|
|
|
def recover!
|
|
trash_update(nil, nil)
|
|
end
|
|
|
|
private
|
|
|
|
def trash_update(deleted_at, deleted_by_id)
|
|
self.update_columns(deleted_at: deleted_at, deleted_by_id: deleted_by_id)
|
|
end
|
|
|
|
end
|