module Auditable::Auditor::ClassMethods

Public Instance Methods

audit(opts = {}) click to toggle source
# File lib/auditable/auditor.rb, line 11
def audit(opts = {})
  options = HashWithIndifferentAccess.new({ :attributes => [], :methods => [] }).merge(opts)
  add_auditable_actions(options[:methods])
  add_auditable_attributes(options[:attributes])
  has_many :audit_records, :as => :auditable

  include Auditor::InstanceMethods
end
audited_attributes() click to toggle source
# File lib/auditable/auditor.rb, line 20
def audited_attributes
  if self.base_class == self
    Array(@audited_attributes)
  else
    self.base_class.audited_attributes if @audited_attributes.nil?
  end
end

Private Instance Methods

add_auditable_actions(optional_actions) click to toggle source
# File lib/auditable/auditor.rb, line 36
def add_auditable_actions(optional_actions)
  [optional_actions].flatten.each do |a|
    ending = ''
    action = a.to_s
    if ['!','?'].any?{ |x| action.last == x }
      ending = action.slice!(/(.)$/)
    end
    send :define_method, "#{action}_with_action_audit#{ending}".to_sym do
      AuditRecord.create_for_action(self, a)
      self.send("#{action}_without_action_audit#{ending}")
    end
    alias_method_chain a, :action_audit
  end
end
add_auditable_attributes(optional_attributes) click to toggle source
# File lib/auditable/auditor.rb, line 28
def add_auditable_attributes(optional_attributes)
  @audited_attributes = []
  [optional_attributes].flatten.each { |attribute| @audited_attributes << attribute.to_sym }
  unless @audited_attributes.empty?
    after_save :audit_changes
  end
end