sequel 5.60.0 → 5.60.1

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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +4 -0
  3. data/lib/sequel/adapters/jdbc/sqlite.rb +1 -1
  4. data/lib/sequel/adapters/jdbc.rb +5 -5
  5. data/lib/sequel/adapters/mock.rb +1 -1
  6. data/lib/sequel/adapters/mysql.rb +3 -3
  7. data/lib/sequel/adapters/oracle.rb +1 -1
  8. data/lib/sequel/adapters/postgres.rb +6 -6
  9. data/lib/sequel/adapters/shared/mssql.rb +1 -1
  10. data/lib/sequel/adapters/shared/oracle.rb +1 -1
  11. data/lib/sequel/adapters/sqlite.rb +1 -1
  12. data/lib/sequel/ast_transformer.rb +1 -1
  13. data/lib/sequel/database/misc.rb +2 -2
  14. data/lib/sequel/dataset/sql.rb +2 -2
  15. data/lib/sequel/extensions/duplicate_columns_handler.rb +1 -1
  16. data/lib/sequel/extensions/pg_array.rb +2 -2
  17. data/lib/sequel/extensions/pg_array_ops.rb +1 -1
  18. data/lib/sequel/extensions/pg_enum.rb +1 -1
  19. data/lib/sequel/extensions/pg_hstore_ops.rb +3 -3
  20. data/lib/sequel/extensions/pg_inet.rb +2 -2
  21. data/lib/sequel/extensions/pg_interval.rb +1 -1
  22. data/lib/sequel/extensions/pg_json.rb +1 -1
  23. data/lib/sequel/extensions/pg_json_ops.rb +3 -3
  24. data/lib/sequel/extensions/pg_multirange.rb +2 -2
  25. data/lib/sequel/extensions/pg_range.rb +2 -2
  26. data/lib/sequel/extensions/pg_row.rb +2 -2
  27. data/lib/sequel/extensions/pg_static_cache_updater.rb +2 -2
  28. data/lib/sequel/model/associations.rb +6 -6
  29. data/lib/sequel/model/base.rb +3 -3
  30. data/lib/sequel/model/exceptions.rb +1 -1
  31. data/lib/sequel/model/inflections.rb +6 -6
  32. data/lib/sequel/plugins/auto_validations.rb +1 -1
  33. data/lib/sequel/plugins/defaults_setter.rb +1 -1
  34. data/lib/sequel/plugins/dirty.rb +1 -1
  35. data/lib/sequel/plugins/insert_conflict.rb +1 -1
  36. data/lib/sequel/plugins/json_serializer.rb +1 -1
  37. data/lib/sequel/plugins/nested_attributes.rb +1 -1
  38. data/lib/sequel/plugins/pg_auto_constraint_validations.rb +1 -1
  39. data/lib/sequel/plugins/serialization.rb +1 -1
  40. data/lib/sequel/plugins/sharding.rb +1 -1
  41. data/lib/sequel/plugins/subclasses.rb +1 -1
  42. data/lib/sequel/plugins/validation_class_methods.rb +3 -3
  43. data/lib/sequel/plugins/validation_helpers.rb +1 -1
  44. data/lib/sequel/sql.rb +1 -1
  45. data/lib/sequel/version.rb +1 -1
  46. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1bd9076a491b881827f095bbb1177974861448054cd73376ee76a42ed0f72ee5
4
- data.tar.gz: e2e23f283d2d9f5b29df1510f5f39c8335cc47c37d0f92c848763cd437d4e668
3
+ metadata.gz: cd8695696d6b55edf6337870f3ff172aeb6fe2ef9ba4bbc23daae0af26908649
4
+ data.tar.gz: 2483bbb3549adbcb9f179165119051b7bb234d6e714e4afa116c0ffddf379dc6
5
5
  SHA512:
6
- metadata.gz: 309b37a25a51bc38c30c20276b7df1df4d21b6b14502b129fc363a0ac9bfc4897be03c21ec1d5b4b333eb6c1944491e4383406bb3f2cb96ba8dd1e98b513de42
7
- data.tar.gz: 58adf4e309a3bd1d921f95d168a79830cce4526767b8ee9379ce69463327b10f0db4ded44a4a8e474cd0dd31036546b120f3e38a07c3057a5290933cffd3b77a
6
+ metadata.gz: 0527cba1fcc06d8001cbd55473b3af5c23a9f5c004113fc24aa6f9e029c5ed2cf4f938bf184d79922164cdc3ea502d12860d46d64237bdbd306bf5ce50f59ffa
7
+ data.tar.gz: e13c17553592773e70c0e9a6753438444a5245f3cd0664c6c5a6c0a08a271d1d92180b110c7b7e5981f7ca6dc2b18d90da3feeb05a14ae863fcfd99d5673650e
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ === 5.60.1 (2022-09-02)
2
+
3
+ * Revert conversion of respond_to? to defined?, as it breaks with unused refinements on Ruby 2 (jeremyevans) (#1919)
4
+
1
5
  === 5.60.0 (2022-09-01)
2
6
 
3
7
  * Support arbitrary expressions for date_arithmetic interval values on PostgreSQL 9.4+ (jeremyevans)
@@ -125,7 +125,7 @@ module Sequel
125
125
 
126
126
  # The result code for the exception, if the jdbc driver supports result codes for exceptions.
127
127
  def sqlite_error_code(exception)
128
- exception.resultCode.code if defined?(exception.resultCode)
128
+ exception.resultCode.code if exception.respond_to?(:resultCode)
129
129
  end
130
130
  end
131
131
  end
@@ -38,7 +38,7 @@ module Sequel
38
38
  else
39
39
  if defined?(::Jdbc) && ( ::Jdbc.const_defined?(name) rescue nil )
40
40
  jdbc_module = ::Jdbc.const_get(name) # e.g. Jdbc::SQLite3
41
- jdbc_module.load_driver if defined?(jdbc_module.load_driver)
41
+ jdbc_module.load_driver if jdbc_module.respond_to?(:load_driver)
42
42
  end
43
43
  end
44
44
 
@@ -396,9 +396,9 @@ module Sequel
396
396
 
397
397
  def database_exception_sqlstate(exception, opts)
398
398
  if database_exception_use_sqlstates?
399
- while defined?(exception.cause)
399
+ while exception.respond_to?(:cause)
400
400
  exception = exception.cause
401
- return exception.getSQLState if defined?(exception.getSQLState)
401
+ return exception.getSQLState if exception.respond_to?(:getSQLState)
402
402
  end
403
403
  end
404
404
  nil
@@ -415,8 +415,8 @@ module Sequel
415
415
 
416
416
  # Raise a disconnect error if the SQL state of the cause of the exception indicates so.
417
417
  def disconnect_error?(exception, opts)
418
- cause = defined?(exception.cause) ? exception.cause : exception
419
- super || (defined?(cause.getSQLState) && cause.getSQLState =~ /^08/)
418
+ cause = exception.respond_to?(:cause) ? exception.cause : exception
419
+ super || (cause.respond_to?(:getSQLState) && cause.getSQLState =~ /^08/)
420
420
  end
421
421
 
422
422
  # Execute the prepared statement. If the provided name is a
@@ -257,7 +257,7 @@ module Sequel
257
257
  @shared_adapter = true
258
258
  extend(mod::DatabaseMethods)
259
259
  extend_datasets(mod::DatasetMethods)
260
- if defined?(mod.mock_adapter_setup)
260
+ if mod.respond_to?(:mock_adapter_setup)
261
261
  mod.mock_adapter_setup(self)
262
262
  end
263
263
  end
@@ -72,7 +72,7 @@ module Sequel
72
72
  def connect(server)
73
73
  opts = server_opts(server)
74
74
 
75
- if defined?(Mysql.init)
75
+ if Mysql.respond_to?(:init)
76
76
  conn = Mysql.init
77
77
  conn.options(Mysql::READ_DEFAULT_GROUP, opts[:config_default_group] || "client")
78
78
  conn.options(Mysql::OPT_LOCAL_INFILE, opts[:config_local_infile]) if opts.has_key?(:config_local_infile)
@@ -186,7 +186,7 @@ module Sequel
186
186
  elsif defined?(yield)
187
187
  yield conn
188
188
  end
189
- if defined?(conn.more_results?)
189
+ if conn.respond_to?(:more_results?)
190
190
  while conn.more_results? do
191
191
  if r
192
192
  r.free
@@ -207,7 +207,7 @@ module Sequel
207
207
  ensure
208
208
  r.free if r
209
209
  # Use up all results to avoid a commands out of sync message.
210
- if defined?(conn.more_results?)
210
+ if conn.respond_to?(:more_results?)
211
211
  while conn.more_results? do
212
212
  begin
213
213
  conn.next_result
@@ -149,7 +149,7 @@ module Sequel
149
149
  end
150
150
 
151
151
  def database_specific_error_class(exception, opts)
152
- return super unless defined?(exception.code)
152
+ return super unless exception.respond_to?(:code)
153
153
  case exception.code
154
154
  when 1400, 1407
155
155
  NotNullConstraintViolation
@@ -160,7 +160,7 @@ module Sequel
160
160
  begin
161
161
  defined?(yield) ? yield(q) : q.cmd_tuples
162
162
  ensure
163
- q.clear if q && defined?(q.clear)
163
+ q.clear if q && q.respond_to?(:clear)
164
164
  end
165
165
  end
166
166
 
@@ -258,7 +258,7 @@ module Sequel
258
258
 
259
259
  # :nocov:
260
260
  if encoding = opts[:encoding] || opts[:charset]
261
- if defined?(conn.set_client_encoding)
261
+ if conn.respond_to?(:set_client_encoding)
262
262
  conn.set_client_encoding(encoding)
263
263
  else
264
264
  conn.async_exec("set client_encoding to '#{encoding}'")
@@ -492,12 +492,12 @@ module Sequel
492
492
  opts[:after_listen].call(conn) if opts[:after_listen]
493
493
  timeout = opts[:timeout]
494
494
  if timeout
495
- timeout_block = defined?(timeout.call) ? timeout : proc{timeout}
495
+ timeout_block = timeout.respond_to?(:call) ? timeout : proc{timeout}
496
496
  end
497
497
 
498
498
  if l = opts[:loop]
499
499
  raise Error, 'calling #listen with :loop requires a block' unless block
500
- loop_call = defined?(l.call)
500
+ loop_call = l.respond_to?(:call)
501
501
  catch(:stop) do
502
502
  while true
503
503
  t = timeout_block ? [timeout_block.call] : []
@@ -582,7 +582,7 @@ module Sequel
582
582
 
583
583
  def database_exception_sqlstate(exception, opts)
584
584
  # :nocov:
585
- if defined?(exception.result) && (result = exception.result)
585
+ if exception.respond_to?(:result) && (result = exception.result)
586
586
  # :nocov:
587
587
  result.error_field(PGresult::PG_DIAG_SQLSTATE)
588
588
  end
@@ -625,7 +625,7 @@ module Sequel
625
625
  begin
626
626
  defined?(yield) ? yield(q) : q.cmd_tuples
627
627
  ensure
628
- q.clear if q && defined?(q.clear)
628
+ q.clear if q && q.respond_to?(:clear)
629
629
  end
630
630
  end
631
631
 
@@ -205,7 +205,7 @@ module Sequel
205
205
  return @server_version = Integer(@opts[:server_version])
206
206
  end
207
207
  @server_version = synchronize(server) do |conn|
208
- (conn.server_version rescue nil) if defined?(conn.server_version)
208
+ (conn.server_version rescue nil) if conn.respond_to?(:server_version)
209
209
  end
210
210
  unless @server_version
211
211
  m = /^(\d+)\.(\d+)\.(\d+)/.match(fetch("SELECT CAST(SERVERPROPERTY('ProductVersion') AS varchar)").single_value.to_s)
@@ -121,7 +121,7 @@ module Sequel
121
121
  def server_version(server=nil)
122
122
  return @server_version if @server_version
123
123
  @server_version = synchronize(server) do |conn|
124
- (conn.server_version rescue nil) if defined?(conn.server_version)
124
+ (conn.server_version rescue nil) if conn.respond_to?(:server_version)
125
125
  end
126
126
  unless @server_version
127
127
  @server_version = if m = /(\d+)\.(\d+)\.?(\d+)?\.?(\d+)?/.match(fetch("select version from PRODUCT_COMPONENT_VERSION where lower(product) like 'oracle%'").single_value)
@@ -305,7 +305,7 @@ module Sequel
305
305
  if USE_EXTENDED_RESULT_CODES
306
306
  # Support SQLite exception codes if ruby-sqlite3 supports them.
307
307
  def sqlite_error_code(exception)
308
- exception.code if defined?(exception.code)
308
+ exception.code if exception.respond_to?(:code)
309
309
  end
310
310
  end
311
311
  end
@@ -81,7 +81,7 @@ module Sequel
81
81
  when SQL::Wrapper
82
82
  SQL::Wrapper.new(v(o.value))
83
83
  when SQL::Expression
84
- if defined?(o.sequel_ast_transform)
84
+ if o.respond_to?(:sequel_ast_transform)
85
85
  o.sequel_ast_transform(method(:v))
86
86
  else
87
87
  o
@@ -350,7 +350,7 @@ module Sequel
350
350
  # strings with all whitespace, and ones that respond
351
351
  # true to empty?
352
352
  def blank_object?(obj)
353
- return obj.blank? if defined?(obj.blank?)
353
+ return obj.blank? if obj.respond_to?(:blank?)
354
354
  case obj
355
355
  when NilClass, FalseClass
356
356
  true
@@ -359,7 +359,7 @@ module Sequel
359
359
  when String
360
360
  obj.strip.empty?
361
361
  else
362
- defined?(obj.empty?) ? obj.empty? : false
362
+ obj.respond_to?(:empty?) ? obj.empty? : false
363
363
  end
364
364
  end
365
365
 
@@ -1398,9 +1398,9 @@ module Sequel
1398
1398
  # don't cache SQL for a dataset that uses this.
1399
1399
  disable_sql_caching!
1400
1400
 
1401
- if defined?(v.sql_literal_append)
1401
+ if v.respond_to?(:sql_literal_append)
1402
1402
  v.sql_literal_append(self, sql)
1403
- elsif defined?(v.sql_literal)
1403
+ elsif v.respond_to?(:sql_literal)
1404
1404
  sql << v.sql_literal(self)
1405
1405
  else
1406
1406
  raise Error, "can't express #{v.inspect} as a SQL literal"
@@ -77,7 +77,7 @@ module Sequel
77
77
  def duplicate_columns_handler_type(cols)
78
78
  handler = opts.fetch(:on_duplicate_columns){db.opts.fetch(:on_duplicate_columns, :warn)}
79
79
 
80
- if defined?(handler.call)
80
+ if handler.respond_to?(:call)
81
81
  handler.call(cols)
82
82
  else
83
83
  handler
@@ -301,7 +301,7 @@ module Sequel
301
301
  end
302
302
  end
303
303
 
304
- unless defined?(Sequel::Postgres.parse_pg_array)
304
+ unless Sequel::Postgres.respond_to?(:parse_pg_array)
305
305
  require 'strscan'
306
306
 
307
307
  # PostgreSQL array parser that handles PostgreSQL array output format.
@@ -412,7 +412,7 @@ module Sequel
412
412
  @converter = converter
413
413
  end
414
414
 
415
- if defined?(Sequel::Postgres.parse_pg_array)
415
+ if Sequel::Postgres.respond_to?(:parse_pg_array)
416
416
  # :nocov:
417
417
  # Use sequel_pg's C-based parser if it has already been defined.
418
418
  def call(string)
@@ -158,7 +158,7 @@ module Sequel
158
158
  Sequel.function(:hstore, self, wrap_array(arg))
159
159
  end
160
160
  # :nocov:
161
- if defined?(Sequel.hstore_op)
161
+ if Sequel.respond_to?(:hstore_op)
162
162
  # :nocov:
163
163
  v = Sequel.hstore_op(v)
164
164
  end
@@ -144,7 +144,7 @@ module Sequel
144
144
  select_hash_groups(Sequel.cast(:enumtypid, Integer).as(:v), :enumlabel).freeze
145
145
  enum_labels.each_value(&:freeze)
146
146
 
147
- if defined?(register_array_type)
147
+ if respond_to?(:register_array_type)
148
148
  array_types = metadata_dataset.
149
149
  from(:pg_type).
150
150
  where(:oid=>enum_labels.keys).
@@ -296,7 +296,7 @@ module Sequel
296
296
 
297
297
  # Wrap argument in a PGArray if it is an array
298
298
  def wrap_input_array(obj)
299
- if obj.is_a?(Array) && defined?(Sequel.pg_array)
299
+ if obj.is_a?(Array) && Sequel.respond_to?(:pg_array)
300
300
  Sequel.pg_array(obj)
301
301
  else
302
302
  obj
@@ -305,7 +305,7 @@ module Sequel
305
305
 
306
306
  # Wrap argument in an Hstore if it is a hash
307
307
  def wrap_input_hash(obj)
308
- if obj.is_a?(Hash) && defined?(Sequel.hstore)
308
+ if obj.is_a?(Hash) && Sequel.respond_to?(:hstore)
309
309
  Sequel.hstore(obj)
310
310
  else
311
311
  obj
@@ -314,7 +314,7 @@ module Sequel
314
314
 
315
315
  # Wrap argument in a PGArrayOp if supported
316
316
  def wrap_output_array(obj)
317
- if defined?(Sequel.pg_array_op)
317
+ if Sequel.respond_to?(:pg_array_op)
318
318
  Sequel.pg_array_op(obj)
319
319
  else
320
320
  obj
@@ -49,13 +49,13 @@ module Sequel
49
49
  meth = IPAddr.method(:new)
50
50
  add_conversion_proc(869, meth)
51
51
  add_conversion_proc(650, meth)
52
- if defined?(register_array_type)
52
+ if respond_to?(:register_array_type)
53
53
  register_array_type('inet', :oid=>1041, :scalar_oid=>869)
54
54
  register_array_type('cidr', :oid=>651, :scalar_oid=>650)
55
55
  end
56
56
  end
57
57
 
58
- if defined?(register_array_type)
58
+ if respond_to?(:register_array_type)
59
59
  register_array_type('macaddr', :oid=>1040, :scalar_oid=>829)
60
60
  end
61
61
  @schema_type_classes[:ipaddr] = IPAddr
@@ -144,7 +144,7 @@ module Sequel
144
144
  db.instance_exec do
145
145
  extend_datasets(IntervalDatasetMethods)
146
146
  add_conversion_proc(1186, Postgres::IntervalDatabaseMethods::PARSER)
147
- if defined?(register_array_type)
147
+ if respond_to?(:register_array_type)
148
148
  register_array_type('interval', :oid=>1187, :scalar_oid=>1186)
149
149
  end
150
150
  @schema_type_classes[:interval] = ActiveSupport::Duration
@@ -227,7 +227,7 @@ module Sequel
227
227
  db.instance_exec do
228
228
  add_conversion_proc(114, method(:_db_parse_json))
229
229
  add_conversion_proc(3802, method(:_db_parse_jsonb))
230
- if defined?(register_array_type)
230
+ if respond_to?(:register_array_type)
231
231
  register_array_type('json', :oid=>199, :scalar_oid=>114)
232
232
  register_array_type('jsonb', :oid=>3807, :scalar_oid=>3802)
233
233
  end
@@ -358,7 +358,7 @@ module Sequel
358
358
  # Automatically wrap argument in a PGArray if it is a plain Array.
359
359
  # Requires that the pg_array extension has been loaded to work.
360
360
  def wrap_array(arg)
361
- if arg.instance_of?(Array) && defined?(Sequel.pg_array)
361
+ if arg.instance_of?(Array) && Sequel.respond_to?(:pg_array)
362
362
  Sequel.pg_array(arg)
363
363
  else
364
364
  arg
@@ -652,7 +652,7 @@ module Sequel
652
652
 
653
653
  # Wrap argument in a PGArray if it is an array
654
654
  def wrap_input_array(obj)
655
- if obj.is_a?(Array) && defined?(Sequel.pg_array)
655
+ if obj.is_a?(Array) && Sequel.respond_to?(:pg_array)
656
656
  Sequel.pg_array(obj)
657
657
  else
658
658
  obj
@@ -661,7 +661,7 @@ module Sequel
661
661
 
662
662
  # Wrap argument in a JSONBArray or JSONBHash if it is an array or hash.
663
663
  def wrap_input_jsonb(obj)
664
- if defined?(Sequel.pg_jsonb) && (obj.is_a?(Array) || obj.is_a?(Hash))
664
+ if Sequel.respond_to?(:pg_jsonb) && (obj.is_a?(Array) || obj.is_a?(Hash))
665
665
  Sequel.pg_jsonb(obj)
666
666
  else
667
667
  obj
@@ -124,7 +124,7 @@ module Sequel
124
124
  register_multirange_type('datemultirange', :range_oid=>3912, :oid=>4535)
125
125
  register_multirange_type('int8multirange', :range_oid=>3926, :oid=>4536)
126
126
 
127
- if defined?(register_array_type)
127
+ if respond_to?(:register_array_type)
128
128
  register_array_type('int4multirange', :oid=>6150, :scalar_oid=>4451, :scalar_typecast=>:int4multirange)
129
129
  register_array_type('nummultirange', :oid=>6151, :scalar_oid=>4532, :scalar_typecast=>:nummultirange)
130
130
  register_array_type('tsmultirange', :oid=>6152, :scalar_oid=>4533, :scalar_typecast=>:tsmultirange)
@@ -141,7 +141,7 @@ module Sequel
141
141
  add_conversion_proc(4533, PGMultiRange::Creator.new("tsmultirange", procs[3908]))
142
142
  add_conversion_proc(4534, PGMultiRange::Creator.new("tstzmultirange", procs[3910]))
143
143
 
144
- if defined?(register_array_type) && defined?(PGArray::Creator)
144
+ if respond_to?(:register_array_type) && defined?(PGArray::Creator)
145
145
  add_conversion_proc(6152, PGArray::Creator.new("tsmultirange", procs[4533]))
146
146
  add_conversion_proc(6153, PGArray::Creator.new("tstzmultirange", procs[4534]))
147
147
  end
@@ -139,7 +139,7 @@ module Sequel
139
139
  register_range_type('tstzrange', :oid=>3910, :subtype_oid=>1184)
140
140
  register_range_type('daterange', :oid=>3912, :subtype_oid=>1082)
141
141
  register_range_type('int8range', :oid=>3926, :subtype_oid=>20)
142
- if defined?(register_array_type)
142
+ if respond_to?(:register_array_type)
143
143
  register_array_type('int4range', :oid=>3905, :scalar_oid=>3904, :scalar_typecast=>:int4range)
144
144
  register_array_type('numrange', :oid=>3907, :scalar_oid=>3906, :scalar_typecast=>:numrange)
145
145
  register_array_type('tsrange', :oid=>3909, :scalar_oid=>3908, :scalar_typecast=>:tsrange)
@@ -154,7 +154,7 @@ module Sequel
154
154
  procs = conversion_procs
155
155
  add_conversion_proc(3908, Parser.new("tsrange", procs[1114]))
156
156
  add_conversion_proc(3910, Parser.new("tstzrange", procs[1184]))
157
- if defined?(register_array_type) && defined?(PGArray::Creator)
157
+ if respond_to?(:register_array_type) && defined?(PGArray::Creator)
158
158
  add_conversion_proc(3909, PGArray::Creator.new("tsrange", procs[3908]))
159
159
  add_conversion_proc(3911, PGArray::Creator.new("tstzrange", procs[3910]))
160
160
  end
@@ -375,7 +375,7 @@ module Sequel
375
375
  @row_schema_types = {}
376
376
  extend(@row_type_method_module = Module.new)
377
377
  add_conversion_proc(2249, PGRow::Parser.new(:converter=>PGRow::ArrayRow))
378
- if defined?(register_array_type)
378
+ if respond_to?(:register_array_type)
379
379
  register_array_type('record', :oid=>2287, :scalar_oid=>2249)
380
380
  end
381
381
  end
@@ -464,7 +464,7 @@ module Sequel
464
464
  parser = Parser.new(parser_opts)
465
465
  add_conversion_proc(parser.oid, parser)
466
466
 
467
- if defined?(register_array_type) && array_oid && array_oid > 0
467
+ if respond_to?(:register_array_type) && array_oid && array_oid > 0
468
468
  array_type_name = if type_schema
469
469
  "#{type_schema}.#{type_name}"
470
470
  else
@@ -115,13 +115,13 @@ SQL
115
115
  # :before_thread_exit :: An object that responds to +call+ that is called before the
116
116
  # the created thread exits.
117
117
  def listen_for_static_cache_updates(models, opts=OPTS)
118
- raise Error, "this database object does not respond to listen, use the postgres adapter with the pg driver" unless defined?(listen)
118
+ raise Error, "this database object does not respond to listen, use the postgres adapter with the pg driver" unless respond_to?(:listen)
119
119
  models = [models] unless models.is_a?(Array)
120
120
  raise Error, "array of models to listen for changes cannot be empty" if models.empty?
121
121
 
122
122
  oid_map = {}
123
123
  models.each do |model|
124
- raise Error, "#{model.inspect} does not use the static_cache plugin" unless defined?(model.load_cache)
124
+ raise Error, "#{model.inspect} does not use the static_cache plugin" unless model.respond_to?(:load_cache)
125
125
  oid_map[get(regclass_oid(model.dataset.first_source_table))] = model
126
126
  end
127
127
 
@@ -3016,7 +3016,7 @@ module Sequel
3016
3016
  def complex_expression_sql_append(sql, op, args)
3017
3017
  r = args[1]
3018
3018
  if (((op == :'=' || op == :'!=') && r.is_a?(Sequel::Model)) ||
3019
- (multiple = ((op == :IN || op == :'NOT IN') && ((is_ds = r.is_a?(Sequel::Dataset)) || (defined?(r.all?) && r.all?{|x| x.is_a?(Sequel::Model)})))))
3019
+ (multiple = ((op == :IN || op == :'NOT IN') && ((is_ds = r.is_a?(Sequel::Dataset)) || (r.respond_to?(:all?) && r.all?{|x| x.is_a?(Sequel::Model)})))))
3020
3020
  l = args[0]
3021
3021
  if ar = model.association_reflections[l]
3022
3022
  raise Error, "filtering by associations is not allowed for #{ar.inspect}" if ar[:allow_filtering_by] == false
@@ -3024,7 +3024,7 @@ module Sequel
3024
3024
  if multiple
3025
3025
  klass = ar.associated_class
3026
3026
  if is_ds
3027
- if defined?(r.model)
3027
+ if r.respond_to?(:model)
3028
3028
  unless r.model <= klass
3029
3029
  # A dataset for a different model class, could be a valid regular query
3030
3030
  return super
@@ -3356,10 +3356,10 @@ module Sequel
3356
3356
  assoc_table_alias = ds.unused_table_alias(alias_base)
3357
3357
  loader = r[:eager_grapher]
3358
3358
  if !associations.empty?
3359
- if defined?(associations.first.call)
3359
+ if associations.first.respond_to?(:call)
3360
3360
  callback = associations.first
3361
3361
  associations = {}
3362
- elsif associations.length == 1 && (assocs = associations.first).is_a?(Hash) && assocs.length == 1 && (pr_assoc = assocs.to_a.first) && defined?(pr_assoc.first.call)
3362
+ elsif associations.length == 1 && (assocs = associations.first).is_a?(Hash) && assocs.length == 1 && (pr_assoc = assocs.to_a.first) && pr_assoc.first.respond_to?(:call)
3363
3363
  callback, assoc = pr_assoc
3364
3364
  associations = assoc.is_a?(Array) ? assoc : [assoc]
3365
3365
  end
@@ -3601,10 +3601,10 @@ module Sequel
3601
3601
  end
3602
3602
 
3603
3603
  associations = eager_assoc[r[:name]]
3604
- if defined?(associations.call)
3604
+ if associations.respond_to?(:call)
3605
3605
  eager_block = associations
3606
3606
  associations = OPTS
3607
- elsif associations.is_a?(Hash) && associations.length == 1 && (pr_assoc = associations.to_a.first) && defined?(pr_assoc.first.call)
3607
+ elsif associations.is_a?(Hash) && associations.length == 1 && (pr_assoc = associations.to_a.first) && pr_assoc.first.respond_to?(:call)
3608
3608
  eager_block, associations = pr_assoc
3609
3609
  end
3610
3610
 
@@ -492,13 +492,13 @@ module Sequel
492
492
  def plugin(plugin, *args, &block)
493
493
  m = plugin.is_a?(Module) ? plugin : plugin_module(plugin)
494
494
 
495
- if !defined?(m.apply) && !defined?(m.configure) && (!args.empty? || block)
495
+ if !m.respond_to?(:apply) && !m.respond_to?(:configure) && (!args.empty? || block)
496
496
  Deprecation.deprecate("Plugin #{plugin} accepts no arguments or block, and passing arguments/block to it", "Remove arguments and block when loading the plugin")
497
497
  end
498
498
 
499
499
  unless @plugins.include?(m)
500
500
  @plugins << m
501
- m.apply(self, *args, &block) if defined?(m.apply)
501
+ m.apply(self, *args, &block) if m.respond_to?(:apply)
502
502
  extend(m::ClassMethods) if m.const_defined?(:ClassMethods, false)
503
503
  include(m::InstanceMethods) if m.const_defined?(:InstanceMethods, false)
504
504
  if m.const_defined?(:DatasetMethods, false)
@@ -506,7 +506,7 @@ module Sequel
506
506
  end
507
507
  end
508
508
 
509
- m.configure(self, *args, &block) if defined?(m.configure)
509
+ m.configure(self, *args, &block) if m.respond_to?(:configure)
510
510
  end
511
511
  # :nocov:
512
512
  ruby2_keywords(:plugin) if respond_to?(:ruby2_keywords, true)
@@ -44,7 +44,7 @@ module Sequel
44
44
  errors = @model.errors
45
45
  end
46
46
 
47
- if defined?(errors.full_messages)
47
+ if errors.respond_to?(:full_messages)
48
48
  @errors = errors
49
49
  super(errors.full_messages.join(', '))
50
50
  else
@@ -99,7 +99,7 @@ module Sequel
99
99
  # Convert the given string to CamelCase. Will also convert '/' to '::' which is useful for converting paths to namespaces.
100
100
  def camelize(s)
101
101
  s = s.to_s
102
- return s.camelize if defined?(s.camelize)
102
+ return s.camelize if s.respond_to?(:camelize)
103
103
  s = s.gsub(/\/(.?)/){|x| "::#{x[-1..-1].upcase unless x == '/'}"}.gsub(/(^|_)(.)/){|x| x[-1..-1].upcase}
104
104
  s
105
105
  end
@@ -109,7 +109,7 @@ module Sequel
109
109
  # or is not initialized.
110
110
  def constantize(s)
111
111
  s = s.to_s
112
- return s.constantize if defined?(s.constantize)
112
+ return s.constantize if s.respond_to?(:constantize)
113
113
  raise(NameError, "#{s.inspect} is not a valid constant name!") unless m = /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/.match(s)
114
114
  Object.module_eval("::#{m[1]}", __FILE__, __LINE__)
115
115
  end
@@ -117,14 +117,14 @@ module Sequel
117
117
  # Removes the module part from the expression in the string
118
118
  def demodulize(s)
119
119
  s = s.to_s
120
- return s.demodulize if defined?(s.demodulize)
120
+ return s.demodulize if s.respond_to?(:demodulize)
121
121
  s.gsub(/^.*::/, '')
122
122
  end
123
123
 
124
124
  # Returns the plural form of the word in the string.
125
125
  def pluralize(s)
126
126
  s = s.to_s
127
- return s.pluralize if defined?(s.pluralize)
127
+ return s.pluralize if s.respond_to?(:pluralize)
128
128
  result = s.dup
129
129
  Inflections.plurals.each{|(rule, replacement)| break if result.gsub!(rule, replacement)} unless Inflections.uncountables.include?(s.downcase)
130
130
  result
@@ -133,7 +133,7 @@ module Sequel
133
133
  # The reverse of pluralize, returns the singular form of a word in a string.
134
134
  def singularize(s)
135
135
  s = s.to_s
136
- return s.singularize if defined?(s.singularize)
136
+ return s.singularize if s.respond_to?(:singularize)
137
137
  result = s.dup
138
138
  Inflections.singulars.each{|(rule, replacement)| break if result.gsub!(rule, replacement)} unless Inflections.uncountables.include?(s.downcase)
139
139
  result
@@ -143,7 +143,7 @@ module Sequel
143
143
  # Also changes '::' to '/' to convert namespaces to paths.
144
144
  def underscore(s)
145
145
  s = s.to_s
146
- return s.underscore if defined?(s.underscore)
146
+ return s.underscore if s.respond_to?(:underscore)
147
147
  s.gsub('::', '/').gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
148
148
  gsub(/([a-z\d])([A-Z])/, '\1_\2').tr('-', '_').downcase
149
149
  end
@@ -252,7 +252,7 @@ module Sequel
252
252
 
253
253
  unless skip.include?(:unique)
254
254
  unique_opts = Hash[opts[:unique]]
255
- if defined?(model.sti_dataset)
255
+ if model.respond_to?(:sti_dataset)
256
256
  unique_opts[:dataset] = model.sti_dataset
257
257
  end
258
258
  model.auto_validate_unique_columns.each{|cols| validates_unique(cols, unique_opts)}
@@ -117,7 +117,7 @@ module Sequel
117
117
  def [](k)
118
118
  if new? && !values.has_key?(k)
119
119
  v = model.default_values.fetch(k){return}
120
- v = v.call if defined?(v.call)
120
+ v = v.call if v.respond_to?(:call)
121
121
  values[k] = v if model.cache_default_values?
122
122
  v
123
123
  else
@@ -203,7 +203,7 @@ module Sequel
203
203
  get_column_value(column)
204
204
  end
205
205
 
206
- initial_values[column] = if value && value != true && defined?(value.clone)
206
+ initial_values[column] = if value && value != true && value.respond_to?(:clone)
207
207
  begin
208
208
  value.clone
209
209
  rescue TypeError
@@ -36,7 +36,7 @@ module Sequel
36
36
  module InsertConflict
37
37
  def self.configure(model)
38
38
  model.instance_exec do
39
- if @dataset && !defined?(@dataset.insert_conflict)
39
+ if @dataset && !@dataset.respond_to?(:insert_conflict)
40
40
  raise Error, "#{self}'s dataset does not support insert_conflict"
41
41
  end
42
42
  end
@@ -152,7 +152,7 @@ module Sequel
152
152
  if obj.is_a?(Array)
153
153
  obj.map{|x| object_to_json_data(x, *args, &block)}
154
154
  else
155
- if defined?(obj.to_json_data)
155
+ if obj.respond_to?(:to_json_data)
156
156
  obj.to_json_data(*args, &block)
157
157
  else
158
158
  begin
@@ -259,7 +259,7 @@ module Sequel
259
259
  # specific :fields if configured.
260
260
  def nested_attributes_set_attributes(meta, obj, attributes)
261
261
  if fields = meta[:fields]
262
- fields = fields.call(obj) if defined?(fields.call)
262
+ fields = fields.call(obj) if fields.respond_to?(:call)
263
263
  obj.set_fields(attributes, fields, :missing=>:skip)
264
264
  else
265
265
  obj.set(attributes)
@@ -159,7 +159,7 @@ module Sequel
159
159
 
160
160
  case @dataset.first_source_table
161
161
  when Symbol, String, SQL::Identifier, SQL::QualifiedIdentifier
162
- convert_errors = defined?(db.error_info)
162
+ convert_errors = db.respond_to?(:error_info)
163
163
  end
164
164
 
165
165
  unless convert_errors
@@ -162,7 +162,7 @@ module Sequel
162
162
  if !cc.include?(column) && (new? || get_column_value(column) != v)
163
163
  cc << column
164
164
 
165
- will_change_column(column) if defined?(will_change_column)
165
+ will_change_column(column) if respond_to?(:will_change_column)
166
166
  end
167
167
 
168
168
  deserialized_values[column] = v
@@ -91,7 +91,7 @@ module Sequel
91
91
  # +many_to_many+ association, make sure the associated object is created on the
92
92
  # current object's shard, unless the passed object already has an assigned shard.
93
93
  def ensure_associated_primary_key(opts, o, *args)
94
- o.set_server?(@server) if defined?(o.set_server?)
94
+ o.set_server?(@server) if o.respond_to?(:set_server?)
95
95
  super
96
96
  end
97
97
 
@@ -35,7 +35,7 @@ module Sequel
35
35
  # class B < Sequel::Model; end
36
36
  # a # => [A, B]
37
37
  module Subclasses
38
- NEED_SUBCLASSES = !defined?(Object.subclasses) || Object.method(:subclasses).source_location
38
+ NEED_SUBCLASSES = !Object.respond_to?(:subclasses) || Object.method(:subclasses).source_location
39
39
  private_constant :NEED_SUBCLASSES
40
40
 
41
41
  # Initialize the subclasses instance variable for the model.
@@ -282,7 +282,7 @@ module Sequel
282
282
  o.errors.add(a, opts[:message] || opts[:wrong_length]) unless v && v.size == i
283
283
  end
284
284
  if w = opts[:within]
285
- o.errors.add(a, opts[:message] || opts[:wrong_length]) unless v && w.public_send(defined?(w.cover?) ? :cover? : :include?, v.size)
285
+ o.errors.add(a, opts[:message] || opts[:wrong_length]) unless v && w.public_send(w.respond_to?(:cover?) ? :cover? : :include?, v.size)
286
286
  end
287
287
  end
288
288
  end
@@ -337,14 +337,14 @@ module Sequel
337
337
  def validates_inclusion_of(*atts)
338
338
  opts = extract_options!(atts)
339
339
  n = opts[:in]
340
- unless n && (defined?(n.cover?) || defined?(n.include?))
340
+ unless n && (n.respond_to?(:cover?) || n.respond_to?(:include?))
341
341
  raise ArgumentError, "The :in parameter is required, and must respond to cover? or include?"
342
342
  end
343
343
  opts[:message] ||= "is not in range or set: #{n.inspect}"
344
344
  reflect_validation(:inclusion, opts, atts)
345
345
  atts << opts
346
346
  validates_each(*atts) do |o, a, v|
347
- o.errors.add(a, opts[:message]) unless n.public_send(defined?(n.cover?) ? :cover? : :include?, v)
347
+ o.errors.add(a, opts[:message]) unless n.public_send(n.respond_to?(:cover?) ? :cover? : :include?, v)
348
348
  end
349
349
  end
350
350
 
@@ -107,7 +107,7 @@ module Sequel
107
107
 
108
108
  # Check attribute value(s) is included in the given set.
109
109
  def validates_includes(set, atts, opts=OPTS)
110
- validatable_attributes_for_type(:includes, atts, opts){|a,v,m| validation_error_message(m, set) unless set.public_send(defined?(set.cover?) ? :cover? : :include?, v)}
110
+ validatable_attributes_for_type(:includes, atts, opts){|a,v,m| validation_error_message(m, set) unless set.public_send(set.respond_to?(:cover?) ? :cover? : :include?, v)}
111
111
  end
112
112
 
113
113
  # Check attribute value(s) string representation is a valid integer.
data/lib/sequel/sql.rb CHANGED
@@ -1347,7 +1347,7 @@ module Sequel
1347
1347
  # underlying callable only accepts a single argument, call it
1348
1348
  # with the given dataset.
1349
1349
  def call(ds)
1350
- if defined?(@callable.arity) && @callable.arity == 1
1350
+ if @callable.respond_to?(:arity) && @callable.arity == 1
1351
1351
  @callable.call(ds)
1352
1352
  else
1353
1353
  @callable.call
@@ -10,7 +10,7 @@ module Sequel
10
10
 
11
11
  # The tiny version of Sequel. Usually 0, only bumped for bugfix
12
12
  # releases that fix regressions from previous versions.
13
- TINY = 0
13
+ TINY = 1
14
14
 
15
15
  # The version of Sequel you are using, as a string (e.g. "2.11.0")
16
16
  VERSION = [MAJOR, MINOR, TINY].join('.').freeze
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.60.0
4
+ version: 5.60.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-01 00:00:00.000000000 Z
11
+ date: 2022-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest