sequel 5.34.0 → 5.39.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +82 -0
  3. data/README.rdoc +2 -2
  4. data/doc/association_basics.rdoc +7 -2
  5. data/doc/cheat_sheet.rdoc +5 -5
  6. data/doc/code_order.rdoc +0 -12
  7. data/doc/dataset_filtering.rdoc +2 -2
  8. data/doc/fork_safety.rdoc +84 -0
  9. data/doc/model_plugins.rdoc +1 -1
  10. data/doc/opening_databases.rdoc +5 -1
  11. data/doc/postgresql.rdoc +1 -1
  12. data/doc/querying.rdoc +3 -3
  13. data/doc/release_notes/5.35.0.txt +56 -0
  14. data/doc/release_notes/5.36.0.txt +60 -0
  15. data/doc/release_notes/5.37.0.txt +30 -0
  16. data/doc/release_notes/5.38.0.txt +28 -0
  17. data/doc/release_notes/5.39.0.txt +19 -0
  18. data/doc/transactions.rdoc +0 -8
  19. data/doc/validations.rdoc +1 -1
  20. data/lib/sequel/adapters/jdbc.rb +13 -1
  21. data/lib/sequel/adapters/jdbc/mysql.rb +4 -4
  22. data/lib/sequel/adapters/odbc.rb +4 -6
  23. data/lib/sequel/adapters/oracle.rb +2 -1
  24. data/lib/sequel/adapters/shared/mssql.rb +35 -5
  25. data/lib/sequel/adapters/shared/oracle.rb +13 -7
  26. data/lib/sequel/adapters/shared/postgres.rb +40 -2
  27. data/lib/sequel/adapters/shared/sqlite.rb +8 -2
  28. data/lib/sequel/adapters/tinytds.rb +1 -0
  29. data/lib/sequel/adapters/utils/mysql_mysql2.rb +1 -0
  30. data/lib/sequel/core.rb +5 -6
  31. data/lib/sequel/database/connecting.rb +0 -1
  32. data/lib/sequel/database/misc.rb +14 -0
  33. data/lib/sequel/database/schema_generator.rb +6 -0
  34. data/lib/sequel/database/schema_methods.rb +16 -6
  35. data/lib/sequel/database/transactions.rb +2 -2
  36. data/lib/sequel/dataset/actions.rb +10 -6
  37. data/lib/sequel/dataset/query.rb +1 -1
  38. data/lib/sequel/deprecated.rb +1 -1
  39. data/lib/sequel/extensions/_pretty_table.rb +1 -2
  40. data/lib/sequel/extensions/columns_introspection.rb +1 -2
  41. data/lib/sequel/extensions/core_refinements.rb +2 -0
  42. data/lib/sequel/extensions/duplicate_columns_handler.rb +2 -0
  43. data/lib/sequel/extensions/migration.rb +8 -2
  44. data/lib/sequel/extensions/pg_array_ops.rb +4 -0
  45. data/lib/sequel/extensions/pg_enum.rb +2 -0
  46. data/lib/sequel/extensions/pg_extended_date_support.rb +1 -1
  47. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -0
  48. data/lib/sequel/extensions/pg_inet.rb +2 -0
  49. data/lib/sequel/extensions/pg_json_ops.rb +46 -2
  50. data/lib/sequel/extensions/pg_range.rb +3 -7
  51. data/lib/sequel/extensions/pg_range_ops.rb +2 -0
  52. data/lib/sequel/extensions/pg_row.rb +0 -1
  53. data/lib/sequel/extensions/pg_row_ops.rb +24 -0
  54. data/lib/sequel/extensions/query.rb +1 -0
  55. data/lib/sequel/extensions/run_transaction_hooks.rb +1 -1
  56. data/lib/sequel/extensions/s.rb +2 -0
  57. data/lib/sequel/extensions/schema_dumper.rb +3 -3
  58. data/lib/sequel/extensions/symbol_aref_refinement.rb +2 -0
  59. data/lib/sequel/extensions/symbol_as_refinement.rb +2 -0
  60. data/lib/sequel/extensions/to_dot.rb +9 -3
  61. data/lib/sequel/model.rb +1 -1
  62. data/lib/sequel/model/associations.rb +24 -7
  63. data/lib/sequel/model/base.rb +9 -3
  64. data/lib/sequel/model/plugins.rb +1 -0
  65. data/lib/sequel/plugins/association_pks.rb +3 -2
  66. data/lib/sequel/plugins/association_proxies.rb +1 -0
  67. data/lib/sequel/plugins/blacklist_security.rb +1 -2
  68. data/lib/sequel/plugins/class_table_inheritance.rb +3 -8
  69. data/lib/sequel/plugins/csv_serializer.rb +2 -0
  70. data/lib/sequel/plugins/dirty.rb +44 -0
  71. data/lib/sequel/plugins/forbid_lazy_load.rb +2 -0
  72. data/lib/sequel/plugins/instance_specific_default.rb +113 -0
  73. data/lib/sequel/plugins/lazy_attributes.rb +1 -1
  74. data/lib/sequel/plugins/pg_array_associations.rb +2 -3
  75. data/lib/sequel/plugins/prepared_statements.rb +5 -11
  76. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -3
  77. data/lib/sequel/plugins/rcte_tree.rb +8 -14
  78. data/lib/sequel/plugins/single_table_inheritance.rb +7 -0
  79. data/lib/sequel/plugins/string_stripper.rb +1 -1
  80. data/lib/sequel/plugins/tree.rb +9 -4
  81. data/lib/sequel/plugins/validation_class_methods.rb +5 -1
  82. data/lib/sequel/timezones.rb +8 -3
  83. data/lib/sequel/version.rb +1 -1
  84. metadata +16 -3
@@ -111,7 +111,9 @@ module Sequel
111
111
  # an association, allow lazy loading that association, since the
112
112
  # lazy association load will use a hash table lookup and not a query.
113
113
  def allow_lazy_load_for_static_cache_associations
114
+ # :nocov:
114
115
  if defined?(::Sequel::Plugins::StaticCache::ClassMethods)
116
+ # :nocov:
115
117
  @association_reflections.each_value do |ref|
116
118
  if ref.associated_class.is_a?(::Sequel::Plugins::StaticCache::ClassMethods)
117
119
  ref[:forbid_lazy_load] = false
@@ -0,0 +1,113 @@
1
+ # frozen-string-literal: true
2
+
3
+ module Sequel
4
+ module Plugins
5
+ # The instance_specific_default plugin exists to make it easier to use a
6
+ # global :instance_specific association option, or to warn or raise when Sequel
7
+ # has to guess which value to use :instance_specific option (Sequel defaults to
8
+ # guessing true as that is the conservative setting). It is helpful to
9
+ # use this plugin, particularly with the :warn or :raise settings, to determine
10
+ # which associations should have :instance_specific set. Setting the
11
+ # :instance_specific to false for associations that are not instance specific
12
+ # can improve performance.
13
+ #
14
+ # Associations are instance-specific if their block calls
15
+ # a model instance method, or where the value of the block varies
16
+ # based on runtime state, and the variance is outside of a delayed evaluation.
17
+ # For example, with the following three associations:
18
+ #
19
+ # Album.one_to_one :first_track, class: :Track do |ds|
20
+ # ds.where(number: 1)
21
+ # end
22
+ #
23
+ # Album.one_to_one :last_track, class: :Track do |ds|
24
+ # ds.where(number: num_tracks)
25
+ # end
26
+ #
27
+ # Album.one_to_many :recent_tracks, class: :Track do |ds|
28
+ # ds.where{date_updated > Date.today - 10}
29
+ # end
30
+ #
31
+ # +first_track+ is not instance specific, but +last_track+ and +recent_tracks+ are.
32
+ # +last_trac+ is because the +num_tracks+ call in the block is calling
33
+ # <tt>Album#num_tracks</tt>. +recent_tracks+ is because the value will change over
34
+ # time. This plugin allows you to find these cases, and set the :instance_specific
35
+ # option appropriately for them:
36
+ #
37
+ # Album.one_to_one :first_track, class: :Track, instance_specific: false do |ds|
38
+ # ds.where(number: 1)
39
+ # end
40
+ #
41
+ # Album.one_to_one :last_track, class: :Track, instance_specific: true do |ds|
42
+ # ds.where(number: num_tracks)
43
+ # end
44
+ #
45
+ # Album.one_to_many :recent_tracks, class: :Track, instance_specific: true do |ds|
46
+ # ds.where{date_updated > Date.today - 10}
47
+ # end
48
+ #
49
+ # For the +recent_tracks+ association, instead of marking it instance_specific, you
50
+ # could also use a delayed evaluation, since it doesn't actually contain
51
+ # instance-specific code:
52
+ #
53
+ # Album.one_to_many :recent_tracks, class: :Track, instance_specific: false do |ds|
54
+ # ds.where{date_updated > Sequel.delay{Date.today - 10}}
55
+ # end
56
+ #
57
+ # Possible arguments to provide when loading the plugin:
58
+ #
59
+ # true :: Set the :instance_specific option to true
60
+ # false :: Set the :instance_specific option to false
61
+ # :default :: Call super to set the :instance_specific option
62
+ # :warn :: Emit a warning before calling super to set the :instance_specific option
63
+ # :raise :: Raise a Sequel::Error if an :instance_specific option is not provided and
64
+ # an association could be instance-specific.
65
+ #
66
+ # Note that this plugin only affects associations which could be instance
67
+ # specific (those with blocks), where the :instance_specific option was not
68
+ # specified when the association was created.
69
+ #
70
+ # Usage:
71
+ #
72
+ # # Set how to handle associations that could be instance specific
73
+ # # but did not specify an :instance_specific option, for all subclasses
74
+ # # (set before creating subclasses).
75
+ # Sequel::Model.plugin :instance_specific_default, :warn
76
+ #
77
+ # # Set how to handle associations that could be instance specific
78
+ # # but did not specify an :instance_specific option, for the Album class
79
+ # Album.plugin :instance_specific_default, :warn
80
+ module InstanceSpecificDefault
81
+ # Set how to handle associations that could be instance specific but did
82
+ # not specify an :instance_specific value.
83
+ def self.configure(model, default)
84
+ model.instance_variable_set(:@instance_specific_default, default)
85
+ end
86
+
87
+ module ClassMethods
88
+ Plugins.inherited_instance_variables(self, :@instance_specific_default=>nil)
89
+
90
+ private
91
+
92
+ # Return the appropriate :instance_specific value, or warn or raise if
93
+ # configured.
94
+ def _association_instance_specific_default(name)
95
+ case @instance_specific_default
96
+ when true, false
97
+ return @instance_specific_default
98
+ when :default
99
+ # nothing
100
+ when :warn
101
+ warn("possibly instance-specific association without :instance_specific option (class: #{self}, association: #{name})", :uplevel => 3)
102
+ when :raise
103
+ raise Sequel::Error, "possibly instance-specific association without :instance_specific option (class: #{self}, association: #{name})"
104
+ else
105
+ raise Sequel::Error, "invalid value passed to instance_specific_default plugin: #{@instance_specific_default.inspect}"
106
+ end
107
+
108
+ super
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
@@ -98,7 +98,7 @@ module Sequel
98
98
  end
99
99
 
100
100
  if retrieved_with
101
- raise(Error, "Invalid primary key column for #{model}: #{pkc.inspect}") unless primary_key = model.primary_key
101
+ primary_key = model.primary_key
102
102
  composite_pk = true if primary_key.is_a?(Array)
103
103
  id_map = {}
104
104
  retrieved_with.each{|o| id_map[o.pk] = o unless o.values.has_key?(a) || o.frozen?}
@@ -341,10 +341,9 @@ module Sequel
341
341
  eo[:loader] = false
342
342
 
343
343
  eager_load_results(opts, eo) do |assoc_record|
344
- if pks ||= assoc_record.get_column_value(key)
344
+ if pks = assoc_record.get_column_value(key)
345
345
  pks.each do |pkv|
346
- next unless objects = id_map[pkv]
347
- objects.each do |object|
346
+ id_map[pkv].each do |object|
348
347
  object.associations[name].push(assoc_record)
349
348
  end
350
349
  end
@@ -41,11 +41,9 @@ module Sequel
41
41
  # Create a prepared statement, but modify the SQL used so that the model's columns are explicitly
42
42
  # selected instead of using *, assuming that the dataset selects from a single table.
43
43
  def prepare_explicit_statement(ds, type, vals=OPTS)
44
- f = ds.opts[:from]
45
- meth = type == :insert_select ? :returning : :select
46
- s = ds.opts[meth]
47
- if f && f.length == 1 && !ds.opts[:join] && (!s || s.empty?)
48
- ds = ds.public_send(meth, *columns.map{|c| Sequel.identifier(c)})
44
+ s = ds.opts[:returning]
45
+ if !s || s.empty?
46
+ ds = ds.returning(*columns.map{|c| Sequel.identifier(c)})
49
47
  end
50
48
 
51
49
  prepare_statement(ds, type, vals)
@@ -70,9 +68,7 @@ module Sequel
70
68
  # Return a prepared statement that can be used to insert a row using the given columns
71
69
  # and return that column values for the row created.
72
70
  def prepared_insert_select(cols)
73
- if dataset.supports_insert_select?
74
- cached_prepared_statement(:insert_select, prepared_columns(cols)){prepare_explicit_statement(naked.clone(:server=>dataset.opts.fetch(:server, :default)), :insert_select, prepared_statement_key_hash(cols))}
75
- end
71
+ cached_prepared_statement(:insert_select, prepared_columns(cols)){prepare_explicit_statement(naked.clone(:server=>dataset.opts.fetch(:server, :default)), :insert_select, prepared_statement_key_hash(cols))}
76
72
  end
77
73
 
78
74
  # Return an array of two element arrays with the column symbol as the first entry and the
@@ -138,9 +134,7 @@ module Sequel
138
134
  # and return the new column values.
139
135
  def _insert_select_raw(ds)
140
136
  if use_prepared_statements_for?(:insert_select)
141
- if ps = model.send(:prepared_insert_select, @values.keys)
142
- _set_prepared_statement_server(ps).call(@values)
143
- end
137
+ _set_prepared_statement_server(model.send(:prepared_insert_select, @values.keys)).call(@values)
144
138
  else
145
139
  super
146
140
  end
@@ -66,9 +66,7 @@ module Sequel
66
66
  # Merge the current values into the default values to reduce the number
67
67
  # of free columns.
68
68
  def before_create
69
- if v = model.prepared_statements_column_defaults
70
- @values = v.merge(values)
71
- end
69
+ @values = model.prepared_statements_column_defaults.merge(@values)
72
70
  super
73
71
  end
74
72
 
@@ -194,21 +194,17 @@ module Sequel
194
194
  ds = ds.select_append(ka) unless ds.opts[:select] == nil
195
195
  model.eager_load_results(r, eo.merge(:loader=>false, :initialize_rows=>false, :dataset=>ds, :id_map=>nil)) do |obj|
196
196
  opk = prkey_conv[obj]
197
- if parent_map.has_key?(opk)
198
- if idm_obj = parent_map[opk]
199
- key_aliases.each{|ka_| idm_obj.values[ka_] = obj.values[ka_]}
200
- obj = idm_obj
201
- end
197
+ if idm_obj = parent_map[opk]
198
+ key_aliases.each{|ka_| idm_obj.values[ka_] = obj.values[ka_]}
199
+ obj = idm_obj
202
200
  else
203
201
  obj.associations[parent] = nil
204
202
  parent_map[opk] = obj
205
203
  (children_map[key_conv[obj]] ||= []) << obj
206
204
  end
207
205
 
208
- if roots = id_map[extract_key_alias[obj]]
209
- roots.each do |root|
210
- root.associations[ancestors] << obj
211
- end
206
+ id_map[extract_key_alias[obj]].each do |root|
207
+ root.associations[ancestors] << obj
212
208
  end
213
209
  end
214
210
  parent_map.each do |parent_id, obj|
@@ -306,11 +302,9 @@ module Sequel
306
302
  end
307
303
 
308
304
  opk = prkey_conv[obj]
309
- if parent_map.has_key?(opk)
310
- if idm_obj = parent_map[opk]
311
- key_aliases.each{|ka_| idm_obj.values[ka_] = obj.values[ka_]}
312
- obj = idm_obj
313
- end
305
+ if idm_obj = parent_map[opk]
306
+ key_aliases.each{|ka_| idm_obj.values[ka_] = obj.values[ka_]}
307
+ obj = idm_obj
314
308
  else
315
309
  obj.associations[childrena] = [] unless no_cache
316
310
  parent_map[opk] = obj
@@ -250,6 +250,13 @@ module Sequel
250
250
  end
251
251
  super
252
252
  end
253
+
254
+ private
255
+
256
+ # Don't allow use of prepared statements.
257
+ def use_prepared_statements_for?(type)
258
+ false
259
+ end
253
260
  end
254
261
  end
255
262
  end
@@ -28,7 +28,7 @@ module Sequel
28
28
  model.plugin(:input_transformer, :string_stripper){|v| (v.is_a?(String) && !v.is_a?(SQL::Blob)) ? v.strip : v}
29
29
  end
30
30
  def self.configure(model)
31
- model.instance_exec{set_skipped_string_stripping_columns if @dataset}
31
+ model.send(:set_skipped_string_stripping_columns)
32
32
  end
33
33
 
34
34
  module ClassMethods
@@ -45,6 +45,7 @@ module Sequel
45
45
 
46
46
  model.instance_exec do
47
47
  @parent_column = opts[:key]
48
+ @qualified_parent_column = Sequel.deep_qualify(table_name, opts[:key])
48
49
  @tree_order = opts[:order]
49
50
  @parent_association_name = parent
50
51
  @children_association_name = children
@@ -59,17 +60,21 @@ module Sequel
59
60
  # The column symbol or array of column symbols on which to order the tree.
60
61
  attr_accessor :tree_order
61
62
 
62
- # The symbol for the column containing the value pointing to the
63
- # parent of the leaf.
63
+ # The symbol or array of symbols for the column containing the value pointing to the
64
+ # parent of the node.
64
65
  attr_accessor :parent_column
65
66
 
67
+ # The qualified identifier or array of qualified identifiers for the column
68
+ # containing the value pointing to the parent of the node.
69
+ attr_accessor :qualified_parent_column
70
+
66
71
  # The association name for the parent association
67
72
  attr_reader :parent_association_name
68
73
 
69
74
  # The association name for the children association
70
75
  attr_reader :children_association_name
71
76
 
72
- Plugins.inherited_instance_variables(self, :@parent_column=>nil, :@tree_order=>nil, :@parent_association_name=>nil, :@children_association_name=>nil)
77
+ Plugins.inherited_instance_variables(self, :@parent_column=>nil, :@qualified_parent_column=>nil, :@tree_order=>nil, :@parent_association_name=>nil, :@children_association_name=>nil)
73
78
  Plugins.def_dataset_methods(self, [:roots, :roots_dataset])
74
79
 
75
80
  # Should freeze tree order if it is an array when freezing the model class.
@@ -151,7 +156,7 @@ module Sequel
151
156
  #
152
157
  # TreeClass.roots_dataset # => Sequel::Dataset instance
153
158
  def roots_dataset
154
- ds = where(Sequel.or(Array(model.parent_column).zip([])))
159
+ ds = where(Sequel.or(Array(model.qualified_parent_column).zip([])))
155
160
  ds = ds.order(*model.tree_order) if model.tree_order
156
161
  ds
157
162
  end
@@ -194,7 +194,11 @@ module Sequel
194
194
  def validates_each(*atts, &block)
195
195
  opts = extract_options!(atts)
196
196
  blank_meth = db.method(:blank_object?).to_proc
197
- blk = if (i = opts[:if]) || (am = opts[:allow_missing]) || (an = opts[:allow_nil]) || (ab = opts[:allow_blank])
197
+ i = opts[:if]
198
+ am = opts[:allow_missing]
199
+ an = opts[:allow_nil]
200
+ ab = opts[:allow_blank]
201
+ blk = if i || am || an || ab
198
202
  if i.is_a?(Proc)
199
203
  i = Plugins.def_sequel_method(self, "validation_class_methods_if", 0, &i)
200
204
  end
@@ -10,9 +10,14 @@ module Sequel
10
10
  Timezones = SequelMethods
11
11
  Deprecation.deprecate_constant(self, :Timezones)
12
12
 
13
- # Sequel doesn't pay much attention to timezones by default, but you can set it
14
- # handle timezones if you want. There are three separate timezone settings, application_timezone,
15
- # database_timezone, and typecast_timezone. All three timezones have getter and setter methods.
13
+ # Sequel doesn't pay much attention to timezones by default, but you can set it to
14
+ # handle timezones if you want. There are three separate timezone settings:
15
+ #
16
+ # * application_timezone
17
+ # * database_timezone
18
+ # * typecast_timezone
19
+ #
20
+ # All three timezones have getter and setter methods.
16
21
  # You can set all three timezones to the same value at once via <tt>Sequel.default_timezone=</tt>.
17
22
  #
18
23
  # The only timezone values that are supported by default are <tt>:utc</tt> (convert to UTC),
@@ -6,7 +6,7 @@ module Sequel
6
6
 
7
7
  # The minor version of Sequel. Bumped for every non-patch level
8
8
  # release, generally around once a month.
9
- MINOR = 34
9
+ MINOR = 39
10
10
 
11
11
  # The tiny version of Sequel. Usually 0, only bumped for bugfix
12
12
  # releases that fix regressions from previous versions.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.34.0
4
+ version: 5.39.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-01 00:00:00.000000000 Z
11
+ date: 2020-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -147,6 +147,7 @@ extra_rdoc_files:
147
147
  - doc/testing.rdoc
148
148
  - doc/validations.rdoc
149
149
  - doc/transactions.rdoc
150
+ - doc/fork_safety.rdoc
150
151
  - doc/release_notes/5.5.0.txt
151
152
  - doc/release_notes/5.6.0.txt
152
153
  - doc/release_notes/5.0.0.txt
@@ -182,6 +183,11 @@ extra_rdoc_files:
182
183
  - doc/release_notes/5.32.0.txt
183
184
  - doc/release_notes/5.33.0.txt
184
185
  - doc/release_notes/5.34.0.txt
186
+ - doc/release_notes/5.35.0.txt
187
+ - doc/release_notes/5.36.0.txt
188
+ - doc/release_notes/5.37.0.txt
189
+ - doc/release_notes/5.38.0.txt
190
+ - doc/release_notes/5.39.0.txt
185
191
  files:
186
192
  - CHANGELOG
187
193
  - MIT-LICENSE
@@ -196,6 +202,7 @@ files:
196
202
  - doc/dataset_basics.rdoc
197
203
  - doc/dataset_filtering.rdoc
198
204
  - doc/extensions.rdoc
205
+ - doc/fork_safety.rdoc
199
206
  - doc/mass_assignment.rdoc
200
207
  - doc/migration.rdoc
201
208
  - doc/model_dataset_method_design.rdoc
@@ -237,6 +244,11 @@ files:
237
244
  - doc/release_notes/5.32.0.txt
238
245
  - doc/release_notes/5.33.0.txt
239
246
  - doc/release_notes/5.34.0.txt
247
+ - doc/release_notes/5.35.0.txt
248
+ - doc/release_notes/5.36.0.txt
249
+ - doc/release_notes/5.37.0.txt
250
+ - doc/release_notes/5.38.0.txt
251
+ - doc/release_notes/5.39.0.txt
240
252
  - doc/release_notes/5.4.0.txt
241
253
  - doc/release_notes/5.5.0.txt
242
254
  - doc/release_notes/5.6.0.txt
@@ -462,6 +474,7 @@ files:
462
474
  - lib/sequel/plugins/insert_returning_select.rb
463
475
  - lib/sequel/plugins/instance_filters.rb
464
476
  - lib/sequel/plugins/instance_hooks.rb
477
+ - lib/sequel/plugins/instance_specific_default.rb
465
478
  - lib/sequel/plugins/inverted_subsets.rb
466
479
  - lib/sequel/plugins/json_serializer.rb
467
480
  - lib/sequel/plugins/lazy_attributes.rb
@@ -542,7 +555,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
542
555
  - !ruby/object:Gem::Version
543
556
  version: '0'
544
557
  requirements: []
545
- rubygems_version: 3.1.2
558
+ rubygems_version: 3.1.4
546
559
  signing_key:
547
560
  specification_version: 4
548
561
  summary: The Database Toolkit for Ruby