Class: RailsAuditLog::AuditLogEntry

Inherits:
ApplicationRecord show all
Defined in:
app/models/rails_audit_log/audit_log_entry.rb

Constant Summary collapse

EVENTS =
%w[create update destroy].freeze

Instance Method Summary collapse

Instance Method Details

#changed_attributesObject



76
77
78
# File 'app/models/rails_audit_log/audit_log_entry.rb', line 76

def changed_attributes
  object_changes&.keys || []
end

#diffObject



80
81
82
83
84
# File 'app/models/rails_audit_log/audit_log_entry.rb', line 80

def diff
  return {} unless object_changes

  object_changes.transform_values { |from_to| { from: from_to[0], to: from_to[1] } }
end

#nextObject



72
73
74
# File 'app/models/rails_audit_log/audit_log_entry.rb', line 72

def next
  self.class.where(item_type: item_type, item_id: item_id).where("id > ?", id).order(id: :asc).first
end

#previousObject



68
69
70
# File 'app/models/rails_audit_log/audit_log_entry.rb', line 68

def previous
  self.class.where(item_type: item_type, item_id: item_id).where("id < ?", id).order(id: :desc).first
end

#reifyObject

Instance methods



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'app/models/rails_audit_log/audit_log_entry.rb', line 42

def reify
  return nil if event == "create"

  klass = item_type.constantize

  if object.present?
    instance = klass.new
    instance.assign_attributes(object.except("id"))
    instance.id = object.fetch("id") { item_id }
    return instance
  end

  # Fallback: diff-only mode or entries recorded before snapshot support
  from_attrs = (object_changes || {}).transform_values { |from_to| from_to[0] }

  if event == "update"
    record = klass.find_by(id: item_id)
    from_attrs = record.attributes.merge(from_attrs) if record
  end

  instance = klass.new
  instance.assign_attributes(from_attrs.except("id"))
  instance.id = from_attrs.fetch("id") { item_id }
  instance
end