auditable 0.0.9 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -2,3 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in auditable.gemspec
4
4
  gemspec
5
+
6
+ gem 'debugger', :platform => :ruby_19
@@ -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
@@ -61,19 +61,19 @@ module Auditable
61
61
  end
62
62
  end
63
63
 
64
- if last_audit.nil? || last_audit.modifications != snap
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
- audit.update_attributes(options)
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
@@ -1,3 +1,3 @@
1
1
  module Auditable
2
- VERSION = "0.0.9"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -154,6 +154,7 @@ describe Auditable do
154
154
 
155
155
  context "no changes on audited attributes" do
156
156
  it "should not create new audits" do
157
+ survey.save
157
158
  expect { survey.save }.to_not change { survey.audits.count }
158
159
  end
159
160
  end
@@ -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
 
@@ -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.9
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: &2156128620 !ruby/object:Gem::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: *2156128620
24
+ version_requirements: *2156128720
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &2156125000 !ruby/object:Gem::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: *2156125000
35
+ version_requirements: *2156125140
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: watchr
38
- requirement: &2156060580 !ruby/object:Gem::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: *2156060580
46
+ version_requirements: *2156060480
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: sqlite3
49
- requirement: &2156059520 !ruby/object:Gem::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: *2156059520
57
+ version_requirements: *2156059540
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: yard
60
- requirement: &2156057800 !ruby/object:Gem::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: *2156057800
68
+ version_requirements: *2156056920
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rdiscount
71
- requirement: &2156054720 !ruby/object:Gem::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: *2156054720
79
+ version_requirements: *2156054820
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: activesupport
82
- requirement: &2156054020 !ruby/object:Gem::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: *2156054020
90
+ version_requirements: *2156054120
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: activerecord
93
- requirement: &2156053280 !ruby/object:Gem::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: *2156053280
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: