paper_trail 12.1.0 → 13.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 +4 -4
- data/lib/generators/paper_trail/install/install_generator.rb +15 -3
- data/lib/generators/paper_trail/install/templates/create_versions.rb.erb +4 -2
- data/lib/paper_trail/attribute_serializers/cast_attribute_serializer.rb +6 -0
- data/lib/paper_trail/compatibility.rb +2 -2
- data/lib/paper_trail/events/base.rb +34 -19
- data/lib/paper_trail/events/update.rb +23 -4
- data/lib/paper_trail/model_config.rb +26 -18
- data/lib/paper_trail/record_trail.rb +5 -3
- data/lib/paper_trail/serializers/yaml.rb +21 -3
- data/lib/paper_trail/version_concern.rb +16 -6
- data/lib/paper_trail/version_number.rb +2 -2
- data/lib/paper_trail.rb +2 -0
- metadata +27 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 776e912c4a06b036014b0301b30a1438974c00b8e63b6e0b78fbffe4dfca7824
|
4
|
+
data.tar.gz: 691060404fbb2b4a3f66cf40c0b6187df7a9e8439854097ffbad433a7bdd6e75
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7110ad57841a431cb50318a79db55ba65f279b839d72009dc2aef961a57c9b044d4d8d706062bbff4cea7fe9b7b2db0a3d83c966518eeffddd66cca6f9e63ae3
|
7
|
+
data.tar.gz: d5ebe8b0a5f8dd4df889b1e6a71e81ab5fb1e752a034dd400decd5ef1bdb91441bce9b6061980db7d443796309995c745063175bf7cdb85819028f45fc20dc88
|
@@ -20,6 +20,12 @@ module PaperTrail
|
|
20
20
|
default: false,
|
21
21
|
desc: "Store changeset (diff) with each version"
|
22
22
|
)
|
23
|
+
class_option(
|
24
|
+
:uuid,
|
25
|
+
type: :boolean,
|
26
|
+
default: false,
|
27
|
+
desc: "Use uuid instead of bigint for item_id type (use only if tables use UUIDs)"
|
28
|
+
)
|
23
29
|
|
24
30
|
desc "Generates (but does not run) a migration to add a versions table." \
|
25
31
|
" See section 5.c. Generators in README.md for more information."
|
@@ -28,7 +34,8 @@ module PaperTrail
|
|
28
34
|
add_paper_trail_migration(
|
29
35
|
"create_versions",
|
30
36
|
item_type_options: item_type_options,
|
31
|
-
versions_table_options: versions_table_options
|
37
|
+
versions_table_options: versions_table_options,
|
38
|
+
item_id_type_options: item_id_type_options
|
32
39
|
)
|
33
40
|
if options.with_changes?
|
34
41
|
add_paper_trail_migration("add_object_changes_to_versions")
|
@@ -37,13 +44,18 @@ module PaperTrail
|
|
37
44
|
|
38
45
|
private
|
39
46
|
|
47
|
+
# To use uuid instead of integer for primary key
|
48
|
+
def item_id_type_options
|
49
|
+
options.uuid? ? "string" : "bigint"
|
50
|
+
end
|
51
|
+
|
40
52
|
# MySQL 5.6 utf8mb4 limit is 191 chars for keys used in indexes.
|
41
53
|
# See https://github.com/paper-trail-gem/paper_trail/issues/651
|
42
54
|
def item_type_options
|
43
55
|
if mysql?
|
44
|
-
",
|
56
|
+
", null: false, limit: 191"
|
45
57
|
else
|
46
|
-
",
|
58
|
+
", null: false"
|
47
59
|
end
|
48
60
|
end
|
49
61
|
|
@@ -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
|
14
|
+
t.<%= item_id_type_options %> :item_id, null: false
|
15
15
|
t.string :event, null: false
|
16
16
|
t.string :whodunnit
|
17
17
|
t.text :object, limit: TEXT_BYTES
|
@@ -29,8 +29,10 @@ class CreateVersions < ActiveRecord::Migration<%= migration_version %>
|
|
29
29
|
# version of ActiveRecord with support for fractional seconds in MySQL.
|
30
30
|
# (https://github.com/rails/rails/pull/14359)
|
31
31
|
#
|
32
|
+
# MySQL users should use the following line for `created_at`
|
33
|
+
# t.datetime :created_at, limit: 6
|
32
34
|
t.datetime :created_at
|
33
35
|
end
|
34
|
-
add_index :versions, %i
|
36
|
+
add_index :versions, %i[item_type item_id]
|
35
37
|
end
|
36
38
|
end
|
@@ -32,6 +32,12 @@ module PaperTrail
|
|
32
32
|
if defined_enums[attr] && val.is_a?(::String)
|
33
33
|
# Because PT 4 used to save the string version of enums to `object_changes`
|
34
34
|
val
|
35
|
+
elsif PaperTrail::RAILS_GTE_7_0 && val.is_a?(ActiveRecord::Type::Time::Value)
|
36
|
+
# Because Rails 7 time attribute throws a delegation error when you deserialize
|
37
|
+
# it with the factory.
|
38
|
+
# See ActiveRecord::Type::Time::Value crashes when loaded from YAML on rails 7.0
|
39
|
+
# https://github.com/rails/rails/issues/43966
|
40
|
+
val.instance_variable_get(:@time)
|
35
41
|
else
|
36
42
|
AttributeSerializerFactory.for(@klass, attr).deserialize(val)
|
37
43
|
end
|
@@ -8,7 +8,7 @@ module PaperTrail
|
|
8
8
|
#
|
9
9
|
# It is not safe to assume that a new version of rails will be compatible with
|
10
10
|
# PaperTrail. PT is only compatible with the versions of rails that it is
|
11
|
-
# tested against. See `.
|
11
|
+
# tested against. See `.github/workflows/test.yml`.
|
12
12
|
#
|
13
13
|
# However, as of
|
14
14
|
# [#1213](https://github.com/paper-trail-gem/paper_trail/pull/1213) our
|
@@ -18,7 +18,7 @@ module PaperTrail
|
|
18
18
|
# versions.
|
19
19
|
module Compatibility
|
20
20
|
ACTIVERECORD_GTE = ">= 5.2" # enforced in gemspec
|
21
|
-
ACTIVERECORD_LT = "< 7.
|
21
|
+
ACTIVERECORD_LT = "< 7.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
|
@@ -116,6 +116,20 @@ module PaperTrail
|
|
116
116
|
@changes_in_latest_version ||= load_changes_in_latest_version
|
117
117
|
end
|
118
118
|
|
119
|
+
# @api private
|
120
|
+
def evaluate_only
|
121
|
+
only = @record.paper_trail_options[:only].dup
|
122
|
+
# Remove Hash arguments and then evaluate whether the attributes (the
|
123
|
+
# keys of the hash) should also get pushed into the collection.
|
124
|
+
only.delete_if do |obj|
|
125
|
+
obj.is_a?(Hash) &&
|
126
|
+
obj.each { |attr, condition|
|
127
|
+
only << attr if condition.respond_to?(:call) && condition.call(@record)
|
128
|
+
}
|
129
|
+
end
|
130
|
+
only
|
131
|
+
end
|
132
|
+
|
119
133
|
# An attributed is "ignored" if it is listed in the `:ignore` option
|
120
134
|
# and/or the `:skip` option. Returns true if an ignored attribute has
|
121
135
|
# changed.
|
@@ -182,20 +196,28 @@ module PaperTrail
|
|
182
196
|
if value.respond_to?(:call)
|
183
197
|
value.call(@record)
|
184
198
|
elsif value.is_a?(Symbol) && @record.respond_to?(value, true)
|
185
|
-
|
186
|
-
# be sure to grab the current version.
|
187
|
-
if event != "create" &&
|
188
|
-
@record.has_attribute?(value) &&
|
189
|
-
attribute_changed_in_latest_version?(value)
|
190
|
-
attribute_in_previous_version(value, false)
|
191
|
-
else
|
192
|
-
@record.send(value)
|
193
|
-
end
|
199
|
+
metadatum_from_model_method(event, value)
|
194
200
|
else
|
195
201
|
value
|
196
202
|
end
|
197
203
|
end
|
198
204
|
|
205
|
+
# The model method can either be an attribute or a non-attribute method.
|
206
|
+
#
|
207
|
+
# If it is an attribute that is changing in an existing object,
|
208
|
+
# be sure to grab the correct version.
|
209
|
+
#
|
210
|
+
# @api private
|
211
|
+
def metadatum_from_model_method(event, method)
|
212
|
+
if event != "create" &&
|
213
|
+
@record.has_attribute?(method) &&
|
214
|
+
attribute_changed_in_latest_version?(method)
|
215
|
+
attribute_in_previous_version(method, false)
|
216
|
+
else
|
217
|
+
@record.send(method)
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
199
221
|
# @api private
|
200
222
|
def notable_changes
|
201
223
|
changes_in_latest_version.delete_if { |k, _v|
|
@@ -207,16 +229,9 @@ module PaperTrail
|
|
207
229
|
def notably_changed
|
208
230
|
# Memoized to reduce memory usage
|
209
231
|
@notably_changed ||= begin
|
210
|
-
only =
|
211
|
-
|
212
|
-
|
213
|
-
only.delete_if do |obj|
|
214
|
-
obj.is_a?(Hash) &&
|
215
|
-
obj.each { |attr, condition|
|
216
|
-
only << attr if condition.respond_to?(:call) && condition.call(@record)
|
217
|
-
}
|
218
|
-
end
|
219
|
-
only.empty? ? changed_and_not_ignored : (changed_and_not_ignored & only)
|
232
|
+
only = evaluate_only
|
233
|
+
cani = changed_and_not_ignored
|
234
|
+
only.empty? ? cani : (cani & only)
|
220
235
|
end
|
221
236
|
end
|
222
237
|
|
@@ -35,16 +35,35 @@ module PaperTrail
|
|
35
35
|
if record_object?
|
36
36
|
data[:object] = recordable_object(@is_touch)
|
37
37
|
end
|
38
|
-
|
39
|
-
changes = @force_changes.nil? ? notable_changes : @force_changes
|
40
|
-
data[:object_changes] = prepare_object_changes(changes)
|
41
|
-
end
|
38
|
+
merge_object_changes_into(data)
|
42
39
|
merge_item_subtype_into(data)
|
43
40
|
merge_metadata_into(data)
|
44
41
|
end
|
45
42
|
|
43
|
+
# If it is a touch event, and changed are empty, it is assumed to be
|
44
|
+
# implicit `touch` mutation, and will a version is created.
|
45
|
+
#
|
46
|
+
# See https://github.com/rails/rails/commit/dcb825902d79d0f6baba956f7c6ec5767611353e
|
47
|
+
#
|
48
|
+
# @api private
|
49
|
+
def changed_notably?
|
50
|
+
if @is_touch && changes_in_latest_version.empty?
|
51
|
+
true
|
52
|
+
else
|
53
|
+
super
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
46
57
|
private
|
47
58
|
|
59
|
+
# @api private
|
60
|
+
def merge_object_changes_into(data)
|
61
|
+
if record_object_changes?
|
62
|
+
changes = @force_changes.nil? ? notable_changes : @force_changes
|
63
|
+
data[:object_changes] = prepare_object_changes(changes)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
48
67
|
# `touch` cannot record `object_changes` because rails' `touch` does not
|
49
68
|
# perform dirty-tracking. Specifically, methods from `Dirty`, like
|
50
69
|
# `saved_changes`, return the same values before and after `touch`.
|
@@ -40,8 +40,7 @@ module PaperTrail
|
|
40
40
|
@model_class.after_create { |r|
|
41
41
|
r.paper_trail.record_create if r.paper_trail.save_version?
|
42
42
|
}
|
43
|
-
|
44
|
-
@model_class.paper_trail_options[:on] << :create
|
43
|
+
append_option_uniquely(:on, :create)
|
45
44
|
end
|
46
45
|
|
47
46
|
# Adds a callback that records a version before or after a "destroy" event.
|
@@ -49,7 +48,6 @@ module PaperTrail
|
|
49
48
|
# @api public
|
50
49
|
def on_destroy(recording_order = "before")
|
51
50
|
assert_valid_recording_order_for_on_destroy(recording_order)
|
52
|
-
|
53
51
|
@model_class.send(
|
54
52
|
"#{recording_order}_destroy",
|
55
53
|
lambda do |r|
|
@@ -57,9 +55,7 @@ module PaperTrail
|
|
57
55
|
r.paper_trail.record_destroy(recording_order)
|
58
56
|
end
|
59
57
|
)
|
60
|
-
|
61
|
-
return if @model_class.paper_trail_options[:on].include?(:destroy)
|
62
|
-
@model_class.paper_trail_options[:on] << :destroy
|
58
|
+
append_option_uniquely(:on, :destroy)
|
63
59
|
end
|
64
60
|
|
65
61
|
# Adds a callback that records a version after an "update" event.
|
@@ -81,8 +77,7 @@ module PaperTrail
|
|
81
77
|
@model_class.after_update { |r|
|
82
78
|
r.paper_trail.clear_version_instance
|
83
79
|
}
|
84
|
-
|
85
|
-
@model_class.paper_trail_options[:on] << :update
|
80
|
+
append_option_uniquely(:on, :update)
|
86
81
|
end
|
87
82
|
|
88
83
|
# Adds a callback that records a version after a "touch" event.
|
@@ -96,11 +91,13 @@ module PaperTrail
|
|
96
91
|
# @api public
|
97
92
|
def on_touch
|
98
93
|
@model_class.after_touch { |r|
|
99
|
-
r.paper_trail.
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
94
|
+
if r.paper_trail.save_version?
|
95
|
+
r.paper_trail.record_update(
|
96
|
+
force: RAILS_LT_6_0,
|
97
|
+
in_after_callback: true,
|
98
|
+
is_touch: true
|
99
|
+
)
|
100
|
+
end
|
104
101
|
}
|
105
102
|
end
|
106
103
|
|
@@ -127,6 +124,13 @@ module PaperTrail
|
|
127
124
|
RAILS_LT_6_0 = ::ActiveRecord.gem_version < ::Gem::Version.new("6.0.0")
|
128
125
|
private_constant :RAILS_LT_6_0
|
129
126
|
|
127
|
+
# @api private
|
128
|
+
def append_option_uniquely(option, value)
|
129
|
+
collection = @model_class.paper_trail_options.fetch(option)
|
130
|
+
return if collection.include?(value)
|
131
|
+
collection << value
|
132
|
+
end
|
133
|
+
|
130
134
|
# Raises an error if the provided class is an `abstract_class`.
|
131
135
|
# @api private
|
132
136
|
def assert_concrete_activerecord_class(class_name)
|
@@ -205,6 +209,14 @@ module PaperTrail
|
|
205
209
|
options
|
206
210
|
end
|
207
211
|
|
212
|
+
# Process an `ignore`, `skip`, or `only` option.
|
213
|
+
def event_attribute_option(option_name)
|
214
|
+
[@model_class.paper_trail_options[option_name]].
|
215
|
+
flatten.
|
216
|
+
compact.
|
217
|
+
map { |attr| attr.is_a?(Hash) ? attr.stringify_keys : attr.to_s }
|
218
|
+
end
|
219
|
+
|
208
220
|
def get_versions_scope(options)
|
209
221
|
options[:versions][:scope] || -> { order(model.timestamp_sort_order) }
|
210
222
|
end
|
@@ -239,12 +251,8 @@ module PaperTrail
|
|
239
251
|
@model_class.paper_trail_options = options.dup
|
240
252
|
|
241
253
|
%i[ignore skip only].each do |k|
|
242
|
-
@model_class.paper_trail_options[k] =
|
243
|
-
flatten.
|
244
|
-
compact.
|
245
|
-
map { |attr| attr.is_a?(Hash) ? attr.stringify_keys : attr.to_s }
|
254
|
+
@model_class.paper_trail_options[k] = event_attribute_option(k)
|
246
255
|
end
|
247
|
-
|
248
256
|
@model_class.paper_trail_options[:meta] ||= {}
|
249
257
|
end
|
250
258
|
end
|
@@ -194,15 +194,17 @@ module PaperTrail
|
|
194
194
|
# Save, and create a version record regardless of options such as `:on`,
|
195
195
|
# `:if`, or `:unless`.
|
196
196
|
#
|
197
|
-
#
|
197
|
+
# `in_after_callback`: Indicates if this method is being called within an
|
198
|
+
# `after` callback. Defaults to `false`.
|
199
|
+
# `options`: Optional arguments passed to `save`.
|
198
200
|
#
|
199
201
|
# This is an "update" event. That is, we record the same data we would in
|
200
202
|
# the case of a normal AR `update`.
|
201
|
-
def save_with_version(**options)
|
203
|
+
def save_with_version(in_after_callback: false, **options)
|
202
204
|
::PaperTrail.request(enabled: false) do
|
203
205
|
@record.save(**options)
|
204
206
|
end
|
205
|
-
record_update(force: true, in_after_callback:
|
207
|
+
record_update(force: true, in_after_callback: in_after_callback, is_touch: false)
|
206
208
|
end
|
207
209
|
|
208
210
|
# Like the `update_column` method from `ActiveRecord::Persistence`, but also
|
@@ -9,13 +9,23 @@ module PaperTrail
|
|
9
9
|
extend self # makes all instance methods become module methods as well
|
10
10
|
|
11
11
|
def load(string)
|
12
|
-
|
12
|
+
if use_safe_load?
|
13
|
+
::YAML.safe_load(
|
14
|
+
string,
|
15
|
+
permitted_classes: ::ActiveRecord.yaml_column_permitted_classes,
|
16
|
+
aliases: true
|
17
|
+
)
|
18
|
+
elsif ::YAML.respond_to?(:unsafe_load)
|
19
|
+
::YAML.unsafe_load(string)
|
20
|
+
else
|
21
|
+
::YAML.load(string)
|
22
|
+
end
|
13
23
|
end
|
14
24
|
|
15
25
|
# @param object (Hash | HashWithIndifferentAccess) - Coming from
|
16
26
|
# `recordable_object` `object` will be a plain `Hash`. However, due to
|
17
|
-
# recent [memory optimizations](https://
|
18
|
-
# `recordable_object_changes`, it will be a `HashWithIndifferentAccess`.
|
27
|
+
# recent [memory optimizations](https://github.com/paper-trail-gem/paper_trail/pull/1189),
|
28
|
+
# when coming from `recordable_object_changes`, it will be a `HashWithIndifferentAccess`.
|
19
29
|
def dump(object)
|
20
30
|
object = object.to_hash if object.is_a?(HashWithIndifferentAccess)
|
21
31
|
::YAML.dump object
|
@@ -26,6 +36,14 @@ module PaperTrail
|
|
26
36
|
def where_object_condition(arel_field, field, value)
|
27
37
|
arel_field.matches("%\n#{field}: #{value}\n%")
|
28
38
|
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
# `use_yaml_unsafe_load` was added in 7.0.3.1, will be removed in 7.1.0?
|
43
|
+
def use_safe_load?
|
44
|
+
defined?(ActiveRecord.use_yaml_unsafe_load) &&
|
45
|
+
!ActiveRecord.use_yaml_unsafe_load
|
46
|
+
end
|
29
47
|
end
|
30
48
|
end
|
31
49
|
end
|
@@ -15,8 +15,14 @@ module PaperTrail
|
|
15
15
|
module VersionConcern
|
16
16
|
extend ::ActiveSupport::Concern
|
17
17
|
|
18
|
+
E_YAML_PERMITTED_CLASSES = <<-EOS.squish.freeze
|
19
|
+
PaperTrail encountered a Psych::DisallowedClass error during
|
20
|
+
deserialization of YAML column, indicating that
|
21
|
+
yaml_column_permitted_classes has not been configured correctly. %s
|
22
|
+
EOS
|
23
|
+
|
18
24
|
included do
|
19
|
-
belongs_to :item, polymorphic: true, optional: true
|
25
|
+
belongs_to :item, polymorphic: true, optional: true, inverse_of: false
|
20
26
|
validates_presence_of :event
|
21
27
|
after_create :enforce_version_limit!
|
22
28
|
end
|
@@ -348,7 +354,10 @@ module PaperTrail
|
|
348
354
|
else
|
349
355
|
begin
|
350
356
|
PaperTrail.serializer.load(object_changes)
|
351
|
-
rescue StandardError
|
357
|
+
rescue StandardError => e
|
358
|
+
if defined?(::Psych::Exception) && e.instance_of?(::Psych::Exception)
|
359
|
+
::Kernel.warn format(E_YAML_PERMITTED_CLASSES, e)
|
360
|
+
end
|
352
361
|
{}
|
353
362
|
end
|
354
363
|
end
|
@@ -376,10 +385,11 @@ module PaperTrail
|
|
376
385
|
#
|
377
386
|
# @api private
|
378
387
|
def version_limit
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
388
|
+
klass = item.class
|
389
|
+
if limit_option?(klass)
|
390
|
+
klass.paper_trail_options[:limit]
|
391
|
+
elsif base_class_limit_option?(klass)
|
392
|
+
klass.base_class.paper_trail_options[:limit]
|
383
393
|
else
|
384
394
|
PaperTrail.config.version_limit
|
385
395
|
end
|
@@ -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 =
|
11
|
-
MINOR =
|
10
|
+
MAJOR = 13
|
11
|
+
MINOR = 0
|
12
12
|
TINY = 0
|
13
13
|
|
14
14
|
# Set PRE to nil unless it's a pre-release (beta, rc, etc.)
|
data/lib/paper_trail.rb
CHANGED
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paper_trail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 13.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Stewart
|
8
8
|
- Ben Atkins
|
9
9
|
- Jared Beck
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2022-08-16 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|
@@ -60,28 +60,28 @@ dependencies:
|
|
60
60
|
requirements:
|
61
61
|
- - "~>"
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version: '11.
|
63
|
+
version: '11.1'
|
64
64
|
type: :development
|
65
65
|
prerelease: false
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
68
|
- - "~>"
|
69
69
|
- !ruby/object:Gem::Version
|
70
|
-
version: '11.
|
70
|
+
version: '11.1'
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: ffaker
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
75
|
- - "~>"
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version: 2.
|
77
|
+
version: '2.20'
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
81
81
|
requirements:
|
82
82
|
- - "~>"
|
83
83
|
- !ruby/object:Gem::Version
|
84
|
-
version: 2.
|
84
|
+
version: '2.20'
|
85
85
|
- !ruby/object:Gem::Dependency
|
86
86
|
name: generator_spec
|
87
87
|
requirement: !ruby/object:Gem::Requirement
|
@@ -158,14 +158,14 @@ dependencies:
|
|
158
158
|
requirements:
|
159
159
|
- - "~>"
|
160
160
|
- !ruby/object:Gem::Version
|
161
|
-
version: 1.
|
161
|
+
version: 1.22.2
|
162
162
|
type: :development
|
163
163
|
prerelease: false
|
164
164
|
version_requirements: !ruby/object:Gem::Requirement
|
165
165
|
requirements:
|
166
166
|
- - "~>"
|
167
167
|
- !ruby/object:Gem::Version
|
168
|
-
version: 1.
|
168
|
+
version: 1.22.2
|
169
169
|
- !ruby/object:Gem::Dependency
|
170
170
|
name: rubocop-packaging
|
171
171
|
requirement: !ruby/object:Gem::Requirement
|
@@ -200,14 +200,14 @@ dependencies:
|
|
200
200
|
requirements:
|
201
201
|
- - "~>"
|
202
202
|
- !ruby/object:Gem::Version
|
203
|
-
version: 2.
|
203
|
+
version: 2.12.4
|
204
204
|
type: :development
|
205
205
|
prerelease: false
|
206
206
|
version_requirements: !ruby/object:Gem::Requirement
|
207
207
|
requirements:
|
208
208
|
- - "~>"
|
209
209
|
- !ruby/object:Gem::Version
|
210
|
-
version: 2.
|
210
|
+
version: 2.12.4
|
211
211
|
- !ruby/object:Gem::Dependency
|
212
212
|
name: rubocop-rake
|
213
213
|
requirement: !ruby/object:Gem::Requirement
|
@@ -228,68 +228,56 @@ dependencies:
|
|
228
228
|
requirements:
|
229
229
|
- - "~>"
|
230
230
|
- !ruby/object:Gem::Version
|
231
|
-
version: 2.
|
231
|
+
version: 2.5.0
|
232
232
|
type: :development
|
233
233
|
prerelease: false
|
234
234
|
version_requirements: !ruby/object:Gem::Requirement
|
235
235
|
requirements:
|
236
236
|
- - "~>"
|
237
237
|
- !ruby/object:Gem::Version
|
238
|
-
version: 2.
|
238
|
+
version: 2.5.0
|
239
239
|
- !ruby/object:Gem::Dependency
|
240
240
|
name: simplecov
|
241
241
|
requirement: !ruby/object:Gem::Requirement
|
242
242
|
requirements:
|
243
|
-
- - "
|
244
|
-
- !ruby/object:Gem::Version
|
245
|
-
version: '0.21'
|
246
|
-
- - "<"
|
243
|
+
- - "~>"
|
247
244
|
- !ruby/object:Gem::Version
|
248
|
-
version:
|
245
|
+
version: 0.21.2
|
249
246
|
type: :development
|
250
247
|
prerelease: false
|
251
248
|
version_requirements: !ruby/object:Gem::Requirement
|
252
249
|
requirements:
|
253
|
-
- - "
|
254
|
-
- !ruby/object:Gem::Version
|
255
|
-
version: '0.21'
|
256
|
-
- - "<"
|
250
|
+
- - "~>"
|
257
251
|
- !ruby/object:Gem::Version
|
258
|
-
version:
|
252
|
+
version: 0.21.2
|
259
253
|
- !ruby/object:Gem::Dependency
|
260
254
|
name: mysql2
|
261
255
|
requirement: !ruby/object:Gem::Requirement
|
262
256
|
requirements:
|
263
257
|
- - "~>"
|
264
258
|
- !ruby/object:Gem::Version
|
265
|
-
version:
|
259
|
+
version: 0.5.3
|
266
260
|
type: :development
|
267
261
|
prerelease: false
|
268
262
|
version_requirements: !ruby/object:Gem::Requirement
|
269
263
|
requirements:
|
270
264
|
- - "~>"
|
271
265
|
- !ruby/object:Gem::Version
|
272
|
-
version:
|
266
|
+
version: 0.5.3
|
273
267
|
- !ruby/object:Gem::Dependency
|
274
268
|
name: pg
|
275
269
|
requirement: !ruby/object:Gem::Requirement
|
276
270
|
requirements:
|
277
|
-
- - "
|
278
|
-
- !ruby/object:Gem::Version
|
279
|
-
version: '0.18'
|
280
|
-
- - "<"
|
271
|
+
- - "~>"
|
281
272
|
- !ruby/object:Gem::Version
|
282
|
-
version: '2
|
273
|
+
version: '1.2'
|
283
274
|
type: :development
|
284
275
|
prerelease: false
|
285
276
|
version_requirements: !ruby/object:Gem::Requirement
|
286
277
|
requirements:
|
287
|
-
- - "
|
288
|
-
- !ruby/object:Gem::Version
|
289
|
-
version: '0.18'
|
290
|
-
- - "<"
|
278
|
+
- - "~>"
|
291
279
|
- !ruby/object:Gem::Version
|
292
|
-
version: '2
|
280
|
+
version: '1.2'
|
293
281
|
- !ruby/object:Gem::Dependency
|
294
282
|
name: sqlite3
|
295
283
|
requirement: !ruby/object:Gem::Requirement
|
@@ -364,7 +352,7 @@ homepage: https://github.com/paper-trail-gem/paper_trail
|
|
364
352
|
licenses:
|
365
353
|
- MIT
|
366
354
|
metadata: {}
|
367
|
-
post_install_message:
|
355
|
+
post_install_message:
|
368
356
|
rdoc_options: []
|
369
357
|
require_paths:
|
370
358
|
- lib
|
@@ -372,15 +360,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
372
360
|
requirements:
|
373
361
|
- - ">="
|
374
362
|
- !ruby/object:Gem::Version
|
375
|
-
version: 2.
|
363
|
+
version: 2.6.0
|
376
364
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
377
365
|
requirements:
|
378
366
|
- - ">="
|
379
367
|
- !ruby/object:Gem::Version
|
380
368
|
version: 1.3.6
|
381
369
|
requirements: []
|
382
|
-
rubygems_version: 3.
|
383
|
-
signing_key:
|
370
|
+
rubygems_version: 3.3.7
|
371
|
+
signing_key:
|
384
372
|
specification_version: 4
|
385
373
|
summary: Track changes to your models.
|
386
374
|
test_files: []
|