lib/paper_trail.rb in jeremyw-paper_trail-1.2.2 vs lib/paper_trail.rb in jeremyw-paper_trail-1.2.3
- old
+ new
@@ -14,76 +14,17 @@
end
def self.whodunnit=(value)
@@whodunnit = value
end
-
- # Walk the versions to construct an audit trail of the edits made
- # over time, and by whom.
- def audit_trail options={}
- options[:attributes_to_ignore] ||= %w(updated_at)
-
- audit_trail = []
- versions_desc = versions_including_current_in_descending_order
-
- versions_desc.each_with_index do |version, index|
- previous_version = versions_desc[index + 1]
- break if previous_version.nil?
-
- attributes_after = yaml_to_hash(version.object)
- attributes_before = yaml_to_hash(previous_version.object)
-
- # remove some attributes that we don't need to report
- [attributes_before, attributes_after].each do |hash|
- hash.reject! { |k,v| k.in? Array(options[:attributes_to_ignore]) }
- end
-
- audit_trail << {
- :event => previous_version.event,
- :changed_by => transform_whodunnit(previous_version.whodunnit),
- :changed_at => previous_version.created_at,
- :changes => differences(attributes_before, attributes_after)
- }
- end
-
- audit_trail
- end
-
- protected
-
- def transform_whodunnit(whodunnit)
- whodunnit
- end
-
private
def set_whodunnit
@@whodunnit = lambda {
self.send :current_user rescue nil
}
end
- def yaml_to_hash(yaml)
- return {} if yaml.nil?
- YAML::load(yaml).to_hash
- end
-
- # Returns an array of hashes, where each hash specifies the +:attribute+,
- # value +:before+ the change, and value +:after+ the change.
- def differences(before, after)
- before.diff(after).keys.sort.inject([]) do |diffs, k|
- diff = { :attribute => k, :before => before[k], :after => after[k] }
- diffs << diff; diffs
- end
- end
-
- def versions_including_current_in_descending_order
- v = self.versions.dup
- v << Version.new(:event => 'update',
- :object => object_to_string(self),
- :created_at => self.updated_at)
- v.reverse # newest first
- end
end
ActionController::Base.send :include, PaperTrail