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 +1 -1
- data/CHANGELOG.md +5 -0
- data/auditable.gemspec +1 -0
- data/lib/auditable/audit.rb +1 -1
- data/lib/auditable/auditing.rb +2 -0
- data/lib/auditable/version.rb +1 -1
- data/spec/lib/auditable_spec.rb +16 -3
- metadata +96 -128
data/.rvmrc
CHANGED
@@ -1 +1 @@
|
|
1
|
-
rvm --create use 1.9.3@auditable
|
1
|
+
rvm --create use 1.9.3-p194@auditable
|
data/CHANGELOG.md
CHANGED
@@ -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 
|
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`
|
data/auditable.gemspec
CHANGED
@@ -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'
|
data/lib/auditable/audit.rb
CHANGED
@@ -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
|
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
|
|
data/lib/auditable/auditing.rb
CHANGED
data/lib/auditable/version.rb
CHANGED
data/spec/lib/auditable_spec.rb
CHANGED
@@ -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
|
12
|
-
let(:another_user) { User.create
|
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
|
-
|
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
|
-
|
19
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
85
|
-
segments:
|
86
|
-
- 0
|
87
|
-
version: "0"
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
88
66
|
type: :development
|
89
|
-
|
90
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
134
|
-
|
135
|
-
|
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
|
-
|
180
|
-
|
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
|
-
|
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
|