sequel 5.33.0 → 5.38.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 +88 -0
  3. data/README.rdoc +1 -1
  4. data/doc/association_basics.rdoc +7 -2
  5. data/doc/dataset_filtering.rdoc +2 -2
  6. data/doc/model_plugins.rdoc +1 -1
  7. data/doc/opening_databases.rdoc +5 -1
  8. data/doc/release_notes/5.34.0.txt +40 -0
  9. data/doc/release_notes/5.35.0.txt +56 -0
  10. data/doc/release_notes/5.36.0.txt +60 -0
  11. data/doc/release_notes/5.37.0.txt +30 -0
  12. data/doc/release_notes/5.38.0.txt +28 -0
  13. data/doc/transactions.rdoc +0 -8
  14. data/doc/validations.rdoc +1 -1
  15. data/lib/sequel/adapters/jdbc.rb +13 -1
  16. data/lib/sequel/adapters/jdbc/mysql.rb +4 -4
  17. data/lib/sequel/adapters/odbc.rb +4 -6
  18. data/lib/sequel/adapters/oracle.rb +2 -1
  19. data/lib/sequel/adapters/shared/mssql.rb +14 -4
  20. data/lib/sequel/adapters/shared/oracle.rb +13 -7
  21. data/lib/sequel/adapters/shared/postgres.rb +39 -1
  22. data/lib/sequel/adapters/shared/sqlite.rb +8 -2
  23. data/lib/sequel/adapters/tinytds.rb +1 -0
  24. data/lib/sequel/adapters/utils/mysql_mysql2.rb +1 -0
  25. data/lib/sequel/connection_pool/sharded_single.rb +4 -1
  26. data/lib/sequel/connection_pool/sharded_threaded.rb +10 -10
  27. data/lib/sequel/connection_pool/single.rb +1 -1
  28. data/lib/sequel/connection_pool/threaded.rb +1 -1
  29. data/lib/sequel/core.rb +5 -6
  30. data/lib/sequel/database/connecting.rb +1 -2
  31. data/lib/sequel/database/misc.rb +30 -10
  32. data/lib/sequel/database/query.rb +2 -0
  33. data/lib/sequel/database/schema_generator.rb +0 -1
  34. data/lib/sequel/database/schema_methods.rb +16 -17
  35. data/lib/sequel/database/transactions.rb +8 -5
  36. data/lib/sequel/dataset/actions.rb +10 -6
  37. data/lib/sequel/dataset/placeholder_literalizer.rb +3 -7
  38. data/lib/sequel/dataset/query.rb +5 -4
  39. data/lib/sequel/deprecated.rb +3 -1
  40. data/lib/sequel/exceptions.rb +2 -0
  41. data/lib/sequel/extensions/_pretty_table.rb +1 -2
  42. data/lib/sequel/extensions/columns_introspection.rb +1 -2
  43. data/lib/sequel/extensions/core_refinements.rb +2 -0
  44. data/lib/sequel/extensions/duplicate_columns_handler.rb +2 -0
  45. data/lib/sequel/extensions/migration.rb +8 -2
  46. data/lib/sequel/extensions/pg_array_ops.rb +4 -0
  47. data/lib/sequel/extensions/pg_enum.rb +2 -0
  48. data/lib/sequel/extensions/pg_extended_date_support.rb +1 -1
  49. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -0
  50. data/lib/sequel/extensions/pg_inet.rb +2 -0
  51. data/lib/sequel/extensions/pg_json_ops.rb +46 -2
  52. data/lib/sequel/extensions/pg_range.rb +3 -7
  53. data/lib/sequel/extensions/pg_range_ops.rb +2 -0
  54. data/lib/sequel/extensions/pg_row.rb +0 -1
  55. data/lib/sequel/extensions/pg_row_ops.rb +24 -0
  56. data/lib/sequel/extensions/query.rb +1 -0
  57. data/lib/sequel/extensions/run_transaction_hooks.rb +1 -1
  58. data/lib/sequel/extensions/s.rb +2 -0
  59. data/lib/sequel/extensions/schema_dumper.rb +3 -3
  60. data/lib/sequel/extensions/symbol_aref_refinement.rb +2 -0
  61. data/lib/sequel/extensions/symbol_as_refinement.rb +2 -0
  62. data/lib/sequel/extensions/to_dot.rb +9 -3
  63. data/lib/sequel/model.rb +3 -1
  64. data/lib/sequel/model/associations.rb +36 -20
  65. data/lib/sequel/model/base.rb +13 -5
  66. data/lib/sequel/model/plugins.rb +3 -3
  67. data/lib/sequel/plugins/association_pks.rb +60 -18
  68. data/lib/sequel/plugins/association_proxies.rb +1 -0
  69. data/lib/sequel/plugins/blacklist_security.rb +1 -2
  70. data/lib/sequel/plugins/class_table_inheritance.rb +3 -8
  71. data/lib/sequel/plugins/csv_serializer.rb +2 -0
  72. data/lib/sequel/plugins/dirty.rb +44 -0
  73. data/lib/sequel/plugins/forbid_lazy_load.rb +2 -0
  74. data/lib/sequel/plugins/instance_specific_default.rb +113 -0
  75. data/lib/sequel/plugins/lazy_attributes.rb +1 -1
  76. data/lib/sequel/plugins/pg_array_associations.rb +2 -3
  77. data/lib/sequel/plugins/prepared_statements.rb +5 -11
  78. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -3
  79. data/lib/sequel/plugins/rcte_tree.rb +10 -16
  80. data/lib/sequel/plugins/single_table_inheritance.rb +5 -0
  81. data/lib/sequel/plugins/string_stripper.rb +1 -1
  82. data/lib/sequel/plugins/validation_class_methods.rb +5 -1
  83. data/lib/sequel/version.rb +1 -1
  84. metadata +14 -3
@@ -99,6 +99,7 @@ module Sequel
99
99
  end
100
100
  v.public_send(meth, *args, &block)
101
101
  end
102
+ ruby2_keywords(:method_missing) if respond_to?(:ruby2_keywords, true)
102
103
  end
103
104
 
104
105
  module ClassMethods
@@ -58,8 +58,7 @@ module Sequel
58
58
  # restricted_columns.
59
59
  def get_setter_methods
60
60
  meths = super
61
- #if !(respond_to?(:allowed_columns) && allowed_columns) && restricted_columns
62
- if (!defined?(::Sequel::Plugins::WhitelistSecurity) || !plugins.include?(::Sequel::Plugins::WhitelistSecurity) || !allowed_columns) && restricted_columns
61
+ if (!defined?(::Sequel::Plugins::WhitelistSecurity::ClassMethods) || !is_a?(::Sequel::Plugins::WhitelistSecurity::ClassMethods) || !allowed_columns) && restricted_columns
63
62
  meths -= restricted_columns.map{|x| "#{x}="}
64
63
  end
65
64
  meths
@@ -289,7 +289,7 @@ module Sequel
289
289
 
290
290
  # The name of the most recently joined table.
291
291
  def cti_table_name
292
- cti_tables ? cti_tables.last : dataset.first_source_alias
292
+ cti_tables.last
293
293
  end
294
294
 
295
295
  # The model class for the given key value.
@@ -310,7 +310,7 @@ module Sequel
310
310
  # Set table if this is a class table inheritance
311
311
  table = nil
312
312
  columns = nil
313
- if (n = subclass.name) && !n.empty?
313
+ if n = subclass.name
314
314
  if table = cti_table_map[n.to_sym]
315
315
  columns = db.schema(table).map(&:first)
316
316
  else
@@ -417,7 +417,7 @@ module Sequel
417
417
  @values[primary_key] ||= nid
418
418
  end
419
419
  end
420
- db.dataset.supports_insert_select? ? nil : @values[primary_key]
420
+ @values[primary_key]
421
421
  end
422
422
 
423
423
  # Update rows in all backing tables, using the columns in each table.
@@ -433,11 +433,6 @@ module Sequel
433
433
  end
434
434
  end
435
435
  end
436
-
437
- # Don't allow use of prepared statements.
438
- def use_prepared_statements_for?(type)
439
- false
440
- end
441
436
  end
442
437
  end
443
438
  end
@@ -82,11 +82,13 @@ module Sequel
82
82
  end
83
83
  END
84
84
  else
85
+ # :nocov:
85
86
  # :nodoc:
86
87
  def self.csv_call(*args, opts, &block)
87
88
  CSV.send(*args, opts, &block)
88
89
  end
89
90
  # :nodoc:
91
+ # :nocov:
90
92
  end
91
93
 
92
94
  module ClassMethods
@@ -41,6 +41,15 @@ module Sequel
41
41
  # artist.column_changes # => {}
42
42
  # artist.previous_changes # => {:name=>['Foo', 'Bar']}
43
43
  #
44
+ # artist.column_previously_was(:name)
45
+ # # => 'Foo'
46
+ # artist.column_previously_changed?(:name)
47
+ # # => true
48
+ # artist.column_previously_changed?(:name, from: 'Foo', to: 'Bar')
49
+ # # => true
50
+ # artist.column_previously_changed?(:name, from: 'Foo', to: 'Baz')
51
+ # # => false
52
+ #
44
53
  # There is one caveat; when used with a column that also uses the
45
54
  # serialization plugin, setting the column back to its original value
46
55
  # after changing it is not correctly detected and will leave an entry
@@ -105,6 +114,41 @@ module Sequel
105
114
  initial_values.has_key?(column)
106
115
  end
107
116
 
117
+ # Whether the column was previously changed.
118
+ # Options:
119
+ # :from :: If given, the previous initial value of the column must match this
120
+ # :to :: If given, the previous changed value of the column must match this
121
+ #
122
+ # update(name: 'Current')
123
+ # previous_changes # => {:name=>['Initial', 'Current']}
124
+ # column_previously_changed?(:name) # => true
125
+ # column_previously_changed?(:id) # => false
126
+ # column_previously_changed?(:name, from: 'Initial', to: 'Current') # => true
127
+ # column_previously_changed?(:name, from: 'Foo', to: 'Current') # => false
128
+ def column_previously_changed?(column, opts=OPTS)
129
+ return false unless (pc = @previous_changes) && (val = pc[column])
130
+
131
+ if opts.has_key?(:from)
132
+ return false unless val[0] == opts[:from]
133
+ end
134
+
135
+ if opts.has_key?(:to)
136
+ return false unless val[1] == opts[:to]
137
+ end
138
+
139
+ true
140
+ end
141
+
142
+ # The previous value of the column, which is the initial value of
143
+ # the column before the object was previously saved.
144
+ #
145
+ # initial_value(:name) # => 'Initial'
146
+ # update(name: 'Current')
147
+ # column_previously_was(:name) # => 'Initial'
148
+ def column_previously_was(column)
149
+ (pc = @previous_changes) && (val = pc[column]) && val[0]
150
+ end
151
+
108
152
  # Freeze internal data structures
109
153
  def freeze
110
154
  initial_values.freeze
@@ -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
 
@@ -192,23 +192,19 @@ module Sequel
192
192
  :args=>((key_aliases + col_aliases) if col_aliases))
193
193
  ds = r.apply_eager_dataset_changes(ds)
194
194
  ds = ds.select_append(ka) unless ds.opts[:select] == nil
195
- model.eager_load_results(r, eo.merge(:loader=>false, :initalize_rows=>false, :dataset=>ds, :id_map=>nil)) do |obj|
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|
@@ -300,17 +296,15 @@ module Sequel
300
296
  :args=>((key_aliases + col_aliases + (level ? [la] : [])) if col_aliases))
301
297
  ds = r.apply_eager_dataset_changes(ds)
302
298
  ds = ds.select_append(ka) unless ds.opts[:select] == nil
303
- model.eager_load_results(r, eo.merge(:loader=>false, :initalize_rows=>false, :dataset=>ds, :id_map=>nil, :associations=>OPTS)) do |obj|
299
+ model.eager_load_results(r, eo.merge(:loader=>false, :initialize_rows=>false, :dataset=>ds, :id_map=>nil, :associations=>OPTS)) do |obj|
304
300
  if level
305
301
  no_cache = no_cache_level == obj.values.delete(la)
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,11 @@ module Sequel
250
250
  end
251
251
  super
252
252
  end
253
+
254
+ # Don't allow use of prepared statements.
255
+ def use_prepared_statements_for?(type)
256
+ false
257
+ end
253
258
  end
254
259
  end
255
260
  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
@@ -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
@@ -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 = 33
9
+ MINOR = 38
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.33.0
4
+ version: 5.38.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-06-01 00:00:00.000000000 Z
11
+ date: 2020-11-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -181,6 +181,11 @@ extra_rdoc_files:
181
181
  - doc/release_notes/5.31.0.txt
182
182
  - doc/release_notes/5.32.0.txt
183
183
  - doc/release_notes/5.33.0.txt
184
+ - doc/release_notes/5.34.0.txt
185
+ - doc/release_notes/5.35.0.txt
186
+ - doc/release_notes/5.36.0.txt
187
+ - doc/release_notes/5.37.0.txt
188
+ - doc/release_notes/5.38.0.txt
184
189
  files:
185
190
  - CHANGELOG
186
191
  - MIT-LICENSE
@@ -235,6 +240,11 @@ files:
235
240
  - doc/release_notes/5.31.0.txt
236
241
  - doc/release_notes/5.32.0.txt
237
242
  - doc/release_notes/5.33.0.txt
243
+ - doc/release_notes/5.34.0.txt
244
+ - doc/release_notes/5.35.0.txt
245
+ - doc/release_notes/5.36.0.txt
246
+ - doc/release_notes/5.37.0.txt
247
+ - doc/release_notes/5.38.0.txt
238
248
  - doc/release_notes/5.4.0.txt
239
249
  - doc/release_notes/5.5.0.txt
240
250
  - doc/release_notes/5.6.0.txt
@@ -460,6 +470,7 @@ files:
460
470
  - lib/sequel/plugins/insert_returning_select.rb
461
471
  - lib/sequel/plugins/instance_filters.rb
462
472
  - lib/sequel/plugins/instance_hooks.rb
473
+ - lib/sequel/plugins/instance_specific_default.rb
463
474
  - lib/sequel/plugins/inverted_subsets.rb
464
475
  - lib/sequel/plugins/json_serializer.rb
465
476
  - lib/sequel/plugins/lazy_attributes.rb
@@ -540,7 +551,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
540
551
  - !ruby/object:Gem::Version
541
552
  version: '0'
542
553
  requirements: []
543
- rubygems_version: 3.1.2
554
+ rubygems_version: 3.1.4
544
555
  signing_key:
545
556
  specification_version: 4
546
557
  summary: The Database Toolkit for Ruby