Module: Audited::Auditor::ClassMethods

Defined in:
lib/audited/auditor.rb

Instance Method Summary collapse

Instance Method Details

#audited(options = {}) ⇒ Object

  • redacted - Changes to these fields will be logged, but the values will not. This is useful, for example, if you wish to audit when a password is changed, without saving the actual password in the log. To store values as something other than ‘[REDACTED]’, pass an argument to the redaction_value option.

    class User < ActiveRecord::Base
      audited redacted: :password, redaction_value: SecureRandom.uuid
    end
    
  • if - Only audit the model when the given function returns true

  • unless - Only audit the model when the given function returns false

    class User < ActiveRecord::Base
      audited :if => :active?
    
      def active?
        self.status == 'active'
      end
    end
    


61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/audited/auditor.rb', line 61

def audited(options = {})
  # don't allow multiple calls
  return if included_modules.include?(Audited::Auditor::AuditedInstanceMethods)

  extend Audited::Auditor::AuditedClassMethods
  include Audited::Auditor::AuditedInstanceMethods

  class_attribute :audit_associated_with, instance_writer: false
  class_attribute :audited_options, instance_writer: false
  attr_accessor :audit_version, :audit_comment

  self.audited_options = options
  normalize_audited_options

  self.audit_associated_with = audited_options[:associated_with]

  if audited_options[:comment_required]
    validate :presence_of_audit_comment
    before_destroy :require_comment if audited_options[:on].include?(:destroy)
  end

  has_many :audits, -> { order(version: :asc) }, as: :auditable, class_name: Audited.audit_class.name, inverse_of: :auditable
  Audited.audit_class.audited_class_names << to_s

  after_create :audit_create if audited_options[:on].include?(:create)
  before_update :audit_update if audited_options[:on].include?(:update)
  after_touch :audit_touch if audited_options[:on].include?(:touch) && ::ActiveRecord::VERSION::MAJOR >= 6
  before_destroy :audit_destroy if audited_options[:on].include?(:destroy)

  # Define and set after_audit and around_audit callbacks. This might be useful if you want
  # to notify a party after the audit has been created or if you want to access the newly-created
  # audit.
  define_callbacks :audit
  set_callback :audit, :after, :after_audit, if: lambda { respond_to?(:after_audit, true) }
  set_callback :audit, :around, :around_audit, if: lambda { respond_to?(:around_audit, true) }

  enable_auditing
end

#has_associated_auditsObject



100
101
102
# File 'lib/audited/auditor.rb', line 100

def has_associated_audits
  has_many :associated_audits, as: :associated, class_name: Audited.audit_class.name
end