33 lines
637 B
Ruby
33 lines
637 B
Ruby
# reverts all changes made by a user
|
|
class UserRevert
|
|
THRESHOLD = 1_000
|
|
class TooManyChangesError < RuntimeError ; end
|
|
|
|
attr_reader :user_id
|
|
|
|
def initialize(user_id)
|
|
@user_id = user_id
|
|
end
|
|
|
|
def process
|
|
validate!
|
|
revert_post_changes
|
|
end
|
|
|
|
def validate!
|
|
if PostArchive.where(updater_id: user_id).count > THRESHOLD
|
|
raise TooManyChangesError.new("This user has too many changes to be reverted")
|
|
end
|
|
end
|
|
|
|
def revert_post_changes
|
|
PostArchive.where(updater_id: user_id).find_each do |x|
|
|
x.undo!
|
|
end
|
|
end
|
|
|
|
def self.can_revert?(user)
|
|
user.post_update_count <= THRESHOLD
|
|
end
|
|
end
|