List of attributes that are audited.
# File lib/acts_as_audited/auditor.rb, line 147 def audited_attributes attributes.except(*non_audited_columns) end
Get a specific revision specified by the version number, or
:previous
# File lib/acts_as_audited/auditor.rb, line 136 def revision(version) revision_with Audit.reconstruct_attributes(audits_to(version)) end
Find the oldest revision recorded prior to the date/time provided.
# File lib/acts_as_audited/auditor.rb, line 141 def revision_at(date_or_time) audits = self.audits.where("created_at <= ?", date_or_time) revision_with Audit.reconstruct_attributes(audits) unless audits.empty? end
Gets an array of the revisions available
user.revisions.each do |revision| user.name user.version end
# File lib/acts_as_audited/auditor.rb, line 125 def revisions(from_version = 1) audits = self.audits.where(['version >= ?', from_version]) return [] if audits.empty? revisions = [] audits.each do |audit| revisions << audit.revision end revisions end
Temporarily turns off auditing while saving.
# File lib/acts_as_audited/auditor.rb, line 104 def save_without_auditing without_auditing { save } end
Executes the block with the auditing callbacks disabled.
@foo.without_auditing do @foo.save end
# File lib/acts_as_audited/auditor.rb, line 114 def without_auditing(&block) self.class.without_auditing(&block) end
# File lib/acts_as_audited/auditor.rb, line 153 def revision_with(attributes) self.dup.tap do |revision| revision.send :instance_variable_set, '@attributes', self.attributes_before_type_cast revision.send :instance_variable_set, '@new_record', self.destroyed? revision.send :instance_variable_set, '@persisted', !self.destroyed? revision.send :instance_variable_set, '@readonly', 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. for ivar in revision.instance_variables proxy = revision.instance_variable_get ivar if !proxy.nil? and proxy.respond_to? :proxy_respond_to? revision.instance_variable_set ivar, nil end end end end