# 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