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 CHANGED
@@ -2,4 +2,4 @@
2
2
  :major: 1
3
3
  :minor: 0
4
4
  :patch: 0
5
- :build: pre1
5
+ :build: pre2
@@ -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
@@ -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>
@@ -29,3 +29,5 @@ module TrackChanges
29
29
  end
30
30
  end
31
31
  end
32
+
33
+ ActionController::Base.send :include, TrackChanges::ActionController
@@ -24,3 +24,5 @@ module TrackChanges
24
24
  end
25
25
  end
26
26
  end
27
+
28
+ ActiveRecord::Base.send :include, TrackChanges::ActiveRecord
@@ -1,5 +1,7 @@
1
1
  require 'track_changes'
2
2
  require 'rails'
3
+ require 'action_controller'
4
+ require 'active_record'
3
5
 
4
6
  module TrackChanges
5
7
  class Engine < Rails::Engine #:nodoc:
data/lib/track_changes.rb CHANGED
@@ -1,13 +1,11 @@
1
1
  module TrackChanges
2
- require 'track_changes/engine' if defined?(Rails) && Rails::VERSION::MAJOR == 3
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
- ActiveRecord::Base.send :include, TrackChanges::ActiveRecord
13
- ActionController::Base.send :include, TrackChanges::ActionController
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
- - pre1
10
- version: 1.0.0.pre1
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-19 00:00:00 -07:00
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