Module: ActiveVersion::Audits::AuditRecord::ClassMethods

Defined in:
lib/active_version/audits/audit_record.rb

Instance Method Summary collapse

Instance Method Details

#add_audited_class(audited_class) ⇒ Object

Track which models use this audit class



396
397
398
399
400
# File 'lib/active_version/audits/audit_record.rb', line 396

def add_audited_class(audited_class)
  @audited_classes ||= {}
  @audited_classes[name] ||= Set.new
  @audited_classes[name] << audited_class
end

#audited_classesObject



402
403
404
405
# File 'lib/active_version/audits/audit_record.rb', line 402

def audited_classes
  @audited_classes ||= {}
  @audited_classes[name] ||= Set.new
end

#initialize_serializersObject

Initialize serializers for ActiveRecord serialize API (< Rails 8). Rails 8+ relies on accessor-level serialization methods above.



409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
# File 'lib/active_version/audits/audit_record.rb', line 409

def initialize_serializers
  changes_column = audit_column_for(:changes)
  context_column = audit_column_for(:context)
  changes_serializer = serializer_for_column(changes_column)
  context_serializer = serializer_for_column(context_column)

  if ActiveRecord::VERSION::MAJOR >= 8
    # No-op: ActiveRecord 8 removed serialize API; handled in accessors.
  elsif ActiveRecord::VERSION::MAJOR >= 7 && ActiveRecord::VERSION::MINOR >= 1
    serialize changes_column, coder: changes_serializer
    serialize context_column, coder: context_serializer
  else
    serialize changes_column, changes_serializer
    serialize context_column, context_serializer
  end
end

#reconstruct_attributes(audits) ⇒ Object

Reconstruct attributes from audit history



427
428
429
430
431
432
433
# File 'lib/active_version/audits/audit_record.rb', line 427

def reconstruct_attributes(audits)
  version_column = audits.first.class.audit_column_for(:version) if audits.any? && audits.first.class.respond_to?(:audit_column_for)
  audits.each_with_object({}) do |audit, all|
    all.merge!(audit.new_attributes)
    all[:audit_version] = audit[version_column || :version]
  end
end