class AuditLoggable::Extension::Callbacks

Attributes

ignored_attributes[R]
redacted_attributes[R]

Public Class Methods

new(except: [], redacted: []) click to toggle source
# File lib/audit_loggable/extension.rb, line 19
def initialize(except: [], redacted: [])
  @ignored_attributes = ::Array.wrap(except).map(&:to_s)
  @redacted_attributes = ::Array.wrap(redacted).map(&:to_s)
end

Public Instance Methods

after_commit(model) click to toggle source
# File lib/audit_loggable/extension.rb, line 52
def after_commit(model)
  return if model.audit_loggable_audit_record_set.blank?

  persist_audit_record_set(model)
end
after_create(model) click to toggle source
# File lib/audit_loggable/extension.rb, line 24
def after_create(model)
  changeset = build_changeset_for_create(model)

  audit_record = build_audit_record(model, :create, changeset)
  add_audit_record(model, audit_record)
end
after_destroy(model) click to toggle source
# File lib/audit_loggable/extension.rb, line 39
def after_destroy(model)
  changeset = build_changeset_for_destroy(model)

  audit_record = build_audit_record(model, :destroy, changeset)
  add_audit_record(model, audit_record)
end
after_rollback(model) click to toggle source
# File lib/audit_loggable/extension.rb, line 46
def after_rollback(model)
  return if model.audit_loggable_audit_record_set.blank?

  clear_audit_record_set(model)
end
after_update(model) click to toggle source
# File lib/audit_loggable/extension.rb, line 31
def after_update(model)
  changeset = build_changeset_for_update(model)
  return if changeset.blank?

  audit_record = build_audit_record(model, :update, changeset)
  add_audit_record(model, audit_record)
end

Private Instance Methods

add_audit_record(model, audit_record) click to toggle source
# File lib/audit_loggable/extension.rb, line 82
def add_audit_record(model, audit_record)
  model.audit_loggable_audit_record_set ||= AuditRecordSet.new
  model.audit_loggable_audit_record_set << audit_record
end
build_audit_record(model, action, changeset) click to toggle source
# File lib/audit_loggable/extension.rb, line 74
def build_audit_record(model, action, changeset)
  user = Store.current_user
  address = Store.current_remote_address
  uuid = Store.current_request_uuid

  AuditRecord.new(model, user, action, changeset, address, uuid)
end
build_changeset_for_create(model) click to toggle source
# File lib/audit_loggable/extension.rb, line 62
def build_changeset_for_create(model)
  ChangeSet::Create.new(model, ignored_attributes: ignored_attributes, redacted_attributes: redacted_attributes)
end
build_changeset_for_destroy(model) click to toggle source
# File lib/audit_loggable/extension.rb, line 70
def build_changeset_for_destroy(model)
  ChangeSet::Destroy.new(model, ignored_attributes: ignored_attributes, redacted_attributes: redacted_attributes)
end
build_changeset_for_update(model) click to toggle source
# File lib/audit_loggable/extension.rb, line 66
def build_changeset_for_update(model)
  ChangeSet::Update.new(model, ignored_attributes: ignored_attributes, redacted_attributes: redacted_attributes)
end
clear_audit_record_set(model) click to toggle source
# File lib/audit_loggable/extension.rb, line 87
def clear_audit_record_set(model)
  model.audit_loggable_audit_record_set.clear
end
persist_audit_record_set(model) click to toggle source
# File lib/audit_loggable/extension.rb, line 91
def persist_audit_record_set(model)
  model.audit_loggable_audit_record_set.flush
end