Class: Audited::Audit
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Audited::Audit
- Includes:
- ActiveModel::Observing
- Defined in:
- lib/audited/audit.rb
Overview
Audit saves the changes to ActiveRecord models. It has the following attributes:
-
auditable: the ActiveRecord model that was changed -
user: the user that performed the change; a string or an ActiveRecord model -
action: one of create, update, or delete -
audited_changes: a serialized hash of all the changes -
comment: a comment set with the audit -
version: the version of the model -
request_uuid: a uuid based that allows audits from the same controller request -
created_at: Time that the change was performed
Class Method Summary collapse
-
.as_user(user, &block) ⇒ Object
All audits made during the block called will be recorded as made by
user. -
.audited_classes ⇒ Object
Returns the list of classes that are being audited.
-
.collection_cache_key(collection = all, timestamp_column = :created_at) ⇒ Object
use created_at as timestamp cache key.
Instance Method Summary collapse
-
#ancestors ⇒ Object
Return all audits older than the current one.
-
#new_attributes ⇒ Object
Returns a hash of the changed attributes with the new values.
-
#old_attributes ⇒ Object
Returns a hash of the changed attributes with the old values.
-
#revision ⇒ Object
Return an instance of what the object looked like at this revision.
Class Method Details
.as_user(user, &block) ⇒ Object
All audits made during the block called will be recorded as made by user. This method is hopefully threadsafe, making it ideal for background operations that require audit information.
97 98 99 100 101 102 |
# File 'lib/audited/audit.rb', line 97 def self.as_user(user, &block) Thread.current[:audited_user] = user yield ensure Thread.current[:audited_user] = nil end |
.audited_classes ⇒ Object
Returns the list of classes that are being audited
90 91 92 |
# File 'lib/audited/audit.rb', line 90 def self.audited_classes audited_class_names.map(&:constantize) end |
.collection_cache_key(collection = all, timestamp_column = :created_at) ⇒ Object
use created_at as timestamp cache key
129 130 131 |
# File 'lib/audited/audit.rb', line 129 def self.collection_cache_key(collection = all, = :created_at) super(collection, :created_at) end |
Instance Method Details
#ancestors ⇒ Object
Return all audits older than the current one.
40 41 42 |
# File 'lib/audited/audit.rb', line 40 def ancestors self.class.ascending.auditable_finder(auditable_id, auditable_type).to_version(version) end |
#new_attributes ⇒ Object
Returns a hash of the changed attributes with the new values
54 55 56 57 58 59 |
# File 'lib/audited/audit.rb', line 54 def new_attributes (audited_changes || {}).inject({}.with_indifferent_access) do |attrs, (attr, values)| attrs[attr] = values.is_a?(Array) ? values.last : values attrs end end |
#old_attributes ⇒ Object
Returns a hash of the changed attributes with the old values
62 63 64 65 66 67 68 |
# File 'lib/audited/audit.rb', line 62 def old_attributes (audited_changes || {}).inject({}.with_indifferent_access) do |attrs, (attr, values)| attrs[attr] = Array(values).first attrs end end |
#revision ⇒ Object
Return an instance of what the object looked like at this revision. If the object has been destroyed, this will be a new record.
46 47 48 49 50 51 |
# File 'lib/audited/audit.rb', line 46 def revision clazz = auditable_type.constantize (clazz.find_by_id(auditable_id) || clazz.new).tap do |m| self.class.assign_revision_attributes(m, self.class.reconstruct_attributes(ancestors).merge(version: version)) end end |