paper_trail 2.5.2 → 2.6.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/.gitignore +1 -0
- data/README.md +11 -0
- data/lib/paper_trail/has_paper_trail.rb +13 -3
- data/lib/paper_trail/version_number.rb +1 -1
- data/test/dummy/app/models/translation.rb +4 -0
- data/test/dummy/db/migrate/20110208155312_set_up_test_tables.rb +8 -1
- data/test/unit/model_test.rb +42 -0
- metadata +7 -9
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/test.sqlite3 +0 -0
data/.gitignore
CHANGED
data/README.md
CHANGED
|
@@ -179,6 +179,16 @@ You can choose which events to track with the `on` option. For example, to igno
|
|
|
179
179
|
end
|
|
180
180
|
|
|
181
181
|
|
|
182
|
+
## Choosing When To Save New Versions
|
|
183
|
+
|
|
184
|
+
You can choose the conditions when to add new versions with the `if` and `unless` options. For example, to save versions only for US non-draft translations:
|
|
185
|
+
|
|
186
|
+
class Translation < ActiveRecord::Base
|
|
187
|
+
has_paper_trail :if => Proc.new { |t| t.language_code == 'US' },
|
|
188
|
+
:unless => Proc.new { |t| t.type == 'DRAFT' }
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
|
|
182
192
|
|
|
183
193
|
## Choosing Attributes To Monitor
|
|
184
194
|
|
|
@@ -694,6 +704,7 @@ Many thanks to:
|
|
|
694
704
|
* [Benjamin Curtis](https://github.com/stympy)
|
|
695
705
|
* [Peter Harkins](https://github.com/pushcx)
|
|
696
706
|
* [Mohd Amree](https://github.com/amree)
|
|
707
|
+
* [Nikita Cernovs](https://github.com/nikitachernov)
|
|
697
708
|
|
|
698
709
|
|
|
699
710
|
## Inspirations
|
|
@@ -15,6 +15,7 @@ module PaperTrail
|
|
|
15
15
|
# `:create`, `:update`, `:destroy` as desired.
|
|
16
16
|
# :class_name the name of a custom Version class. This class should inherit from Version.
|
|
17
17
|
# :ignore an array of attributes for which a new `Version` will not be created if only they change.
|
|
18
|
+
# :if, :unless Procs that allow to specify conditions when to save versions for an object
|
|
18
19
|
# :only inverse of `ignore` - a new `Version` will be created only for these attributes if supplied
|
|
19
20
|
# :skip fields to ignore completely. As with `ignore`, updates to these fields will not create
|
|
20
21
|
# a new `Version`. In addition, these fields will not be included in the serialized versions
|
|
@@ -43,6 +44,12 @@ module PaperTrail
|
|
|
43
44
|
class_attribute :ignore
|
|
44
45
|
self.ignore = ([options[:ignore]].flatten.compact || []).map &:to_s
|
|
45
46
|
|
|
47
|
+
class_attribute :if_condition
|
|
48
|
+
self.if_condition = options[:if]
|
|
49
|
+
|
|
50
|
+
class_attribute :unless_condition
|
|
51
|
+
self.unless_condition = options[:unless]
|
|
52
|
+
|
|
46
53
|
class_attribute :skip
|
|
47
54
|
self.skip = ([options[:skip]].flatten.compact || []).map &:to_s
|
|
48
55
|
|
|
@@ -63,8 +70,8 @@ module PaperTrail
|
|
|
63
70
|
:as => :item,
|
|
64
71
|
:order => "created_at ASC, #{self.version_class_name.constantize.primary_key} ASC"
|
|
65
72
|
|
|
66
|
-
after_create :record_create
|
|
67
|
-
before_update :record_update
|
|
73
|
+
after_create :record_create, :if => :save_version? if !options[:on] || options[:on].include?(:create)
|
|
74
|
+
before_update :record_update, :if => :save_version? if !options[:on] || options[:on].include?(:update)
|
|
68
75
|
after_destroy :record_destroy if !options[:on] || options[:on].include?(:destroy)
|
|
69
76
|
end
|
|
70
77
|
|
|
@@ -215,7 +222,10 @@ module PaperTrail
|
|
|
215
222
|
def switched_on?
|
|
216
223
|
PaperTrail.enabled? && PaperTrail.enabled_for_controller? && self.class.paper_trail_enabled_for_model
|
|
217
224
|
end
|
|
218
|
-
end
|
|
219
225
|
|
|
226
|
+
def save_version?
|
|
227
|
+
(if_condition.blank? || if_condition.call(self)) && !unless_condition.try(:call, self)
|
|
228
|
+
end
|
|
229
|
+
end
|
|
220
230
|
end
|
|
221
231
|
end
|
|
@@ -103,7 +103,13 @@ class SetUpTestTables < ActiveRecord::Migration
|
|
|
103
103
|
t.string :name
|
|
104
104
|
t.integer :version
|
|
105
105
|
end
|
|
106
|
-
|
|
106
|
+
|
|
107
|
+
create_table :translations, :force => true do |t|
|
|
108
|
+
t.string :headline
|
|
109
|
+
t.string :content
|
|
110
|
+
t.string :language_code
|
|
111
|
+
t.string :type
|
|
112
|
+
end
|
|
107
113
|
end
|
|
108
114
|
|
|
109
115
|
def self.down
|
|
@@ -123,5 +129,6 @@ class SetUpTestTables < ActiveRecord::Migration
|
|
|
123
129
|
drop_table :widgets
|
|
124
130
|
drop_table :documents
|
|
125
131
|
drop_table :legacy_widgets
|
|
132
|
+
drop_table :translations
|
|
126
133
|
end
|
|
127
134
|
end
|
data/test/unit/model_test.rb
CHANGED
|
@@ -68,6 +68,48 @@ class HasPaperTrailModelTest < ActiveSupport::TestCase
|
|
|
68
68
|
end
|
|
69
69
|
end
|
|
70
70
|
|
|
71
|
+
context 'A record with defined "if" and "unless" attributes' do
|
|
72
|
+
setup { @translation = Translation.new :headline => 'Headline' }
|
|
73
|
+
|
|
74
|
+
context 'for non-US translations' do
|
|
75
|
+
setup { @translation.save }
|
|
76
|
+
should_not_change('the number of versions') { Version.count }
|
|
77
|
+
|
|
78
|
+
context 'after update' do
|
|
79
|
+
setup { @translation.update_attributes :content => 'Content' }
|
|
80
|
+
should_not_change('the number of versions') { Version.count }
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
context 'for US translations' do
|
|
85
|
+
setup { @translation.language_code = "US" }
|
|
86
|
+
|
|
87
|
+
context 'that are drafts' do
|
|
88
|
+
setup do
|
|
89
|
+
@translation.type = 'DRAFT'
|
|
90
|
+
@translation.save
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
should_not_change('the number of versions') { Version.count }
|
|
94
|
+
|
|
95
|
+
context 'after update' do
|
|
96
|
+
setup { @translation.update_attributes :content => 'Content' }
|
|
97
|
+
should_not_change('the number of versions') { Version.count }
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
context 'that are not drafts' do
|
|
102
|
+
setup { @translation.save }
|
|
103
|
+
|
|
104
|
+
should_change('the number of versions', :by => 1) { Version.count }
|
|
105
|
+
|
|
106
|
+
context 'after update' do
|
|
107
|
+
setup { @translation.update_attributes :content => 'Content' }
|
|
108
|
+
should_change('the number of versions', :by => 1) { Version.count }
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
71
113
|
|
|
72
114
|
context 'A new record' do
|
|
73
115
|
setup { @widget = Widget.new }
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: paper_trail
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 23
|
|
5
5
|
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 2
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
version: 2.
|
|
8
|
+
- 6
|
|
9
|
+
- 0
|
|
10
|
+
version: 2.6.0
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- Andy Stewart
|
|
@@ -15,7 +15,7 @@ autorequire:
|
|
|
15
15
|
bindir: bin
|
|
16
16
|
cert_chain: []
|
|
17
17
|
|
|
18
|
-
date: 2012-01-
|
|
18
|
+
date: 2012-01-18 00:00:00 +01:00
|
|
19
19
|
default_executable:
|
|
20
20
|
dependencies:
|
|
21
21
|
- !ruby/object:Gem::Dependency
|
|
@@ -138,6 +138,7 @@ files:
|
|
|
138
138
|
- test/dummy/app/models/person.rb
|
|
139
139
|
- test/dummy/app/models/post.rb
|
|
140
140
|
- test/dummy/app/models/song.rb
|
|
141
|
+
- test/dummy/app/models/translation.rb
|
|
141
142
|
- test/dummy/app/models/widget.rb
|
|
142
143
|
- test/dummy/app/models/wotsit.rb
|
|
143
144
|
- test/dummy/app/versions/post_version.rb
|
|
@@ -157,10 +158,8 @@ files:
|
|
|
157
158
|
- test/dummy/config/initializers/session_store.rb
|
|
158
159
|
- test/dummy/config/locales/en.yml
|
|
159
160
|
- test/dummy/config/routes.rb
|
|
160
|
-
- test/dummy/db/development.sqlite3
|
|
161
161
|
- test/dummy/db/migrate/20110208155312_set_up_test_tables.rb
|
|
162
162
|
- test/dummy/db/schema.rb
|
|
163
|
-
- test/dummy/db/test.sqlite3
|
|
164
163
|
- test/dummy/public/404.html
|
|
165
164
|
- test/dummy/public/422.html
|
|
166
165
|
- test/dummy/public/500.html
|
|
@@ -235,6 +234,7 @@ test_files:
|
|
|
235
234
|
- test/dummy/app/models/person.rb
|
|
236
235
|
- test/dummy/app/models/post.rb
|
|
237
236
|
- test/dummy/app/models/song.rb
|
|
237
|
+
- test/dummy/app/models/translation.rb
|
|
238
238
|
- test/dummy/app/models/widget.rb
|
|
239
239
|
- test/dummy/app/models/wotsit.rb
|
|
240
240
|
- test/dummy/app/versions/post_version.rb
|
|
@@ -254,10 +254,8 @@ test_files:
|
|
|
254
254
|
- test/dummy/config/initializers/session_store.rb
|
|
255
255
|
- test/dummy/config/locales/en.yml
|
|
256
256
|
- test/dummy/config/routes.rb
|
|
257
|
-
- test/dummy/db/development.sqlite3
|
|
258
257
|
- test/dummy/db/migrate/20110208155312_set_up_test_tables.rb
|
|
259
258
|
- test/dummy/db/schema.rb
|
|
260
|
-
- test/dummy/db/test.sqlite3
|
|
261
259
|
- test/dummy/public/404.html
|
|
262
260
|
- test/dummy/public/422.html
|
|
263
261
|
- test/dummy/public/500.html
|
|
Binary file
|
data/test/dummy/db/test.sqlite3
DELETED
|
Binary file
|