track_changes 1.0.0.pre1 → 1.0.0.pre2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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