Module: ActiveVersion::Audits::AuditRecord

Extended by:
ActiveSupport::Concern
Includes:
Callbacks, SQLBuilder
Defined in:
lib/active_version/audits/audit_record.rb,
lib/active_version/audits/audit_record/callbacks.rb,
lib/active_version/audits/audit_record/serializers.rb,
sig/active_version/audits.rbs

Overview

Marker module for audit models Identifies a model as an audit record

Defined Under Namespace

Modules: Callbacks, ClassMethods, Serializers Classes: AuditSchemaDSL

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#_allow_update_for_readonly_checkBoolean?

Returns the value of attribute _allow_update_for_readonly_check.

Returns:

  • (Boolean, nil)


86
87
88
# File 'sig/active_version/audits.rbs', line 86

def _allow_update_for_readonly_check
  @_allow_update_for_readonly_check
end

Instance Method Details

#ancestorsObject

Get ancestors (all audits before this one)

Returns:

  • (Object)


473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
# File 'lib/active_version/audits/audit_record.rb', line 473

def ancestors
  auditable_column = ActiveVersion.column_mapper.column_for(self.class.source_class, :audits, :auditable)
  type_column = auditable_column.to_s.end_with?("_type") ? auditable_column.to_s : "#{auditable_column}_type"
  identity_columns = self.class.source_identity_columns
  auditable_identity_map = identity_columns.index_with { |column| self[column] }
  auditable_type_value = self[type_column]
  version_column = ActiveVersion.column_mapper.column_for(self.class.source_class, :audits, :version)
  version_value = self[version_column]
  self.class
    .ascending
    .auditable_finder(auditable_identity_map, auditable_type_value, identity_columns)
    .to_version(version_value)
rescue ::NameError, ::NoMethodError
  self.class.none
end

#audited_changesHash[untyped, untyped], ...

Returns:

  • (Hash[untyped, untyped], Array[untyped], String, nil)


88
# File 'sig/active_version/audits.rbs', line 88

def audited_changes: () -> Hash[untyped, untyped] | Array[untyped] | String | nil

#audited_changes=Object

Parameters:

  • value (Object)

Returns:

  • (Object)


89
# File 'sig/active_version/audits.rbs', line 89

def audited_changes=: (untyped value) -> untyped

#audited_contextHash[untyped, untyped], ...

Returns:

  • (Hash[untyped, untyped], Array[untyped], String, nil)


90
# File 'sig/active_version/audits.rbs', line 90

def audited_context: () -> Hash[untyped, untyped] | Array[untyped] | String | nil

#audited_context=Object

Parameters:

  • value (Object)

Returns:

  • (Object)


91
# File 'sig/active_version/audits.rbs', line 91

def audited_context=: (untyped value) -> untyped

#destroyObject

Parameters:

  • args (Object)
  • kwargs (Object)

Returns:

  • (Object)


95
# File 'sig/active_version/audits.rbs', line 95

def destroy: (*untyped args, **untyped kwargs) -> untyped

#new_attributesHash[untyped, untyped]

Get new attributes from this audit

Returns:

  • (Hash[untyped, untyped])


437
438
439
440
441
442
443
444
445
446
447
# File 'lib/active_version/audits/audit_record.rb', line 437

def new_attributes
  changes_column = self.class.audit_column_for(:changes)
  changes = send(changes_column) || {}
  if changes.is_a?(Hash) && changes.any?
    changes.each_with_object({}) do |(attr, values), attrs|
      attrs[attr] = (action_value == "update") ? values.last : values
    end
  else
    structured_audited_attributes
  end
end

#old_attributesHash[untyped, untyped]

Get old attributes from this audit

Returns:

  • (Hash[untyped, untyped])


462
463
464
465
466
467
468
469
470
# File 'lib/active_version/audits/audit_record.rb', line 462

def old_attributes
  changes_column = self.class.audit_column_for(:changes)
  changes = send(changes_column) || {}
  return {} unless changes.is_a?(Hash) && changes.any?

  changes.each_with_object({}) do |(attr, values), attrs|
    attrs[attr] = (action_value == "update") ? values.first : nil
  end
end

#readonly?Boolean

Returns:

  • (Boolean)


92
# File 'sig/active_version/audits.rbs', line 92

def readonly?: () -> bool

#revisionObject

Reconstruct object at this revision

Returns:

  • (Object)


490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
# File 'lib/active_version/audits/audit_record.rb', line 490

def revision
  auditable_column = ActiveVersion.column_mapper.column_for(self.class.source_class, :audits, :auditable)
  auditable_record = send(auditable_column) if respond_to?(auditable_column)
  return nil unless auditable_record

  audits = ancestors
  attributes = self.class.reconstruct_attributes(audits)
  auditable_record.dup.tap do |revision|
    revision.assign_attributes(attributes)
    revision.instance_variable_set(:@new_record, destroyed?)
    revision.instance_variable_set(:@persisted, !destroyed?)
  end
rescue ::NameError, ::NoMethodError
  nil
end

#saveBoolean

Parameters:

  • args (Object)
  • kwargs (Object)

Returns:

  • (Boolean)


93
# File 'sig/active_version/audits.rbs', line 93

def save: (*untyped args, **untyped kwargs) -> bool

#save!Boolean

Parameters:

  • args (Object)
  • kwargs (Object)

Returns:

  • (Boolean)


94
# File 'sig/active_version/audits.rbs', line 94

def save!: (*untyped args, **untyped kwargs) -> bool

#structured_audited_attributesObject



449
450
451
452
453
454
455
456
457
458
459
# File 'lib/active_version/audits/audit_record.rb', line 449

def structured_audited_attributes
  source_columns = self.class.source_class.column_names
  ignored = ActiveVersion.config.ignored_attributes.map(&:to_s)

  source_columns.each_with_object({}) do |attr, attrs|
    next if ignored.include?(attr)
    next unless self.class.column_names.include?(attr)

    attrs[attr] = self[attr]
  end
end