paper_trail 15.2.0 → 16.0.0

Sign up to get free protection for your applications and to get access to all the features.
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.