auditable 0.1.1 → 0.1.2

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/.rvmrc CHANGED
@@ -1 +1 @@
1
- rvm --create use 1.9.3@auditable
1
+ rvm --create use 1.9.3-p194@auditable
@@ -1,3 +1,8 @@
1
+ ### 0.1.2 (2012-05-24
2
+ #### Fixes
3
+ * Fix bug creating duplicate audits despite no change in a record's subsequent saves, due to using `.build`. See this comment on ![issue #7](https://github.com/harleyttd/auditable/issues/7#issuecomment-5520894)
4
+ * Fix bug not finding the right audit in rare cases when there are many audits with the same `created_at` timestamp
5
+
1
6
  ### 0.1.1 (2012-04-11)
2
7
  #### Fixes
3
8
  * Fix bug/inconsistency between `user` and `changed_by`, now with `alias_attribute :changed_by, :user`
@@ -22,6 +22,7 @@ Gem::Specification.new do |gem|
22
22
  # documetation stuff
23
23
  gem.add_development_dependency 'yard'
24
24
  gem.add_development_dependency 'rdiscount'
25
+ gem.add_development_dependency 'timecop'
25
26
 
26
27
  gem.add_runtime_dependency 'activesupport', '>= 3.0'
27
28
  gem.add_runtime_dependency 'activerecord', '>= 3.0'
@@ -59,7 +59,7 @@ module Auditable
59
59
 
60
60
  # Diff this audit with the latest audit created before the `time` variable passed
61
61
  def diff_since(time)
62
- other_audit = self.class.where("created_at < ?", time).order("created_at DESC").limit(1).first
62
+ other_audit = self.class.where("created_at <= ? AND id != ?", time, id).order("created_at DESC").limit(1).first
63
63
  diff(other_audit)
64
64
  end
65
65
 
@@ -72,6 +72,8 @@ module Auditable
72
72
  # only save if it's different from before
73
73
  if !audit.same_audited_content?(last_saved_audit)
74
74
  audit.save
75
+ else
76
+ audits.delete(audit)
75
77
  end
76
78
  end
77
79
 
@@ -1,3 +1,3 @@
1
1
  module Auditable
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -8,8 +8,8 @@ end
8
8
 
9
9
  describe Auditable do
10
10
  let(:survey) { Survey.create :title => "test survey" }
11
- let(:user) { User.create(:name => "test user") }
12
- let(:another_user) { User.create(:name => "another user") }
11
+ let(:user) { User.create :name => "test user" }
12
+ let(:another_user) { User.create :name => "another user" }
13
13
 
14
14
  it "should have a valid audit to start with" do
15
15
  survey.title.should == "test survey"
@@ -17,6 +17,19 @@ describe Auditable do
17
17
  survey.audits.last.action.should == "create"
18
18
  end
19
19
 
20
+ it "should work when we have multiple audits created per second (same created_at timestamps)" do
21
+ require 'timecop'
22
+ Timecop.freeze do
23
+ survey.update_attributes :title => "new title 1"
24
+ survey.update_attributes :title => "new title 2"
25
+ survey.audited_changes.should == {"title" => ["new title 1", "new title 2"]}
26
+ survey.update_attributes :title => "new title 3"
27
+ survey.update_attributes :title => "new title 4"
28
+ survey.update_attributes :title => "new title 5"
29
+ survey.audited_changes.should == {"title" => ["new title 4", "new title 5"]}
30
+ end
31
+ end
32
+
20
33
  context "for existing records without existing audits" do
21
34
  before do
22
35
  survey.audits.delete_all
@@ -155,7 +168,7 @@ describe Auditable do
155
168
  context "no changes on audited attributes" do
156
169
  it "should not create new audits" do
157
170
  survey.save
158
- expect { survey.save }.to_not change { survey.audits.count }
171
+ expect { 3.times { survey.save } }.to_not change { survey.audits.count }
159
172
  end
160
173
  end
161
174
 
metadata CHANGED
@@ -1,146 +1,123 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: auditable
3
- version: !ruby/object:Gem::Version
4
- hash: 25
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 1
10
- version: 0.1.1
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Harley Trung
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-04-11 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-05-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: rake
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &2156001580 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
32
22
  type: :development
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: rspec
36
23
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *2156001580
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &2155999120 !ruby/object:Gem::Requirement
38
28
  none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 7
43
- segments:
44
- - 2
45
- version: "2"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '2'
46
33
  type: :development
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: watchr
50
34
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *2155999120
36
+ - !ruby/object:Gem::Dependency
37
+ name: watchr
38
+ requirement: &2155994600 !ruby/object:Gem::Requirement
52
39
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- hash: 3
57
- segments:
58
- - 0
59
- version: "0"
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
60
44
  type: :development
61
- version_requirements: *id003
62
- - !ruby/object:Gem::Dependency
63
- name: sqlite3
64
45
  prerelease: false
65
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *2155994600
47
+ - !ruby/object:Gem::Dependency
48
+ name: sqlite3
49
+ requirement: &2155992820 !ruby/object:Gem::Requirement
66
50
  none: false
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- hash: 3
71
- segments:
72
- - 0
73
- version: "0"
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
74
55
  type: :development
75
- version_requirements: *id004
76
- - !ruby/object:Gem::Dependency
77
- name: yard
78
56
  prerelease: false
79
- requirement: &id005 !ruby/object:Gem::Requirement
57
+ version_requirements: *2155992820
58
+ - !ruby/object:Gem::Dependency
59
+ name: yard
60
+ requirement: &2155991880 !ruby/object:Gem::Requirement
80
61
  none: false
81
- requirements:
82
- - - ">="
83
- - !ruby/object:Gem::Version
84
- hash: 3
85
- segments:
86
- - 0
87
- version: "0"
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
88
66
  type: :development
89
- version_requirements: *id005
90
- - !ruby/object:Gem::Dependency
67
+ prerelease: false
68
+ version_requirements: *2155991880
69
+ - !ruby/object:Gem::Dependency
91
70
  name: rdiscount
71
+ requirement: &2155990760 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
92
78
  prerelease: false
93
- requirement: &id006 !ruby/object:Gem::Requirement
79
+ version_requirements: *2155990760
80
+ - !ruby/object:Gem::Dependency
81
+ name: timecop
82
+ requirement: &2155989640 !ruby/object:Gem::Requirement
94
83
  none: false
95
- requirements:
96
- - - ">="
97
- - !ruby/object:Gem::Version
98
- hash: 3
99
- segments:
100
- - 0
101
- version: "0"
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
102
88
  type: :development
103
- version_requirements: *id006
104
- - !ruby/object:Gem::Dependency
105
- name: activesupport
106
89
  prerelease: false
107
- requirement: &id007 !ruby/object:Gem::Requirement
90
+ version_requirements: *2155989640
91
+ - !ruby/object:Gem::Dependency
92
+ name: activesupport
93
+ requirement: &2155987940 !ruby/object:Gem::Requirement
108
94
  none: false
109
- requirements:
110
- - - ">="
111
- - !ruby/object:Gem::Version
112
- hash: 7
113
- segments:
114
- - 3
115
- - 0
116
- version: "3.0"
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '3.0'
117
99
  type: :runtime
118
- version_requirements: *id007
119
- - !ruby/object:Gem::Dependency
120
- name: activerecord
121
100
  prerelease: false
122
- requirement: &id008 !ruby/object:Gem::Requirement
101
+ version_requirements: *2155987940
102
+ - !ruby/object:Gem::Dependency
103
+ name: activerecord
104
+ requirement: &2155986140 !ruby/object:Gem::Requirement
123
105
  none: false
124
- requirements:
125
- - - ">="
126
- - !ruby/object:Gem::Version
127
- hash: 7
128
- segments:
129
- - 3
130
- - 0
131
- version: "3.0"
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '3.0'
132
110
  type: :runtime
133
- version_requirements: *id008
134
- description: A simple gem that audit models' attributes or methods by taking snapshots and diff them for you. Starting from scratch to work with Rails 3.2.2 onwards
135
- email:
111
+ prerelease: false
112
+ version_requirements: *2155986140
113
+ description: A simple gem that audit models' attributes or methods by taking snapshots
114
+ and diff them for you. Starting from scratch to work with Rails 3.2.2 onwards
115
+ email:
136
116
  - harley@socialsci.com
137
117
  executables: []
138
-
139
118
  extensions: []
140
-
141
119
  extra_rdoc_files: []
142
-
143
- files:
120
+ files:
144
121
  - .gitignore
145
122
  - .rspec
146
123
  - .rvmrc
@@ -165,38 +142,29 @@ files:
165
142
  - specs.watchr
166
143
  homepage: https://github.com/harleyttd/auditable
167
144
  licenses: []
168
-
169
145
  post_install_message:
170
146
  rdoc_options: []
171
-
172
- require_paths:
147
+ require_paths:
173
148
  - lib
174
- required_ruby_version: !ruby/object:Gem::Requirement
149
+ required_ruby_version: !ruby/object:Gem::Requirement
175
150
  none: false
176
- requirements:
177
- - - ">="
178
- - !ruby/object:Gem::Version
179
- hash: 3
180
- segments:
181
- - 0
182
- version: "0"
183
- required_rubygems_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ! '>='
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ required_rubygems_version: !ruby/object:Gem::Requirement
184
156
  none: false
185
- requirements:
186
- - - ">="
187
- - !ruby/object:Gem::Version
188
- hash: 3
189
- segments:
190
- - 0
191
- version: "0"
157
+ requirements:
158
+ - - ! '>='
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
192
161
  requirements: []
193
-
194
162
  rubyforge_project:
195
163
  rubygems_version: 1.8.17
196
164
  signing_key:
197
165
  specification_version: 3
198
166
  summary: A simple gem to audit attributes and methods in ActiveRecord models.
199
- test_files:
167
+ test_files:
200
168
  - spec/lib/auditable_spec.rb
201
169
  - spec/spec_helper.rb
202
170
  - spec/support/models.rb