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
Overview
Marker module for audit models Identifies a model as an audit record
Defined Under Namespace
Modules: Callbacks, ClassMethods, Serializers Classes: AuditSchemaDSL
Instance Method Summary collapse
-
#ancestors ⇒ Object
Get ancestors (all audits before this one).
-
#new_attributes ⇒ Object
Get new attributes from this audit.
-
#old_attributes ⇒ Object
Get old attributes from this audit.
-
#revision ⇒ Object
Reconstruct object at this revision.
- #structured_audited_attributes ⇒ Object
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 |
#new_attributes ⇒ Object
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 ⇒ Object
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 |
#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 |
#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 |