<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -6,7 +6,7 @@ PaperTrail lets you track changes to your models' data.  It's good for auditing
 ## Features
 
 * Stores every create, update and destroy.
-* Does not store updates which don't change anything.
+* Does not store updates which don't change anything (or which only change attributes you are ignoring).
 * Allows you to get at every version, including the original, even once destroyed.
 * Allows you to get at every version even if the schema has since changed.
 * Automatically records who was responsible if your controller has a `current_user` method.
@@ -87,6 +87,25 @@ Here's a helpful table showing what PaperTrail stores:
 PaperTrail stores the values in the Model Before column.  Most other auditing/versioning plugins store the After column.
 
 
+## Ignoring changes to certain attributes
+
+You can ignore changes to certain attributes like this:
+
+    class Article &lt; ActiveRecord::Base
+      has_paper_trail :ignore =&gt; [:title, :rating]
+    end
+
+This means that changes to just the `title` or `rating` will not store another version of the article.  It does not mean that the `title` and `rating` attributes will be ignored if some other change causes a new `Version` to be crated.  For example:
+
+    &gt;&gt; a = Article.create
+    &gt;&gt; a.versions.length                         # 1
+    &gt;&gt; a.update_attributes :title =&gt; 'My Title', :rating =&gt; 3
+    &gt;&gt; a.versions.length                         # 1
+    &gt;&gt; a.update_attributes :content =&gt; 'Hello'
+    &gt;&gt; a.versions.length                         # 2
+    &gt;&gt; a.versions.last.reify.title               # 'My Title'
+
+
 ## Reverting And Undeleting A Model
 
 PaperTrail makes reverting to a previous version easy:</diff>
      <filename>README.md</filename>
    </modified>
    <modified>
      <diff>@@ -6,8 +6,13 @@ module PaperTrail
 
 
   module ClassMethods
-    def has_paper_trail
+    # Options:
+    # :ignore    an array of attributes for which a new +Version+ will not be created if only they change.
+    def has_paper_trail(options = {})
       send :include, InstanceMethods
+
+      cattr_accessor :ignore
+      self.ignore = (options[:ignore] || []).map &amp;:to_s
       
       cattr_accessor :paper_trail_active
       self.paper_trail_active = true
@@ -36,7 +41,7 @@ module PaperTrail
     end
 
     def record_update
-      if changed? and self.class.paper_trail_active
+      if changed_and_we_care? and self.class.paper_trail_active
         versions.build :event     =&gt; 'update',
                        :object    =&gt; object_to_string(previous_version),
                        :whodunnit =&gt; PaperTrail.whodunnit
@@ -63,6 +68,10 @@ module PaperTrail
     def object_to_string(object)
       object.attributes.to_yaml
     end
+
+    def changed_and_we_care?
+      changed? and !(changed - self.class.ignore).empty?
+    end
   end
 
 end</diff>
      <filename>lib/paper_trail/has_paper_trail.rb</filename>
    </modified>
    <modified>
      <diff>@@ -17,10 +17,29 @@ class Fluxor &lt; ActiveRecord::Base
   belongs_to :widget
 end
 
+class Article &lt; ActiveRecord::Base
+  has_paper_trail :ignore =&gt; [:title]
+end
+
 
 class HasPaperTrailModelTest &lt; Test::Unit::TestCase
   load_schema
 
+  context 'A record' do
+    setup { @article = Article.create }
+    
+    context 'which updates an ignored column' do
+      setup { @article.update_attributes :title =&gt; 'My first title' }
+      should_not_change('the number of versions') { Version.count }
+    end
+
+    context 'which updates an ignored column and a non-ignored column' do
+      setup { @article.update_attributes :title =&gt; 'My first title', :content =&gt; 'Some text here.' }
+      should_change('the number of versions', :by =&gt; 1) { Version.count }
+    end
+
+  end
+
   context 'A new record' do
     setup { @widget = Widget.new }
 </diff>
      <filename>test/paper_trail_model_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -10,5 +10,6 @@ class PaperTrailSchemaTest &lt; ActiveSupport::TestCase
     assert_equal [], Version.all
     assert_equal [], Wotsit.all
     assert_equal [], Fluxor.all
+    assert_equal [], Article.all
   end
 end</diff>
      <filename>test/paper_trail_schema_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -35,4 +35,9 @@ ActiveRecord::Schema.define(:version =&gt; 0) do
     t.string  :name
   end
 
+  create_table :articles, :force =&gt; true do |t|
+    t.integer :title
+    t.string  :content
+  end
+
 end</diff>
      <filename>test/schema.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>53e1eb419423b6fae7656e2fdd8f8a8b9c8a5ab4</id>
    </parent>
  </parents>
  <author>
    <name>Andy Stewart</name>
    <email>boss@airbladesoftware.com</email>
  </author>
  <url>http://github.com/airblade/paper_trail/commit/52981bfca3d6d09d9a3d76336013779260930c7e</url>
  <id>52981bfca3d6d09d9a3d76336013779260930c7e</id>
  <committed-date>2009-10-28T06:12:36-07:00</committed-date>
  <authored-date>2009-10-28T06:12:36-07:00</authored-date>
  <message>Optionally ignore attributes.</message>
  <tree>2c71833e59fc6ae824422ed66bb03218485eb6aa</tree>
  <committer>
    <name>Andy Stewart</name>
    <email>boss@airbladesoftware.com</email>
  </committer>
</commit>
