auditable 0.0.5 → 0.0.6

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 CHANGED
@@ -1,7 +1,12 @@
1
- # 0.0.5 (2012-03-12)
1
+ ## 0.0.6 (2012-03-12)
2
+ ### Fixes
3
+ * Fix error when calling `audit_tag_with` on a record without audits and without `audit_tag` virtual attribute defined.
2
4
 
3
- ## Changes
5
+ ### Changes
6
+ * `.changed_by`, `.audit_tag`, `.audit_action` virtual attributes are now added to the auditable model by default. The extra check `respond_to?` on these guys is just cumbersome to carry along.
4
7
 
8
+ ## 0.0.5 (2012-03-12)
9
+ ### Changes
5
10
  Easier to explain with code
6
11
 
7
12
  # Given
data/README.md CHANGED
@@ -120,7 +120,7 @@ It guessable from the above that `audits.modifications` will just be a serialize
120
120
 
121
121
  If you want to store the user who made the changed to the record, just assigned it to the record's `changed_by` attribute, like so:
122
122
 
123
- # note you have to define `attr_accessor :changed_by` yourself
123
+ # note `attr_accessor :changed_by` is defined in your Survey class by the gem
124
124
  >> @survey.update_attributes(:changed_by => current_user, # and other attributes you want to set)
125
125
  # then @surveys.audits.last.user will be set to current_user
126
126
  # also works when you set changed_by and call save later, of course
@@ -1,5 +1,3 @@
1
- #require 'active_support/concern'
2
-
3
1
  module Auditable
4
2
  module Auditing
5
3
  extend ActiveSupport::Concern
@@ -26,8 +24,8 @@ module Auditable
26
24
  # end
27
25
  def audit(*options)
28
26
  has_many :audits, :class_name => "Auditable::Audit", :as => :auditable
29
- after_create {|record| record.snap!("create")}
30
- after_update {|record| record.snap!("update")}
27
+ after_create {|record| record.snap!(:action => "create")}
28
+ after_update {|record| record.snap!(:action => "update")}
31
29
 
32
30
  self.audited_attributes = Array.wrap options
33
31
  end
@@ -35,6 +33,8 @@ module Auditable
35
33
 
36
34
  # INSTANCE METHODS
37
35
 
36
+ attr_accessor :changed_by, :audit_action, :audit_tag
37
+
38
38
  # Get the latest audit record
39
39
  def last_audit
40
40
  audits.last
@@ -52,18 +52,19 @@ module Auditable
52
52
  end
53
53
 
54
54
  # Take a snapshot of and save the current state of the audited record's audited attributes
55
- def snap!(action_default = "update")
55
+ #
56
+ # Accept values for :tag, :action and :user in the argument hash. However, these are overridden by the values set by the auditable record's virtual attributes (#audit_tag, #audit_action, #changed_by) if defined
57
+ def snap!(options = {})
56
58
  snap = {}.tap do |s|
57
59
  self.class.audited_attributes.each do |attr|
58
60
  s[attr.to_s] = self.send attr
59
61
  end
60
62
  end
61
- audits.create! do |audit|
62
- audit.modifications = snap
63
- audit.tag = self.audit_tag if self.respond_to?(:audit_tag)
64
- audit.action = (self.respond_to?(:audit_action) && self.audit_action) || action_default
65
- audit.user = self.changed_by if self.respond_to?(:changed_by)
66
- end
63
+ options[:modifications] = snap
64
+ options[:tag] = self.audit_tag || options[:tag]
65
+ options[:action] = self.audit_action || options[:action]
66
+ options[:user] = self.changed_by || options[:user]
67
+ audits.create(options)
67
68
  end
68
69
 
69
70
  # Get the latest changes by comparing the latest two audits
@@ -1,3 +1,3 @@
1
1
  module Auditable
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -142,4 +142,12 @@ describe Auditable do
142
142
  another_survey.audited_changes.should == {"title" => ["another survey", "another title 1"]}
143
143
  end
144
144
  end
145
+
146
+ context "virtual attributes" do
147
+ it "should be there!" do
148
+ survey.should respond_to :changed_by
149
+ survey.should respond_to :audit_tag
150
+ survey.should respond_to :audit_action
151
+ end
152
+ end
145
153
  end
@@ -1,11 +1,11 @@
1
1
  class Survey < ActiveRecord::Base
2
2
  attr_accessor :current_page
3
- attr_accessor :changed_by, :audit_action, :audit_tag
4
3
 
5
4
  audit :title, :current_page
6
5
  end
7
6
 
8
7
  class User < ActiveRecord::Base
8
+ audit :name
9
9
  end
10
10
 
11
11
  # TODO add Question class to give examples on association stuff
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.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-03-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &2164398120 !ruby/object:Gem::Requirement
16
+ requirement: &2157436600 !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: *2164398120
24
+ version_requirements: *2157436600
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &2164397600 !ruby/object:Gem::Requirement
27
+ requirement: &2157436100 !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: *2164397600
35
+ version_requirements: *2157436100
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: watchr
38
- requirement: &2164397060 !ruby/object:Gem::Requirement
38
+ requirement: &2157435620 !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: *2164397060
46
+ version_requirements: *2157435620
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: sqlite3
49
- requirement: &2164396480 !ruby/object:Gem::Requirement
49
+ requirement: &2157435000 !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: *2164396480
57
+ version_requirements: *2157435000
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: yard
60
- requirement: &2164395960 !ruby/object:Gem::Requirement
60
+ requirement: &2157434460 !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: *2164395960
68
+ version_requirements: *2157434460
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rdiscount
71
- requirement: &2164395540 !ruby/object:Gem::Requirement
71
+ requirement: &2157434040 !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: *2164395540
79
+ version_requirements: *2157434040
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: activesupport
82
- requirement: &2164395020 !ruby/object:Gem::Requirement
82
+ requirement: &2157433280 !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: *2164395020
90
+ version_requirements: *2157433280
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: activerecord
93
- requirement: &2164394000 !ruby/object:Gem::Requirement
93
+ requirement: &2157432480 !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: *2164394000
101
+ version_requirements: *2157432480
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:
@@ -143,7 +143,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
143
143
  version: '0'
144
144
  segments:
145
145
  - 0
146
- hash: 3768124813629379873
146
+ hash: -2723570149025110749
147
147
  required_rubygems_version: !ruby/object:Gem::Requirement
148
148
  none: false
149
149
  requirements:
@@ -152,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
152
  version: '0'
153
153
  segments:
154
154
  - 0
155
- hash: 3768124813629379873
155
+ hash: -2723570149025110749
156
156
  requirements: []
157
157
  rubyforge_project:
158
158
  rubygems_version: 1.8.17