track_changes 1.0.0.pre1 → 1.0.0.pre2
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION.yml +1 -1
- data/app/helpers/audits_helper.rb +36 -0
- data/app/models/audit.rb +54 -0
- data/app/views/audits/_audit.html.erb +15 -0
- data/lib/track_changes/action_controller.rb +2 -0
- data/lib/track_changes/active_record.rb +2 -0
- data/lib/track_changes/engine.rb +2 -0
- data/lib/track_changes.rb +8 -10
- metadata +6 -3
data/VERSION.yml
CHANGED
@@ -0,0 +1,36 @@
|
|
1
|
+
module AuditsHelper
|
2
|
+
# Given a <tt>value</tt>, returns the string NONE if the value is <tt>blank?</tt>,
|
3
|
+
# otherwise returns the given <tt>value</tt>
|
4
|
+
def blank_is_none(value)
|
5
|
+
value.blank? ? "NONE" : value
|
6
|
+
end
|
7
|
+
|
8
|
+
# Allows you to iterate over a given Audit#change_set. Given a block, each time
|
9
|
+
# yield is called, it will return the attribute, the old version and the new
|
10
|
+
# version as arguments. If the Audit is a message audit, it will set the new
|
11
|
+
# attribute to the audit message.
|
12
|
+
#
|
13
|
+
# Example:
|
14
|
+
# <% change_set_iter(audit.change_set) do |attr, old, new| %>
|
15
|
+
# <p class="audit"><strong><%=h attr %></strong>
|
16
|
+
# <% if audit.message %>
|
17
|
+
# <em><%= new %></em>
|
18
|
+
# <% else %>
|
19
|
+
# changed from <em><%=h old %></em> to <em><%=h new %></em>.
|
20
|
+
# <% end %>
|
21
|
+
# </p>
|
22
|
+
# <% end %>
|
23
|
+
def change_set_iter(change_set, &block)
|
24
|
+
change_set.each_pair do |attr, change|
|
25
|
+
if change.is_a?(Array)
|
26
|
+
old_val = blank_is_none(change.first)
|
27
|
+
new_val = blank_is_none(change.last)
|
28
|
+
else
|
29
|
+
old_val = blank_is_none("")
|
30
|
+
new_val = blank_is_none(change)
|
31
|
+
end
|
32
|
+
|
33
|
+
yield attr.titleize, old_val, new_val
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/app/models/audit.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# == Audit
|
2
|
+
# A model for handling audits. Expects a User model to be available.
|
3
|
+
#
|
4
|
+
# Provides the following scopes:
|
5
|
+
#
|
6
|
+
# * <tt>desc</tt> - Orders by <tt>created_at</tt> DESC and then <tt>id</tt> DESC
|
7
|
+
# * <tt>recent</tt> - Returns the last 25 audits
|
8
|
+
# * <tt>changes_on_attributes</tt> - Returns the audits with changes to the given attribute.
|
9
|
+
#
|
10
|
+
# If you want to simply provide some notification of an event or a message.
|
11
|
+
# Assign to the <tt>messsage</tt> attribute instead of the <tt>change_set</tt>
|
12
|
+
# attribute.
|
13
|
+
#
|
14
|
+
# == Schema Information
|
15
|
+
#
|
16
|
+
# Table name: audits
|
17
|
+
#
|
18
|
+
# id :integer not null, primary key
|
19
|
+
# audited_type :string(255) not null
|
20
|
+
# audited_id :integer not null
|
21
|
+
# user_id :integer not null
|
22
|
+
# change_set :text not null
|
23
|
+
# created_at :datetime not null
|
24
|
+
#
|
25
|
+
class Audit < ActiveRecord::Base
|
26
|
+
MESSAGE = "Message"
|
27
|
+
|
28
|
+
belongs_to :audited, :polymorphic => true
|
29
|
+
belongs_to :user
|
30
|
+
|
31
|
+
serialize :change_set, Hash
|
32
|
+
|
33
|
+
scope :desc, :order => "audits.created_at DESC, audits.id DESC"
|
34
|
+
scope :recent, :order => "aduits.created_at DESC", :limit => 25
|
35
|
+
scope :changees_on_attribute, lambda { |attr|
|
36
|
+
{ :conditions => ["audits.change_set LIKE ?", "%#{attr}:%"]}
|
37
|
+
}
|
38
|
+
|
39
|
+
# Create an Audit given the <tt>model</tt>, <tt>change_set</tt> and <tt>user</tt>.
|
40
|
+
def self.create_changes(model, change_set, user=nil)
|
41
|
+
user_id = user && user.id
|
42
|
+
self.create!(:audited => model, :user_id => user_id, :change_set => change_set)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Returns a message if this audit was a message.
|
46
|
+
def message
|
47
|
+
self.change_set.has_key?(MESSAGE) && self.change_set[MESSAGE]
|
48
|
+
end
|
49
|
+
|
50
|
+
# Sets this audit to be a message with the given message.
|
51
|
+
def message=(message)
|
52
|
+
self.change_set = {MESSAGE => message}
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<li class="audit">
|
2
|
+
<h4 class="audit"><%= audit.audited.class.to_s.humanize %> Modification
|
3
|
+
<span class="audit_meta">by <%= audit.try(:user).try(:name) %> on <%= audit.created_at.to_formatted_s(:long) %></span>
|
4
|
+
</h4>
|
5
|
+
<% change_set_iter(audit.change_set) do |attr, old, new| %>
|
6
|
+
<p class="audit"><strong><%=h attr %></strong>
|
7
|
+
<% if nil %>
|
8
|
+
<%# if audit.message %>
|
9
|
+
<em><%= new %></em>
|
10
|
+
<% else %>
|
11
|
+
changed from <em><%=h old %></em> to <em><%=h new %></em>.
|
12
|
+
<% end %>
|
13
|
+
</p>
|
14
|
+
<% end %>
|
15
|
+
</li>
|
data/lib/track_changes/engine.rb
CHANGED
data/lib/track_changes.rb
CHANGED
@@ -1,13 +1,11 @@
|
|
1
1
|
module TrackChanges
|
2
|
-
require 'track_changes/engine' if defined?(Rails)
|
3
|
-
require 'track_changes/action_controller'
|
4
|
-
require 'track_changes/active_record'
|
5
|
-
require 'track_changes/around_save'
|
6
|
-
require 'track_changes/changes'
|
7
|
-
require 'track_changes/configuration'
|
8
|
-
require 'track_changes/current_user'
|
9
|
-
require 'track_changes/current_user_filter'
|
2
|
+
require 'track_changes/engine' if defined?(Rails)
|
10
3
|
end
|
11
4
|
|
12
|
-
|
13
|
-
|
5
|
+
require 'track_changes/action_controller'
|
6
|
+
require 'track_changes/active_record'
|
7
|
+
require 'track_changes/around_save'
|
8
|
+
require 'track_changes/changes'
|
9
|
+
require 'track_changes/configuration'
|
10
|
+
require 'track_changes/current_user'
|
11
|
+
require 'track_changes/current_user_filter'
|
metadata
CHANGED
@@ -6,8 +6,8 @@ version: !ruby/object:Gem::Version
|
|
6
6
|
- 1
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.0.
|
9
|
+
- pre2
|
10
|
+
version: 1.0.0.pre2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Matt Haley
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-08-
|
18
|
+
date: 2010-08-20 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -74,6 +74,9 @@ files:
|
|
74
74
|
- LICENSE
|
75
75
|
- TODO
|
76
76
|
- VERSION.yml
|
77
|
+
- app/helpers/audits_helper.rb
|
78
|
+
- app/models/audit.rb
|
79
|
+
- app/views/audits/_audit.html.erb
|
77
80
|
- lib/generators/track_changes/templates/initializer.rb
|
78
81
|
- lib/generators/track_changes/templates/migration.rb
|
79
82
|
- lib/generators/track_changes/templates/stylesheet.css
|