paper_trail 10.2.1 → 10.3.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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a8f2b70e39db7aa92c0afb1c521ae2b04aafb9e7ad3194d4f57badfbcd49efc
|
4
|
+
data.tar.gz: d021657cedcbd22cc3aab62a361d9608939dd11ff8a8cd97960d45f568b2ce52
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eae7bdfbe1be55038dd29c66700bb953d40db2f628c0c51d454ffb362999e5b29a74cbad15fefa81e95e5b8a407fcfd059ed371427d49130f79952648fa422ba
|
7
|
+
data.tar.gz: 85f8d1f8b951b9f52eb231e4a95ae152aa1441604c2bb768bd75ccf8ab8bc057c7d5bda5bfb5ce5c52f4b5b0209dbec1dafc219933f5b9aa920598397e4e4ee8
|
@@ -11,7 +11,7 @@ class CreateVersions < ActiveRecord::Migration<%= migration_version %>
|
|
11
11
|
def change
|
12
12
|
create_table :versions<%= versions_table_options %> do |t|
|
13
13
|
t.string :item_type<%= item_type_options %>
|
14
|
-
t.integer :item_id, null: false
|
14
|
+
t.integer :item_id, null: false, limit: 8
|
15
15
|
t.string :event, null: false
|
16
16
|
t.string :whodunnit
|
17
17
|
t.text :object, limit: TEXT_BYTES
|
@@ -18,6 +18,11 @@ 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
|
+
E_MODEL_LIMIT_REQUIRES_ITEM_SUBTYPE = <<~STR.squish.freeze
|
22
|
+
To use PaperTrail's per-model limit in your %s model, you must have an
|
23
|
+
item_subtype column in your versions table. See documentation sections
|
24
|
+
2.e.1 Per-model limit, and 4.b.1 The optional item_subtype column.
|
25
|
+
STR
|
21
26
|
DPR_PASSING_ASSOC_NAME_DIRECTLY_TO_VERSIONS_OPTION = <<~STR.squish
|
22
27
|
Passing versions association name as `has_paper_trail versions: %{versions_name}`
|
23
28
|
is deprecated. Use `has_paper_trail versions: {name: %{versions_name}}` instead.
|
@@ -112,6 +117,7 @@ module PaperTrail
|
|
112
117
|
@model_class.send :include, ::PaperTrail::Model::InstanceMethods
|
113
118
|
setup_options(options)
|
114
119
|
setup_associations(options)
|
120
|
+
check_presence_of_item_subtype_column(options)
|
115
121
|
@model_class.after_rollback { paper_trail.clear_rolled_back_versions }
|
116
122
|
setup_callbacks_from_options options[:on]
|
117
123
|
end
|
@@ -139,6 +145,16 @@ module PaperTrail
|
|
139
145
|
::ActiveRecord::Base.belongs_to_required_by_default
|
140
146
|
end
|
141
147
|
|
148
|
+
# Some options require the presence of the `item_subtype` column. Currently
|
149
|
+
# only `limit`, but in the future there may be others.
|
150
|
+
#
|
151
|
+
# @api private
|
152
|
+
def check_presence_of_item_subtype_column(options)
|
153
|
+
return unless options.key?(:limit)
|
154
|
+
return if version_class.item_subtype_column_present?
|
155
|
+
raise format(E_MODEL_LIMIT_REQUIRES_ITEM_SUBTYPE, @model_class.name)
|
156
|
+
end
|
157
|
+
|
142
158
|
def check_version_class_name(options)
|
143
159
|
# @api private - `version_class_name`
|
144
160
|
@model_class.class_attribute :version_class_name
|
data/lib/paper_trail/reifier.rb
CHANGED
@@ -120,6 +120,7 @@ module PaperTrail
|
|
120
120
|
# this method returns the constant `Animal`. You can see this particular
|
121
121
|
# example in action in `spec/models/animal_spec.rb`.
|
122
122
|
#
|
123
|
+
# TODO: Duplication: similar `constantize` in VersionConcern#version_limit
|
123
124
|
def version_reification_class(version, attrs)
|
124
125
|
inheritance_column_name = version.item_type.constantize.inheritance_column
|
125
126
|
inher_col_value = attrs[inheritance_column_name]
|
@@ -25,6 +25,10 @@ module PaperTrail
|
|
25
25
|
|
26
26
|
# :nodoc:
|
27
27
|
module ClassMethods
|
28
|
+
def item_subtype_column_present?
|
29
|
+
column_names.include?("item_subtype")
|
30
|
+
end
|
31
|
+
|
28
32
|
def with_item_keys(item_type, item_id)
|
29
33
|
where item_type: item_type, item_id: item_id
|
30
34
|
end
|
@@ -329,7 +333,7 @@ module PaperTrail
|
|
329
333
|
# Enforces the `version_limit`, if set. Default: no limit.
|
330
334
|
# @api private
|
331
335
|
def enforce_version_limit!
|
332
|
-
limit =
|
336
|
+
limit = version_limit
|
333
337
|
return unless limit.is_a? Numeric
|
334
338
|
previous_versions = sibling_versions.not_creates.
|
335
339
|
order(self.class.timestamp_sort_order("asc"))
|
@@ -337,5 +341,21 @@ module PaperTrail
|
|
337
341
|
excess_versions = previous_versions - previous_versions.last(limit)
|
338
342
|
excess_versions.map(&:destroy)
|
339
343
|
end
|
344
|
+
|
345
|
+
# See docs section 2.e. Limiting the Number of Versions Created.
|
346
|
+
# The version limit can be global or per-model.
|
347
|
+
#
|
348
|
+
# @api private
|
349
|
+
#
|
350
|
+
# TODO: Duplication: similar `constantize` in Reifier#version_reification_class
|
351
|
+
def version_limit
|
352
|
+
if self.class.item_subtype_column_present?
|
353
|
+
klass = (item_subtype || item_type).constantize
|
354
|
+
if klass&.paper_trail_options&.key?(:limit)
|
355
|
+
return klass.paper_trail_options[:limit]
|
356
|
+
end
|
357
|
+
end
|
358
|
+
PaperTrail.config.version_limit
|
359
|
+
end
|
340
360
|
end
|
341
361
|
end
|
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.
|
4
|
+
version: 10.3.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: 2019-
|
13
|
+
date: 2019-04-09 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|