paper_trail 5.1.1 → 5.2.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.
@@ -65,7 +65,7 @@ module PaperTrail
65
65
  # @api private
66
66
  def each_enabled_association(associations)
67
67
  associations.each do |assoc|
68
- next unless assoc.klass.paper_trail_enabled_for_model?
68
+ next unless assoc.klass.paper_trail.enabled?
69
69
  yield assoc
70
70
  end
71
71
  end
@@ -112,7 +112,7 @@ module PaperTrail
112
112
  collection_keys = through_collection.map { |through_model|
113
113
  through_model.send(assoc.source_reflection.foreign_key)
114
114
  }
115
- version_id_subquery = assoc.klass.paper_trail_version_class.
115
+ version_id_subquery = assoc.klass.paper_trail.version_class.
116
116
  select("MIN(id)").
117
117
  where("item_type = ?", assoc.class_name).
118
118
  where("item_id IN (?)", collection_keys).
@@ -140,7 +140,7 @@ module PaperTrail
140
140
  # from the point in time identified by `transaction_id` or `version_at`.
141
141
  # @api private
142
142
  def load_version_for_habtm(assoc, id, transaction_id, version_at)
143
- assoc.klass.paper_trail_version_class.
143
+ assoc.klass.paper_trail.version_class.
144
144
  where("item_type = ?", assoc.klass.name).
145
145
  where("item_id = ?", id).
146
146
  where("created_at >= ? OR transaction_id = ?", version_at, transaction_id).
@@ -153,8 +153,8 @@ module PaperTrail
153
153
  # record from the point in time identified by `transaction_id` or `version_at`.
154
154
  # @api private
155
155
  def load_version_for_has_one(assoc, model, transaction_id, version_at)
156
- version_table_name = model.class.paper_trail_version_class.table_name
157
- model.class.paper_trail_version_class.joins(:version_associations).
156
+ version_table_name = model.class.paper_trail.version_class.table_name
157
+ model.class.paper_trail.version_class.joins(:version_associations).
158
158
  where("version_associations.foreign_key_name = ?", assoc.foreign_key).
159
159
  where("version_associations.foreign_key_id = ?", model.id).
160
160
  where("#{version_table_name}.item_type = ?", assoc.class_name).
@@ -263,7 +263,7 @@ module PaperTrail
263
263
  if options[:mark_for_destruction]
264
264
  model.send(assoc.name).mark_for_destruction if model.send(assoc.name, true)
265
265
  else
266
- model.appear_as_new_record do
266
+ model.paper_trail.appear_as_new_record do
267
267
  model.send "#{assoc.name}=", nil
268
268
  end
269
269
  end
@@ -276,7 +276,7 @@ module PaperTrail
276
276
  has_and_belongs_to_many: false
277
277
  )
278
278
  )
279
- model.appear_as_new_record do
279
+ model.paper_trail.appear_as_new_record do
280
280
  without_persisting(child) do
281
281
  model.send "#{assoc.name}=", child
282
282
  end
@@ -289,7 +289,7 @@ module PaperTrail
289
289
  associations = model.class.reflect_on_all_associations(:belongs_to)
290
290
  each_enabled_association(associations) do |assoc|
291
291
  collection_key = model.send(assoc.association_foreign_key)
292
- version = assoc.klass.paper_trail_version_class.
292
+ version = assoc.klass.paper_trail.version_class.
293
293
  where("item_type = ?", assoc.class_name).
294
294
  where("item_id = ?", collection_key).
295
295
  where("created_at >= ? OR transaction_id = ?", options[:version_at], transaction_id).
@@ -326,7 +326,7 @@ module PaperTrail
326
326
  # Restore the `model`'s has_many associations not associated through
327
327
  # another association.
328
328
  def reify_has_many_directly(transaction_id, associations, model, options = {})
329
- version_table_name = model.class.paper_trail_version_class.table_name
329
+ version_table_name = model.class.paper_trail.version_class.table_name
330
330
  each_enabled_association(associations) do |assoc|
331
331
  version_id_subquery = PaperTrail::VersionAssociation.
332
332
  joins(model.class.version_association_name).
@@ -366,7 +366,7 @@ module PaperTrail
366
366
 
367
367
  def reify_has_and_belongs_to_many(transaction_id, model, options = {})
368
368
  model.class.reflect_on_all_associations(:has_and_belongs_to_many).each do |assoc|
369
- papertrail_enabled = assoc.klass.paper_trail_enabled_for_model?
369
+ papertrail_enabled = assoc.klass.paper_trail.enabled?
370
370
  next unless
371
371
  model.class.paper_trail_save_join_tables.include?(assoc.name) ||
372
372
  papertrail_enabled
@@ -429,7 +429,7 @@ module PaperTrail
429
429
  #
430
430
  def versions_by_id(klass, version_id_subquery)
431
431
  klass.
432
- paper_trail_version_class.
432
+ paper_trail.version_class.
433
433
  where("id IN (#{version_id_subquery})").
434
434
  inject({}) { |a, e| a.merge!(e.item_id => e) }
435
435
  end
@@ -2,8 +2,8 @@ module PaperTrail
2
2
  # :nodoc:
3
3
  module VERSION
4
4
  MAJOR = 5
5
- MINOR = 1
6
- TINY = 1
5
+ MINOR = 2
6
+ TINY = 0
7
7
  PRE = nil
8
8
 
9
9
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".").freeze
@@ -28,7 +28,7 @@ describe Boolit, type: :model do
28
28
  end
29
29
 
30
30
  it "should still be able to be reified and persisted" do
31
- expect { subject.previous_version.save! }.to_not raise_error
31
+ expect { subject.paper_trail.previous_version.save! }.to_not raise_error
32
32
  end
33
33
 
34
34
  context "with `nil` attributes on the live instance" do
@@ -40,7 +40,7 @@ describe Boolit, type: :model do
40
40
  after { PaperTrail.serializer = PaperTrail::Serializers::YAML }
41
41
 
42
42
  it "should not overwrite that attribute during the reification process" do
43
- expect(subject.previous_version.name).to be_nil
43
+ expect(subject.paper_trail.previous_version.name).to be_nil
44
44
  end
45
45
  end
46
46
  end
@@ -7,12 +7,10 @@ describe Fluxor, type: :model do
7
7
 
8
8
  describe "Methods" do
9
9
  describe "Class" do
10
- subject { Fluxor }
11
-
12
- describe "#paper_trail_enabled_for_model?" do
13
- it { is_expected.to respond_to(:paper_trail_enabled_for_model?) }
14
-
15
- it { expect(subject.paper_trail_enabled_for_model?).to be false }
10
+ describe ".paper_trail.enabled?" do
11
+ it "returns false" do
12
+ expect(Fluxor.paper_trail.enabled?).to eq(false)
13
+ end
16
14
  end
17
15
  end
18
16
  end
@@ -28,10 +28,8 @@ describe Gadget, type: :model do
28
28
  describe '#changed_notably?' do
29
29
  subject { Gadget.new(created_at: Time.now) }
30
30
 
31
- it { expect(subject.private_methods).to include(:changed_notably?) }
32
-
33
31
  context "create events" do
34
- it { expect(subject.send(:changed_notably?)).to be true }
32
+ it { expect(subject.paper_trail.changed_notably?).to be true }
35
33
  end
36
34
 
37
35
  context "update events" do
@@ -40,12 +38,12 @@ describe Gadget, type: :model do
40
38
  context "without update timestamps" do
41
39
  it "should only acknowledge non-ignored attrs" do
42
40
  subject.name = "Wrench"
43
- expect(subject.send(:changed_notably?)).to be true
41
+ expect(subject.paper_trail.changed_notably?).to be true
44
42
  end
45
43
 
46
44
  it "should not acknowledge ignored attr (brand)" do
47
45
  subject.brand = "Acme"
48
- expect(subject.send(:changed_notably?)).to be false
46
+ expect(subject.paper_trail.changed_notably?).to be false
49
47
  end
50
48
  end
51
49
 
@@ -53,13 +51,13 @@ describe Gadget, type: :model do
53
51
  it "should only acknowledge non-ignored attrs" do
54
52
  subject.name = "Wrench"
55
53
  subject.updated_at = Time.now
56
- expect(subject.send(:changed_notably?)).to be true
54
+ expect(subject.paper_trail.changed_notably?).to be true
57
55
  end
58
56
 
59
57
  it "should not acknowledge ignored attrs and timestamps only" do
60
58
  subject.brand = "Acme"
61
59
  subject.updated_at = Time.now
62
- expect(subject.send(:changed_notably?)).to be false
60
+ expect(subject.paper_trail.changed_notably?).to be false
63
61
  end
64
62
  end
65
63
  end
@@ -5,7 +5,7 @@ describe NotOnUpdate, type: :model do
5
5
  let!(:record) { described_class.create! }
6
6
 
7
7
  it "should create a version, regardless" do
8
- expect { record.touch_with_version }.to change {
8
+ expect { record.paper_trail.touch_with_version }.to change {
9
9
  PaperTrail::Version.count
10
10
  }.by(+1)
11
11
  end
@@ -14,7 +14,7 @@ describe NotOnUpdate, type: :model do
14
14
  before = record.updated_at
15
15
  # Travel 1 second because MySQL lacks sub-second resolution
16
16
  Timecop.travel(1) do
17
- record.touch_with_version
17
+ record.paper_trail.touch_with_version
18
18
  end
19
19
  expect(record.updated_at).to be > before
20
20
  end
@@ -10,7 +10,7 @@ describe PostWithStatus, type: :model do
10
10
  it "should stash the enum value properly in versions" do
11
11
  post.published!
12
12
  post.archived!
13
- expect(post.previous_version.published?).to be true
13
+ expect(post.paper_trail.previous_version.published?).to be true
14
14
  end
15
15
 
16
16
  context "storing enum object_changes" do
@@ -64,11 +64,11 @@ describe Widget, type: :model do
64
64
 
65
65
  subject { widget.versions.last.reify }
66
66
 
67
- it { expect(subject).not_to be_live }
67
+ it { expect(subject.paper_trail).not_to be_live }
68
68
 
69
69
  it "should clear the `versions_association_name` virtual attribute" do
70
70
  subject.save!
71
- expect(subject).to be_live
71
+ expect(subject.paper_trail).to be_live
72
72
  end
73
73
 
74
74
  it "corresponding version should use the widget updated_at" do
@@ -140,21 +140,21 @@ describe Widget, type: :model do
140
140
 
141
141
  describe "Methods" do
142
142
  describe "Instance", versioning: true do
143
- describe '#paper_trail_originator' do
144
- it { is_expected.to respond_to(:paper_trail_originator) }
145
-
143
+ describe '#paper_trail.originator' do
146
144
  describe "return value" do
147
145
  let(:orig_name) { FFaker::Name.name }
148
146
  let(:new_name) { FFaker::Name.name }
149
147
  before { PaperTrail.whodunnit = orig_name }
150
148
 
151
149
  context "accessed from live model instance" do
152
- specify { expect(widget).to be_live }
150
+ specify { expect(widget.paper_trail).to be_live }
153
151
 
154
152
  it "should return the originator for the model at a given state" do
155
- expect(widget.paper_trail_originator).to eq(orig_name)
156
- widget.whodunnit(new_name) { |w| w.update_attributes(name: "Elizabeth") }
157
- expect(widget.paper_trail_originator).to eq(new_name)
153
+ expect(widget.paper_trail.originator).to eq(orig_name)
154
+ widget.paper_trail.whodunnit(new_name) { |w|
155
+ w.update_attributes(name: "Elizabeth")
156
+ }
157
+ expect(widget.paper_trail.originator).to eq(new_name)
158
158
  end
159
159
  end
160
160
 
@@ -169,7 +169,7 @@ describe Widget, type: :model do
169
169
  let(:reified_widget) { widget.versions[1].reify }
170
170
 
171
171
  it "should return the appropriate originator" do
172
- expect(reified_widget.paper_trail_originator).to eq(orig_name)
172
+ expect(reified_widget.paper_trail.originator).to eq(orig_name)
173
173
  end
174
174
 
175
175
  it "should not create a new model instance" do
@@ -181,7 +181,7 @@ describe Widget, type: :model do
181
181
  let(:reified_widget) { widget.versions[1].reify(dup: true) }
182
182
 
183
183
  it "should return the appropriate originator" do
184
- expect(reified_widget.paper_trail_originator).to eq(orig_name)
184
+ expect(reified_widget.paper_trail.originator).to eq(orig_name)
185
185
  end
186
186
 
187
187
  it "should not create a new model instance" do
@@ -192,35 +192,12 @@ describe Widget, type: :model do
192
192
  end
193
193
  end
194
194
 
195
- describe "#originator" do
196
- subject { widget }
197
-
198
- it { is_expected.to respond_to(:originator) }
199
-
200
- it "should set the invoke `paper_trail_originator`" do
201
- allow(::ActiveSupport::Deprecation).to receive(:warn)
202
- is_expected.to receive(:paper_trail_originator)
203
- subject.originator
204
- end
205
-
206
- it "should display a deprecation warning" do
207
- expect(::ActiveSupport::Deprecation).to receive(:warn).
208
- with(/Use paper_trail_originator instead of originator/)
209
- subject.originator
210
- end
211
- end
212
-
213
195
  describe '#version_at' do
214
- it { is_expected.to respond_to(:version_at) }
215
-
216
196
  context "Timestamp argument is AFTER object has been destroyed" do
217
- before do
197
+ it "should return `nil`" do
218
198
  widget.update_attribute(:name, "foobar")
219
199
  widget.destroy
220
- end
221
-
222
- it "should return `nil`" do
223
- expect(widget.version_at(Time.now)).to be_nil
200
+ expect(widget.paper_trail.version_at(Time.now)).to be_nil
224
201
  end
225
202
  end
226
203
  end
@@ -231,7 +208,7 @@ describe Widget, type: :model do
231
208
  context "no block given" do
232
209
  it "should raise an error" do
233
210
  expect {
234
- widget.whodunnit("Ben")
211
+ widget.paper_trail.whodunnit("Ben")
235
212
  }.to raise_error(ArgumentError, "expected to receive a block")
236
213
  end
237
214
  end
@@ -246,7 +223,7 @@ describe Widget, type: :model do
246
223
  end
247
224
 
248
225
  it "should modify value of `PaperTrail.whodunnit` while executing the block" do
249
- widget.whodunnit(new_name) do
226
+ widget.paper_trail.whodunnit(new_name) do
250
227
  expect(PaperTrail.whodunnit).to eq(new_name)
251
228
  widget.update_attributes(name: "Elizabeth")
252
229
  end
@@ -255,7 +232,9 @@ describe Widget, type: :model do
255
232
 
256
233
  context "after executing the block" do
257
234
  it "reverts value of whodunnit to previous value" do
258
- widget.whodunnit(new_name) { |w| w.update_attributes(name: "Elizabeth") }
235
+ widget.paper_trail.whodunnit(new_name) { |w|
236
+ w.update_attributes(name: "Elizabeth")
237
+ }
259
238
  expect(PaperTrail.whodunnit).to eq(orig_name)
260
239
  end
261
240
  end
@@ -263,7 +242,7 @@ describe Widget, type: :model do
263
242
  context "error within block" do
264
243
  it "still reverts the whodunnit value to previous value" do
265
244
  expect {
266
- widget.whodunnit(new_name) { raise }
245
+ widget.paper_trail.whodunnit(new_name) { raise }
267
246
  }.to raise_error(RuntimeError)
268
247
  expect(PaperTrail.whodunnit).to eq(orig_name)
269
248
  end
@@ -272,13 +251,11 @@ describe Widget, type: :model do
272
251
  end
273
252
 
274
253
  describe '#touch_with_version' do
275
- it { is_expected.to respond_to(:touch_with_version) }
276
-
277
254
  it "creates a version" do
278
255
  count = widget.versions.size
279
256
  # Travel 1 second because MySQL lacks sub-second resolution
280
257
  Timecop.travel(1) do
281
- widget.touch_with_version
258
+ widget.paper_trail.touch_with_version
282
259
  end
283
260
  expect(widget.versions.size).to eq(count + 1)
284
261
  end
@@ -287,7 +264,7 @@ describe Widget, type: :model do
287
264
  time_was = widget.updated_at
288
265
  # Travel 1 second because MySQL lacks sub-second resolution
289
266
  Timecop.travel(1) do
290
- widget.touch_with_version
267
+ widget.paper_trail.touch_with_version
291
268
  end
292
269
  expect(widget.updated_at).to be > time_was
293
270
  end
@@ -295,33 +272,26 @@ describe Widget, type: :model do
295
272
  end
296
273
 
297
274
  describe "Class" do
298
- subject { Widget }
299
-
300
- describe "#paper_trail_enabled_for_model?" do
301
- it { is_expected.to respond_to(:paper_trail_enabled_for_model?) }
302
-
303
- it { expect(subject.paper_trail_enabled_for_model?).to be true }
275
+ describe ".paper_trail.enabled?" do
276
+ it "returns true" do
277
+ expect(Widget.paper_trail.enabled?).to eq(true)
278
+ end
304
279
  end
305
280
 
306
- describe '#paper_trail_off!' do
307
- it { is_expected.to respond_to(:paper_trail_off!) }
308
-
309
- it "should set the `paper_trail_enabled_for_model?` to `false`" do
310
- expect(subject.paper_trail_enabled_for_model?).to be true
311
- subject.paper_trail_off!
312
- expect(subject.paper_trail_enabled_for_model?).to be false
281
+ describe ".disable" do
282
+ it "should set the `paper_trail.enabled?` to `false`" do
283
+ expect(Widget.paper_trail.enabled?).to eq(true)
284
+ Widget.paper_trail.disable
285
+ expect(Widget.paper_trail.enabled?).to eq(false)
313
286
  end
314
287
  end
315
288
 
316
- describe '#paper_trail_on!' do
317
- before { subject.paper_trail_off! }
318
-
319
- it { is_expected.to respond_to(:paper_trail_on!) }
320
-
321
- it "should set the `paper_trail_enabled_for_model?` to `true`" do
322
- expect(subject.paper_trail_enabled_for_model?).to be false
323
- subject.paper_trail_on!
324
- expect(subject.paper_trail_enabled_for_model?).to be true
289
+ describe ".enable" do
290
+ it "should set the `paper_trail.enabled?` to `true`" do
291
+ Widget.paper_trail.disable
292
+ expect(Widget.paper_trail.enabled?).to eq(false)
293
+ Widget.paper_trail.enable
294
+ expect(Widget.paper_trail.enabled?).to eq(true)
325
295
  end
326
296
  end
327
297
  end
@@ -17,27 +17,27 @@ end
17
17
 
18
18
  class BeforeDestroyModifier < CallbackModifier
19
19
  has_paper_trail on: []
20
- paper_trail_on_destroy :before
20
+ paper_trail.on_destroy :before
21
21
  end
22
22
 
23
23
  class AfterDestroyModifier < CallbackModifier
24
24
  has_paper_trail on: []
25
- paper_trail_on_destroy :after
25
+ paper_trail.on_destroy :after
26
26
  end
27
27
 
28
28
  class NoArgDestroyModifier < CallbackModifier
29
29
  has_paper_trail on: []
30
- paper_trail_on_destroy
30
+ paper_trail.on_destroy
31
31
  end
32
32
 
33
33
  class UpdateModifier < CallbackModifier
34
34
  has_paper_trail on: []
35
- paper_trail_on_update
35
+ paper_trail.on_update
36
36
  end
37
37
 
38
38
  class CreateModifier < CallbackModifier
39
39
  has_paper_trail on: []
40
- paper_trail_on_create
40
+ paper_trail.on_create
41
41
  end
42
42
 
43
43
  class DefaultModifier < CallbackModifier
@@ -1,3 +1,3 @@
1
1
  class Elephant < Animal
2
- paper_trail_off!
2
+ paper_trail.disable
3
3
  end