paper_trail 15.2.0 → 16.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0972b7805c1dea218a2eb15d46e68c76650fe4d8752e00a64080c38360544ede'
4
- data.tar.gz: f242c006d46c1af35e67dcbf667458356372fba3d90238d56d29989f257f5f34
3
+ metadata.gz: 0a834abeee917bf2c090c6ef7f6da09437b12aff37c0bcf94f8ff88ca1434203
4
+ data.tar.gz: 6fdf12293b452fe7dcce563e5f4547d9ae0081399b5cf6885308ea451f29b6ed
5
5
  SHA512:
6
- metadata.gz: 91e251f425f7389ffdd39e7793f6665f53dec8f1f967f0befbd00df0fd2aef423f7c074520b4f5f4410c3bfbca1f1c0beb2afe61c6d19825e1818209d36e8c45
7
- data.tar.gz: f2eeac74231a4b51fd2e0b699c2591e0b3de1aad6f8d96bd8863375b37c78d96f6ca6161d7e552a856ee92821380d3f457f111322a686254a964117c908bf5b0
6
+ metadata.gz: 82fbf4c2ec002d52ee5b4023cbef6a16ef5530e04852a4a3d65fb38b468395016db6230e2f89c199a13549bb9da98a1f53a2b29148a94455bc6470ea7912dcaf
7
+ data.tar.gz: 9944b2f2e66c9fdc10fe2ecf6f9c560b73da21e49d98504f826158e92faeef5b9cad7a4a1cb1f033217c1f66e230d4c8e2df034c4751298a93df5bf946ef108e
@@ -18,7 +18,7 @@ module PaperTrail
18
18
  # versions.
19
19
  module Compatibility
20
20
  ACTIVERECORD_GTE = ">= 6.1" # enforced in gemspec
21
- ACTIVERECORD_LT = "< 7.3" # not enforced in gemspec
21
+ ACTIVERECORD_LT = "< 8.1" # not enforced in gemspec
22
22
 
23
23
  E_INCOMPATIBLE_AR = <<-EOS
24
24
  PaperTrail %s is not compatible with ActiveRecord %s. We allow PT
@@ -14,7 +14,8 @@ module PaperTrail
14
14
  :object_changes_adapter,
15
15
  :serializer,
16
16
  :version_limit,
17
- :has_paper_trail_defaults
17
+ :has_paper_trail_defaults,
18
+ :version_error_behavior
18
19
  )
19
20
 
20
21
  def initialize
@@ -25,6 +26,7 @@ module PaperTrail
25
26
  # Variables which affect all threads, whose access is *not* synchronized.
26
27
  @serializer = PaperTrail::Serializers::YAML
27
28
  @has_paper_trail_defaults = {}
29
+ @version_error_behavior = :legacy
28
30
  end
29
31
 
30
32
  # Indicates whether PaperTrail is on or off. Default: true.
@@ -68,6 +68,8 @@ module PaperTrail
68
68
  #
69
69
  # @api public
70
70
  def has_paper_trail(options = {})
71
+ raise Error, "has_paper_trail must be called only once" if self < InstanceMethods
72
+
71
73
  defaults = PaperTrail.config.has_paper_trail_defaults
72
74
  paper_trail.setup(defaults.merge(options))
73
75
  end
@@ -64,6 +64,8 @@ module PaperTrail
64
64
  # of versions_assoc.build?, the association cache is unaware. So, we
65
65
  # invalidate the `versions` association cache with `reset`.
66
66
  versions.reset
67
+ rescue StandardError => e
68
+ handle_version_errors e, version, :create
67
69
  end
68
70
  end
69
71
 
@@ -81,12 +83,13 @@ module PaperTrail
81
83
  # `data_for_destroy` but PT-AT still does.
82
84
  data = event.data.merge(data_for_destroy)
83
85
 
84
- version = @record.class.paper_trail.version_class.create(data)
85
- if version.errors.any?
86
- log_version_errors(version, :destroy)
87
- else
86
+ version = @record.class.paper_trail.version_class.new(data)
87
+ begin
88
+ version.save!
88
89
  assign_and_reset_version_association(version)
89
90
  version
91
+ rescue StandardError => e
92
+ handle_version_errors e, version, :destroy
90
93
  end
91
94
  end
92
95
 
@@ -108,14 +111,15 @@ module PaperTrail
108
111
  )
109
112
  return unless version
110
113
 
111
- if version.save
114
+ begin
115
+ version.save!
112
116
  # Because the version object was created using version_class.new instead
113
117
  # of versions_assoc.build?, the association cache is unaware. So, we
114
118
  # invalidate the `versions` association cache with `reset`.
115
119
  versions.reset
116
120
  version
117
- else
118
- log_version_errors(version, :update)
121
+ rescue StandardError => e
122
+ handle_version_errors e, version, :update
119
123
  end
120
124
  end
121
125
 
@@ -286,6 +290,26 @@ module PaperTrail
286
290
  )
287
291
  end
288
292
 
293
+ # Centralized handler for version errors
294
+ # @api private
295
+ def handle_version_errors(e, version, action)
296
+ case PaperTrail.config.version_error_behavior
297
+ when :legacy
298
+ # legacy behavior was to raise on create and log on update/delete
299
+ if action == :create
300
+ raise e
301
+ else
302
+ log_version_errors(version, action)
303
+ end
304
+ when :log
305
+ log_version_errors(version, action)
306
+ when :exception
307
+ raise e
308
+ when :silent
309
+ # noop
310
+ end
311
+ end
312
+
289
313
  # @api private
290
314
  # @return - The created version object, so that plugins can use it, e.g.
291
315
  # paper_trail-association_tracking
@@ -298,11 +322,12 @@ module PaperTrail
298
322
  data.merge!(data_for_update_columns)
299
323
 
300
324
  versions_assoc = @record.send(@record.class.versions_association_name)
301
- version = versions_assoc.create(data)
302
- if version.errors.any?
303
- log_version_errors(version, :update)
304
- else
325
+ version = versions_assoc.new(data)
326
+ begin
327
+ version.save!
305
328
  version
329
+ rescue StandardError => e
330
+ handle_version_errors e, version, :update
306
331
  end
307
332
  end
308
333
 
@@ -7,8 +7,8 @@ module PaperTrail
7
7
  # because of this confusion, but it's not worth the breaking change.
8
8
  # People are encouraged to use `PaperTrail.gem_version` instead.
9
9
  module VERSION
10
- MAJOR = 15
11
- MINOR = 2
10
+ MAJOR = 16
11
+ MINOR = 0
12
12
  TINY = 0
13
13
 
14
14
  # Set PRE to nil unless it's a pre-release (beta, rc, etc.)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paper_trail
3
3
  version: !ruby/object:Gem::Version
4
- version: 15.2.0
4
+ version: 16.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Stewart
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2024-09-08 00:00:00.000000000 Z
13
+ date: 2024-11-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord
@@ -368,7 +368,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
368
368
  - !ruby/object:Gem::Version
369
369
  version: 1.3.6
370
370
  requirements: []
371
- rubygems_version: 3.3.7
371
+ rubygems_version: 3.4.19
372
372
  signing_key:
373
373
  specification_version: 4
374
374
  summary: Track changes to your models.