auditable 0.0.9 → 0.1.0
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/CHANGELOG.md +5 -0
- data/Gemfile +2 -0
- data/lib/auditable/audit.rb +8 -0
- data/lib/auditable/auditing.rb +8 -8
- data/lib/auditable/version.rb +1 -1
- data/spec/lib/auditable_spec.rb +1 -0
- data/spec/support/models.rb +0 -11
- data/spec/support/schema.rb +12 -0
- metadata +17 -17
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
### 0.1.0 (1012-04-11)
|
2
|
+
#### Changes
|
3
|
+
* previously, `audit_tag_with` updates the latest audit if no changes are detected in a record's audited changes. now it creates a new audit row instead because this works better and prevent losing history if we call `audit_tag_with` multiple times. new audits are only created if the combo of 4 attributes is different: `modifications`, `tag`, `user`, `action`.
|
4
|
+
* bump minor version because it is more ready for production use at this point
|
5
|
+
|
1
6
|
### 0.0.9 (2012-04-10)
|
2
7
|
#### Improvement
|
3
8
|
* Add `last_change_of(attribute)` to show the last change that happened to an attribute. Thanks to @zuf
|
data/Gemfile
CHANGED
data/lib/auditable/audit.rb
CHANGED
@@ -70,5 +70,13 @@ module Auditable
|
|
70
70
|
def changed_by
|
71
71
|
user
|
72
72
|
end
|
73
|
+
|
74
|
+
def same_audited_content?(other_audit)
|
75
|
+
other_audit and relevant_attributes == other_audit.relevant_attributes
|
76
|
+
end
|
77
|
+
|
78
|
+
def relevant_attributes
|
79
|
+
attributes.slice("modifications", "tag", "action", "user").reject {|k,v| v.blank? }
|
80
|
+
end
|
73
81
|
end
|
74
82
|
end
|
data/lib/auditable/auditing.rb
CHANGED
@@ -61,19 +61,19 @@ module Auditable
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
|
65
|
-
# build new audit
|
66
|
-
audit = audits.build(:modifications => snap)
|
67
|
-
else
|
68
|
-
# no changes on modifications, but have to update the latest record
|
69
|
-
audit = audits.last
|
70
|
-
end
|
64
|
+
last_saved_audit = audits.last
|
71
65
|
|
66
|
+
# build new audit
|
67
|
+
audit = audits.build(:modifications => snap)
|
72
68
|
options[:tag] = self.audit_tag || options[:tag]
|
73
69
|
options[:action] = self.audit_action || options[:action]
|
74
70
|
options[:user] = self.changed_by || options[:user]
|
71
|
+
audit.attributes = audit.attributes.merge options
|
75
72
|
|
76
|
-
|
73
|
+
# only save if it's different from before
|
74
|
+
if !audit.same_audited_content?(last_saved_audit)
|
75
|
+
audit.save
|
76
|
+
end
|
77
77
|
end
|
78
78
|
|
79
79
|
# Get the latest changes by comparing the latest two audits
|
data/lib/auditable/version.rb
CHANGED
data/spec/lib/auditable_spec.rb
CHANGED
data/spec/support/models.rb
CHANGED
@@ -10,15 +10,4 @@ end
|
|
10
10
|
|
11
11
|
# TODO add Question class to give examples on association stuff
|
12
12
|
|
13
|
-
# prepare test data
|
14
|
-
class CreateTestSchema < ActiveRecord::Migration
|
15
|
-
def change
|
16
|
-
create_table "surveys", :force => true do |t|
|
17
|
-
t.string "title"
|
18
|
-
end
|
19
|
-
create_table "users", :force => true do |t|
|
20
|
-
t.string "name"
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
13
|
|
data/spec/support/schema.rb
CHANGED
@@ -3,6 +3,18 @@ ActiveRecord::Base.establish_connection({
|
|
3
3
|
:database => ':memory:'
|
4
4
|
})
|
5
5
|
|
6
|
+
# prepare test data
|
7
|
+
class CreateTestSchema < ActiveRecord::Migration
|
8
|
+
def change
|
9
|
+
create_table "surveys", :force => true do |t|
|
10
|
+
t.string "title"
|
11
|
+
end
|
12
|
+
create_table "users", :force => true do |t|
|
13
|
+
t.string "name"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
6
18
|
CreateTestSchema.migrate(:up)
|
7
19
|
|
8
20
|
# run gem's required migration
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: auditable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-04-11 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &2156128720 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2156128720
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &2156125140 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '2'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2156125140
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: watchr
|
38
|
-
requirement: &
|
38
|
+
requirement: &2156060480 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2156060480
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: sqlite3
|
49
|
-
requirement: &
|
49
|
+
requirement: &2156059540 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2156059540
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: yard
|
60
|
-
requirement: &
|
60
|
+
requirement: &2156056920 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2156056920
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rdiscount
|
71
|
-
requirement: &
|
71
|
+
requirement: &2156054820 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2156054820
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: activesupport
|
82
|
-
requirement: &
|
82
|
+
requirement: &2156054120 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '3.0'
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2156054120
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: activerecord
|
93
|
-
requirement: &
|
93
|
+
requirement: &2156053380 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,7 +98,7 @@ dependencies:
|
|
98
98
|
version: '3.0'
|
99
99
|
type: :runtime
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *2156053380
|
102
102
|
description: A simple gem that audit models' attributes or methods by taking snapshots
|
103
103
|
and diff them for you. Starting from scratch to work with Rails 3.2.2 onwards
|
104
104
|
email:
|