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.
@@ -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: