auditable 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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