module Audited::Auditor::AuditedInstanceMethods
Public Instance Methods
audited_attributes()
click to toggle source
List of attributes that are audited.
# File lib/audited/auditor.rb, line 131 def audited_attributes attributes.except(*non_audited_columns) end
non_audited_columns()
click to toggle source
# File lib/audited/auditor.rb, line 135 def non_audited_columns self.class.non_audited_columns end
revision(version)
click to toggle source
Get a specific revision specified by the version number, or
:previous
# File lib/audited/auditor.rb, line 120 def revision(version) revision_with Audit.reconstruct_attributes(audits_to(version)) end
revision_at(date_or_time)
click to toggle source
Find the oldest revision recorded prior to the date/time provided.
# File lib/audited/auditor.rb, line 125 def revision_at(date_or_time) audits = self.audits.up_until(date_or_time) revision_with Audit.reconstruct_attributes(audits) unless audits.empty? end
revisions(from_version = 1)
click to toggle source
Gets an array of the revisions available
user.revisions.each do |revision| user.name user.version end
# File lib/audited/auditor.rb, line 109 def revisions(from_version = 1) audits = self.audits.from_version(from_version) return [] if audits.empty? revisions = [] audits.each do |audit| revisions << audit.revision end revisions end
save_without_auditing()
click to toggle source
Temporarily turns off auditing while saving.
# File lib/audited/auditor.rb, line 88 def save_without_auditing without_auditing { save } end
without_auditing(&block)
click to toggle source
Executes the block with the auditing callbacks disabled.
@foo.without_auditing do @foo.save end
# File lib/audited/auditor.rb, line 98 def without_auditing(&block) self.class.without_auditing(&block) end
Protected Instance Methods
rails_below?(rails_version)
click to toggle source
# File lib/audited/auditor.rb, line 171 def rails_below?(rails_version) Gem::Version.new(Rails::VERSION::STRING) < Gem::Version.new(rails_version) end
revision_with(attributes)
click to toggle source
# File lib/audited/auditor.rb, line 145 def revision_with(attributes) dup.tap do |revision| revision.id = id revision.send :instance_variable_set, '@attributes', self.attributes if rails_below?('4.2.0') revision.send :instance_variable_set, '@new_record', destroyed? revision.send :instance_variable_set, '@persisted', !destroyed? revision.send :instance_variable_set, '@readonly', false revision.send :instance_variable_set, '@destroyed', false revision.send :instance_variable_set, '@_destroyed', false revision.send :instance_variable_set, '@marked_for_destruction', false Audit.assign_revision_attributes(revision, attributes) # Remove any association proxies so that they will be recreated # and reference the correct object for this revision. The only way # to determine if an instance variable is a proxy object is to # see if it responds to certain methods, as it forwards almost # everything to its target. revision.instance_variables.each do |ivar| proxy = revision.instance_variable_get ivar if !proxy.nil? && proxy.respond_to?(:proxy_respond_to?) revision.instance_variable_set ivar, nil end end end end
Private Instance Methods
audit_create()
click to toggle source
# File lib/audited/auditor.rb, line 204 def audit_create write_audit(action: 'create', audited_changes: audited_attributes, comment: audit_comment) end
audit_destroy()
click to toggle source
# File lib/audited/auditor.rb, line 216 def audit_destroy write_audit(action: 'destroy', audited_changes: audited_attributes, comment: audit_comment) unless new_record? end
audit_update()
click to toggle source
# File lib/audited/auditor.rb, line 209 def audit_update unless (changes = audited_changes).empty? && audit_comment.blank? write_audit(action: 'update', audited_changes: changes, comment: audit_comment) end end
audited_changes()
click to toggle source
# File lib/audited/auditor.rb, line 177 def audited_changes collection = if audited_options[:only] audited_columns = self.class.audited_columns.map(&:name) changed_attributes.slice(*audited_columns) else changed_attributes.except(*non_audited_columns) end collection.inject({}) do |changes, (attr, old_value)| changes[attr] = [old_value, self[attr]] changes end end
auditing_enabled()
click to toggle source
# File lib/audited/auditor.rb, line 242 def auditing_enabled self.class.auditing_enabled end
auditing_enabled=(val)
click to toggle source
# File lib/audited/auditor.rb, line 246 def auditing_enabled=(val) self.class.auditing_enabled = val end
audits_to(version = nil)
click to toggle source
# File lib/audited/auditor.rb, line 192 def audits_to(version = nil) if version == :previous version = if self.version self.version - 1 else previous = audits.descending.offset(1).first previous ? previous.version : 1 end end audits.to_version(version) end
require_comment()
click to toggle source
# File lib/audited/auditor.rb, line 227 def require_comment if auditing_enabled && audit_comment.blank? errors.add(:audit_comment, "Comment required before destruction") return false if Rails.version.start_with?('4.') throw :abort end end
write_audit(attrs)
click to toggle source
# File lib/audited/auditor.rb, line 221 def write_audit(attrs) attrs[:associated] = send(audit_associated_with) unless audit_associated_with.nil? self.audit_comment = nil run_callbacks(:audit) { audits.create(attrs) } if auditing_enabled end