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_check ⇒ Boolean?
Returns the value of attribute _allow_update_for_readonly_check.
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
#ancestors ⇒ Object
Get ancestors (all audits before this one)
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_changes ⇒ Hash[untyped, untyped], ...
88
|
# File 'sig/active_version/audits.rbs', line 88
def audited_changes: () -> Hash[untyped, untyped] | Array[untyped] | String | nil
|
#audited_changes= ⇒ Object
89
|
# File 'sig/active_version/audits.rbs', line 89
def audited_changes=: (untyped value) -> untyped
|
#audited_context ⇒ Hash[untyped, untyped], ...
90
|
# File 'sig/active_version/audits.rbs', line 90
def audited_context: () -> Hash[untyped, untyped] | Array[untyped] | String | nil
|
#audited_context= ⇒ Object
91
|
# File 'sig/active_version/audits.rbs', line 91
def audited_context=: (untyped value) -> untyped
|
#destroy ⇒ Object
95
|
# File 'sig/active_version/audits.rbs', line 95
def destroy: (*untyped args, **untyped kwargs) -> untyped
|
#new_attributes ⇒ Hash[untyped, untyped]
Get new attributes from this audit
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_attributes ⇒ Hash[untyped, untyped]
Get old attributes from this audit
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
92
|
# File 'sig/active_version/audits.rbs', line 92
def readonly?: () -> bool
|
#revision ⇒ Object
Reconstruct object at this revision
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
|
#save ⇒ Boolean
93
|
# File 'sig/active_version/audits.rbs', line 93
def save: (*untyped args, **untyped kwargs) -> bool
|
#save! ⇒ Boolean
94
|
# File 'sig/active_version/audits.rbs', line 94
def save!: (*untyped args, **untyped kwargs) -> bool
|
#structured_audited_attributes ⇒ Object
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
|