blob: 58a2b54145c9b04721cfcdcf4fb8f49220c000f8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
# frozen_string_literal: true
class ModLogPresenter
EMPTY_VERSION = Hashie::Mash.new.freeze
ModLogEntry = Struct.new(:audit, :action, :target, :old_version, :new_version)
attr_reader :raw_entries
def initialize(page, per_page = 15)
# the only 'creations' in the audit log should be UserBans
@raw_entries = Audited::Audit.where("action != 'created' OR auditable_type = 'UserBan'")
.order(created_at: :desc).page(page).per(per_page)
end
def entries
@entries ||= @raw_entries.map { |audit| ModLogPresenter.transform_audit(audit) }
end
def self.transform_audit(audit)
created = audit.action == 'create'
old_version = created ? EMPTY_VERSION : audit.old_attributes
new_version = audit.new_attributes
remove_redundant_attributes!(old_version, new_version) unless created
action = if old_version[:hidden_from_users] != new_version[:hidden_from_users]
new_version[:hidden_from_users] ? 'deleted' : 'restored'
else
audit.auditable.mod_log_action
end
ModLogEntry.new(
audit,
action,
audit.auditable.mod_log_target,
old_version,
new_version
)
end
private
def self.remove_redundant_attributes!(old_version, new_version)
new_version.each do |k, v|
# if the old version has the same key and it didn't change, delete it.
if old_version.include?(k) && old_version[k] == v
new_version.delete(k)
old_version.delete(k)
end
end
end
end
|