paper_trail 10.0.1 → 10.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/generators/paper_trail/install/install_generator.rb +0 -1
- data/lib/generators/paper_trail/install_generator.rb +1 -2
- data/lib/paper_trail/config.rb +4 -2
- data/lib/paper_trail/has_paper_trail.rb +19 -14
- data/lib/paper_trail/model_config.rb +74 -23
- data/lib/paper_trail/type_serializers/postgres_array_serializer.rb +1 -2
- data/lib/paper_trail/version_number.rb +2 -2
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ac357832683a239eb259f30fea0d05701ddd634f
|
4
|
+
data.tar.gz: 1745e41be7c599090c4fd947822a30a6ad18b6ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: efa1906f7569fd7cb9eab56ad5d70daed5739714cd52197e97e2057cdb311b3016c3b36c3b4992c1cb75cc26ede53e42b481424fedc4fc40f47adc3902c7f772
|
7
|
+
data.tar.gz: b4e4976c7273d397ea6a657debd40b4aa4354bce68b59c7e70bb28cf928e46c210d4085e44314d3aa8b3d8889fb46762375987bf904a989751d732056f54b592
|
@@ -22,7 +22,6 @@ module PaperTrail
|
|
22
22
|
)
|
23
23
|
|
24
24
|
desc "Generates (but does not run) a migration to add a versions table." \
|
25
|
-
" Also generates an initializer file for configuring PaperTrail." \
|
26
25
|
" See section 5.c. Generators in README.md for more information."
|
27
26
|
|
28
27
|
def create_migration_file
|
@@ -24,8 +24,7 @@ module PaperTrail
|
|
24
24
|
desc: "Store changeset (diff) with each version"
|
25
25
|
)
|
26
26
|
|
27
|
-
desc "Generates (but does not run) a migration to add a versions table."
|
28
|
-
" Also generates an initializer file for configuring PaperTrail"
|
27
|
+
desc "Generates (but does not run) a migration to add a versions table."
|
29
28
|
|
30
29
|
def create_migration_file
|
31
30
|
add_paper_trail_migration("create_versions")
|
data/lib/paper_trail/config.rb
CHANGED
@@ -10,7 +10,7 @@ module PaperTrail
|
|
10
10
|
include Singleton
|
11
11
|
|
12
12
|
E_PT_AT_REMOVED = <<-EOS.squish
|
13
|
-
Association Tracking for PaperTrail has been extracted to a
|
13
|
+
Association Tracking for PaperTrail has been extracted to a separate gem.
|
14
14
|
To use it, please add `paper_trail-association_tracking` to your Gemfile.
|
15
15
|
If you don't use it (most people don't, that's the default) and you set
|
16
16
|
`track_associations = false` somewhere (probably a rails initializer) you
|
@@ -21,7 +21,8 @@ module PaperTrail
|
|
21
21
|
:association_reify_error_behaviour,
|
22
22
|
:object_changes_adapter,
|
23
23
|
:serializer,
|
24
|
-
:version_limit
|
24
|
+
:version_limit,
|
25
|
+
:has_paper_trail_defaults
|
25
26
|
)
|
26
27
|
|
27
28
|
def initialize
|
@@ -31,6 +32,7 @@ module PaperTrail
|
|
31
32
|
|
32
33
|
# Variables which affect all threads, whose access is *not* synchronized.
|
33
34
|
@serializer = PaperTrail::Serializers::YAML
|
35
|
+
@has_paper_trail_defaults = {}
|
34
36
|
end
|
35
37
|
|
36
38
|
# Indicates whether PaperTrail is on or off. Default: true.
|
@@ -23,18 +23,18 @@ module PaperTrail
|
|
23
23
|
# Options:
|
24
24
|
#
|
25
25
|
# - :on - The events to track (optional; defaults to all of them). Set
|
26
|
-
# to an array of `:create`, `:update`, `:destroy` as desired.
|
27
|
-
# - :class_name - The name of a custom Version class
|
28
|
-
#
|
26
|
+
# to an array of `:create`, `:update`, `:destroy` and `:touch` as desired.
|
27
|
+
# - :class_name (deprecated) - The name of a custom Version class that
|
28
|
+
# includes `PaperTrail::VersionConcern`.
|
29
29
|
# - :ignore - An array of attributes for which a new `Version` will not be
|
30
|
-
# created if only they change. It can also
|
30
|
+
# created if only they change. It can also accept a Hash as an
|
31
31
|
# argument where the key is the attribute to ignore (a `String` or
|
32
32
|
# `Symbol`), which will only be ignored if the value is a `Proc` which
|
33
33
|
# returns truthily.
|
34
34
|
# - :if, :unless - Procs that allow to specify conditions when to save
|
35
35
|
# versions for an object.
|
36
36
|
# - :only - Inverse of `ignore`. A new `Version` will be created only
|
37
|
-
# for these attributes if supplied it can also
|
37
|
+
# for these attributes if supplied it can also accept a Hash as an
|
38
38
|
# argument where the key is the attribute to track (a `String` or
|
39
39
|
# `Symbol`), which will only be counted if the value is a `Proc` which
|
40
40
|
# returns truthily.
|
@@ -47,20 +47,25 @@ module PaperTrail
|
|
47
47
|
# are called with `self`, i.e. the model with the paper trail). See
|
48
48
|
# `PaperTrail::Controller.info_for_paper_trail` for how to store data
|
49
49
|
# from the controller.
|
50
|
-
# - :versions -
|
51
|
-
#
|
50
|
+
# - :versions - Either,
|
51
|
+
# - A String (deprecated) - The name to use for the versions
|
52
|
+
# association. Default is `:versions`.
|
53
|
+
# - A Hash - options passed to `has_many`, plus `name:` and `scope:`.
|
52
54
|
# - :version - The name to use for the method which returns the version
|
53
55
|
# the instance was reified from. Default is `:version`.
|
54
|
-
#
|
55
|
-
#
|
56
|
-
#
|
57
|
-
#
|
58
|
-
#
|
59
|
-
#
|
56
|
+
#
|
57
|
+
# Plugins like the experimental `paper_trail-association_tracking` gem
|
58
|
+
# may accept additional options.
|
59
|
+
#
|
60
|
+
# You can define a default set of options via the configurable
|
61
|
+
# `PaperTrail.config.has_paper_trail_defaults` hash in your applications
|
62
|
+
# initializer. The hash can contain any of the following options and will
|
63
|
+
# provide an overridable default for all models.
|
60
64
|
#
|
61
65
|
# @api public
|
62
66
|
def has_paper_trail(options = {})
|
63
|
-
|
67
|
+
defaults = PaperTrail.config.has_paper_trail_defaults
|
68
|
+
paper_trail.setup(defaults.merge(options))
|
64
69
|
end
|
65
70
|
|
66
71
|
# @api public
|
@@ -18,6 +18,16 @@ module PaperTrail
|
|
18
18
|
`abstract_class`. This is fine, but all application models must be
|
19
19
|
configured to use concrete (not abstract) version models.
|
20
20
|
STR
|
21
|
+
DPR_PASSING_ASSOC_NAME_DIRECTLY_TO_VERSIONS_OPTION = <<~STR.squish
|
22
|
+
Passing versions association name as `has_paper_trail versions: %{versions_name}`
|
23
|
+
is deprecated. Use `has_paper_trail versions: {name: %{versions_name}}` instead.
|
24
|
+
The hash you pass to `versions:` is now passed directly to `has_many`.
|
25
|
+
STR
|
26
|
+
DPR_CLASS_NAME_OPTION = <<~STR.squish
|
27
|
+
Passing Version class name as `has_paper_trail class_name: %{class_name}`
|
28
|
+
is deprecated. Use `has_paper_trail versions: {class_name: %{class_name}}`
|
29
|
+
instead. The hash you pass to `versions:` is now passed directly to `has_many`.
|
30
|
+
STR
|
21
31
|
|
22
32
|
def initialize(model_class)
|
23
33
|
@model_class = model_class
|
@@ -129,6 +139,65 @@ module PaperTrail
|
|
129
139
|
::ActiveRecord::Base.belongs_to_required_by_default
|
130
140
|
end
|
131
141
|
|
142
|
+
def check_version_class_name(options)
|
143
|
+
# @api private - `version_class_name`
|
144
|
+
@model_class.class_attribute :version_class_name
|
145
|
+
if options[:class_name]
|
146
|
+
::ActiveSupport::Deprecation.warn(
|
147
|
+
format(
|
148
|
+
DPR_CLASS_NAME_OPTION,
|
149
|
+
class_name: options[:class_name].inspect
|
150
|
+
),
|
151
|
+
caller(1)
|
152
|
+
)
|
153
|
+
options[:versions][:class_name] = options[:class_name]
|
154
|
+
end
|
155
|
+
@model_class.version_class_name = options[:versions][:class_name] || "PaperTrail::Version"
|
156
|
+
assert_concrete_activerecord_class(@model_class.version_class_name)
|
157
|
+
end
|
158
|
+
|
159
|
+
def check_versions_association_name(options)
|
160
|
+
# @api private - versions_association_name
|
161
|
+
@model_class.class_attribute :versions_association_name
|
162
|
+
@model_class.versions_association_name = options[:versions][:name] || :versions
|
163
|
+
end
|
164
|
+
|
165
|
+
def define_has_many_versions(options)
|
166
|
+
options = ensure_versions_option_is_hash(options)
|
167
|
+
check_version_class_name(options)
|
168
|
+
check_versions_association_name(options)
|
169
|
+
scope = get_versions_scope(options)
|
170
|
+
@model_class.has_many(
|
171
|
+
@model_class.versions_association_name,
|
172
|
+
scope,
|
173
|
+
class_name: @model_class.version_class_name,
|
174
|
+
as: :item,
|
175
|
+
**options[:versions].except(:name, :scope)
|
176
|
+
)
|
177
|
+
end
|
178
|
+
|
179
|
+
def ensure_versions_option_is_hash(options)
|
180
|
+
unless options[:versions].is_a?(Hash)
|
181
|
+
if options[:versions]
|
182
|
+
::ActiveSupport::Deprecation.warn(
|
183
|
+
format(
|
184
|
+
DPR_PASSING_ASSOC_NAME_DIRECTLY_TO_VERSIONS_OPTION,
|
185
|
+
versions_name: options[:versions].inspect
|
186
|
+
),
|
187
|
+
caller(1)
|
188
|
+
)
|
189
|
+
end
|
190
|
+
options[:versions] = {
|
191
|
+
name: options[:versions]
|
192
|
+
}
|
193
|
+
end
|
194
|
+
options
|
195
|
+
end
|
196
|
+
|
197
|
+
def get_versions_scope(options)
|
198
|
+
options[:versions][:scope] || -> { order(model.timestamp_sort_order) }
|
199
|
+
end
|
200
|
+
|
132
201
|
def setup_associations(options)
|
133
202
|
# @api private - version_association_name
|
134
203
|
@model_class.class_attribute :version_association_name
|
@@ -138,29 +207,10 @@ module PaperTrail
|
|
138
207
|
# @api public
|
139
208
|
@model_class.send :attr_accessor, @model_class.version_association_name
|
140
209
|
|
141
|
-
# @api private - `version_class_name` - However, `rails_admin` has been
|
142
|
-
# using it since 2014 (see `rails_admin/extensions/paper_trail/auditing_adapter.rb`,
|
143
|
-
# https://github.com/sferik/rails_admin/commit/959e1bd4e47e0369d264b58bbbe972ff863767cd)
|
144
|
-
# In PR _____ () we ask them to use `paper_trail_options` instead.
|
145
|
-
@model_class.class_attribute :version_class_name
|
146
|
-
@model_class.version_class_name = options[:class_name] || "PaperTrail::Version"
|
147
|
-
|
148
|
-
# @api private - versions_association_name
|
149
|
-
@model_class.class_attribute :versions_association_name
|
150
|
-
@model_class.versions_association_name = options[:versions] || :versions
|
151
|
-
|
152
210
|
# @api public - paper_trail_event
|
153
211
|
@model_class.send :attr_accessor, :paper_trail_event
|
154
212
|
|
155
|
-
|
156
|
-
|
157
|
-
# @api public
|
158
|
-
@model_class.has_many(
|
159
|
-
@model_class.versions_association_name,
|
160
|
-
-> { order(model.timestamp_sort_order) },
|
161
|
-
class_name: @model_class.version_class_name,
|
162
|
-
as: :item
|
163
|
-
)
|
213
|
+
define_has_many_versions(options)
|
164
214
|
end
|
165
215
|
|
166
216
|
def setup_callbacks_from_options(options_on = [])
|
@@ -170,9 +220,10 @@ module PaperTrail
|
|
170
220
|
end
|
171
221
|
|
172
222
|
def setup_options(options)
|
173
|
-
# @api public - paper_trail_options - Let's encourage plugins to use
|
174
|
-
#
|
175
|
-
# because the former is documented and the latter is
|
223
|
+
# @api public - paper_trail_options - Let's encourage plugins to use eg.
|
224
|
+
# `paper_trail_options[:versions][:class_name]` rather than
|
225
|
+
# `version_class_name` because the former is documented and the latter is
|
226
|
+
# not.
|
176
227
|
@model_class.class_attribute :paper_trail_options
|
177
228
|
@model_class.paper_trail_options = options.dup
|
178
229
|
|
@@ -29,8 +29,7 @@ module PaperTrail
|
|
29
29
|
private
|
30
30
|
|
31
31
|
def active_record_pre_502?
|
32
|
-
::ActiveRecord
|
33
|
-
(::ActiveRecord::VERSION::MINOR.zero? && ::ActiveRecord::VERSION::TINY < 2)
|
32
|
+
::ActiveRecord.gem_version < Gem::Version.new("5.0.2")
|
34
33
|
end
|
35
34
|
|
36
35
|
def serialize_with_ar(array)
|
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: 10.0
|
4
|
+
version: 10.1.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: 2018-
|
13
|
+
date: 2018-12-04 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '4.2'
|
22
22
|
- - "<"
|
23
23
|
- !ruby/object:Gem::Version
|
24
|
-
version: '
|
24
|
+
version: '6.0'
|
25
25
|
type: :runtime
|
26
26
|
prerelease: false
|
27
27
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
version: '4.2'
|
32
32
|
- - "<"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
34
|
+
version: '6.0'
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: request_store
|
37
37
|
requirement: !ruby/object:Gem::Requirement
|
@@ -285,7 +285,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
285
285
|
version: 1.3.6
|
286
286
|
requirements: []
|
287
287
|
rubyforge_project:
|
288
|
-
rubygems_version: 2.
|
288
|
+
rubygems_version: 2.6.14.3
|
289
289
|
signing_key:
|
290
290
|
specification_version: 4
|
291
291
|
summary: Track changes to your models.
|