sequel 4.41.0 → 4.42.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (256) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +98 -0
  3. data/README.rdoc +23 -10
  4. data/doc/active_record.rdoc +4 -4
  5. data/doc/advanced_associations.rdoc +2 -2
  6. data/doc/association_basics.rdoc +5 -2
  7. data/doc/cheat_sheet.rdoc +3 -3
  8. data/doc/core_extensions.rdoc +2 -2
  9. data/doc/dataset_basics.rdoc +4 -4
  10. data/doc/dataset_filtering.rdoc +1 -1
  11. data/doc/migration.rdoc +19 -1
  12. data/doc/prepared_statements.rdoc +2 -2
  13. data/doc/release_notes/4.42.0.txt +221 -0
  14. data/doc/testing.rdoc +3 -1
  15. data/lib/sequel/adapters/ado/access.rb +0 -1
  16. data/lib/sequel/adapters/ado/mssql.rb +0 -1
  17. data/lib/sequel/adapters/do/mysql.rb +0 -1
  18. data/lib/sequel/adapters/do/postgres.rb +0 -1
  19. data/lib/sequel/adapters/do/sqlite3.rb +0 -1
  20. data/lib/sequel/adapters/ibmdb.rb +21 -25
  21. data/lib/sequel/adapters/jdbc.rb +8 -16
  22. data/lib/sequel/adapters/jdbc/as400.rb +0 -1
  23. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -1
  24. data/lib/sequel/adapters/jdbc/db2.rb +0 -1
  25. data/lib/sequel/adapters/jdbc/derby.rb +0 -1
  26. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -1
  27. data/lib/sequel/adapters/jdbc/h2.rb +0 -1
  28. data/lib/sequel/adapters/jdbc/hsqldb.rb +0 -1
  29. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -1
  30. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -1
  31. data/lib/sequel/adapters/jdbc/jtds.rb +0 -1
  32. data/lib/sequel/adapters/jdbc/mssql.rb +0 -1
  33. data/lib/sequel/adapters/jdbc/mysql.rb +0 -1
  34. data/lib/sequel/adapters/jdbc/oracle.rb +0 -1
  35. data/lib/sequel/adapters/jdbc/postgresql.rb +0 -13
  36. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +0 -1
  37. data/lib/sequel/adapters/jdbc/sqlite.rb +0 -1
  38. data/lib/sequel/adapters/jdbc/sqlserver.rb +3 -4
  39. data/lib/sequel/adapters/mock.rb +54 -12
  40. data/lib/sequel/adapters/mysql.rb +1 -1
  41. data/lib/sequel/adapters/mysql2.rb +11 -17
  42. data/lib/sequel/adapters/odbc/mssql.rb +0 -1
  43. data/lib/sequel/adapters/oracle.rb +8 -20
  44. data/lib/sequel/adapters/postgres.rb +11 -29
  45. data/lib/sequel/adapters/shared/access.rb +5 -12
  46. data/lib/sequel/adapters/shared/cubrid.rb +4 -13
  47. data/lib/sequel/adapters/shared/db2.rb +4 -2
  48. data/lib/sequel/adapters/shared/firebird.rb +2 -4
  49. data/lib/sequel/adapters/shared/informix.rb +4 -2
  50. data/lib/sequel/adapters/shared/mssql.rb +3 -5
  51. data/lib/sequel/adapters/shared/mysql.rb +4 -14
  52. data/lib/sequel/adapters/shared/oracle.rb +1 -3
  53. data/lib/sequel/adapters/shared/postgres.rb +16 -38
  54. data/lib/sequel/adapters/shared/progress.rb +0 -2
  55. data/lib/sequel/adapters/shared/sqlanywhere.rb +0 -2
  56. data/lib/sequel/adapters/shared/sqlite.rb +20 -16
  57. data/lib/sequel/adapters/sqlite.rb +8 -20
  58. data/lib/sequel/adapters/swift/mysql.rb +0 -1
  59. data/lib/sequel/adapters/swift/postgres.rb +0 -1
  60. data/lib/sequel/adapters/swift/sqlite.rb +0 -1
  61. data/lib/sequel/adapters/tinytds.rb +4 -12
  62. data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +1 -1
  63. data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -2
  64. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +11 -34
  65. data/lib/sequel/adapters/utils/stored_procedures.rb +9 -22
  66. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +26 -0
  67. data/lib/sequel/ast_transformer.rb +2 -2
  68. data/lib/sequel/database/dataset.rb +1 -1
  69. data/lib/sequel/database/dataset_defaults.rb +0 -66
  70. data/lib/sequel/database/features.rb +6 -0
  71. data/lib/sequel/database/misc.rb +31 -17
  72. data/lib/sequel/database/query.rb +7 -4
  73. data/lib/sequel/database/schema_methods.rb +1 -1
  74. data/lib/sequel/dataset.rb +8 -8
  75. data/lib/sequel/dataset/actions.rb +140 -46
  76. data/lib/sequel/dataset/features.rb +1 -5
  77. data/lib/sequel/dataset/graph.rb +7 -8
  78. data/lib/sequel/dataset/misc.rb +127 -56
  79. data/lib/sequel/dataset/mutation.rb +9 -20
  80. data/lib/sequel/dataset/placeholder_literalizer.rb +10 -1
  81. data/lib/sequel/dataset/prepared_statements.rb +102 -46
  82. data/lib/sequel/dataset/query.rb +155 -72
  83. data/lib/sequel/dataset/sql.rb +26 -9
  84. data/lib/sequel/extensions/columns_introspection.rb +3 -1
  85. data/lib/sequel/extensions/core_extensions.rb +5 -5
  86. data/lib/sequel/extensions/core_refinements.rb +5 -5
  87. data/lib/sequel/extensions/duplicate_columns_handler.rb +4 -2
  88. data/lib/sequel/extensions/freeze_datasets.rb +69 -0
  89. data/lib/sequel/extensions/identifier_mangling.rb +196 -0
  90. data/lib/sequel/extensions/looser_typecasting.rb +11 -7
  91. data/lib/sequel/extensions/migration.rb +1 -1
  92. data/lib/sequel/extensions/null_dataset.rb +5 -2
  93. data/lib/sequel/extensions/pagination.rb +42 -23
  94. data/lib/sequel/extensions/pg_enum.rb +3 -3
  95. data/lib/sequel/extensions/query.rb +3 -3
  96. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +15 -8
  97. data/lib/sequel/model/associations.rb +25 -8
  98. data/lib/sequel/model/base.rb +88 -29
  99. data/lib/sequel/model/dataset_module.rb +37 -0
  100. data/lib/sequel/plugins/association_pks.rb +4 -4
  101. data/lib/sequel/plugins/class_table_inheritance.rb +2 -2
  102. data/lib/sequel/plugins/constraint_validations.rb +1 -2
  103. data/lib/sequel/plugins/csv_serializer.rb +2 -2
  104. data/lib/sequel/plugins/dataset_associations.rb +8 -8
  105. data/lib/sequel/plugins/eager_each.rb +2 -2
  106. data/lib/sequel/plugins/instance_filters.rb +1 -1
  107. data/lib/sequel/plugins/json_serializer.rb +2 -2
  108. data/lib/sequel/plugins/lazy_attributes.rb +1 -1
  109. data/lib/sequel/plugins/list.rb +4 -4
  110. data/lib/sequel/plugins/prepared_statements.rb +2 -4
  111. data/lib/sequel/plugins/prepared_statements_associations.rb +1 -3
  112. data/lib/sequel/plugins/prepared_statements_with_pk.rb +1 -1
  113. data/lib/sequel/plugins/rcte_tree.rb +13 -13
  114. data/lib/sequel/plugins/sharding.rb +1 -1
  115. data/lib/sequel/plugins/single_table_inheritance.rb +9 -4
  116. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  117. data/lib/sequel/plugins/validation_class_methods.rb +1 -1
  118. data/lib/sequel/plugins/validation_helpers.rb +1 -1
  119. data/lib/sequel/plugins/xml_serializer.rb +2 -2
  120. data/lib/sequel/sql.rb +69 -36
  121. data/lib/sequel/version.rb +1 -1
  122. data/spec/adapters/db2_spec.rb +10 -0
  123. data/spec/adapters/firebird_spec.rb +1 -1
  124. data/spec/adapters/mssql_spec.rb +4 -5
  125. data/spec/adapters/mysql_spec.rb +9 -9
  126. data/spec/adapters/postgres_spec.rb +67 -68
  127. data/spec/adapters/spec_helper.rb +6 -1
  128. data/spec/adapters/sqlite_spec.rb +29 -15
  129. data/spec/core/connection_pool_spec.rb +14 -14
  130. data/spec/core/database_spec.rb +38 -180
  131. data/spec/core/dataset_mutation_spec.rb +253 -0
  132. data/spec/core/dataset_spec.rb +394 -537
  133. data/spec/core/expression_filters_spec.rb +34 -32
  134. data/spec/core/mock_adapter_spec.rb +27 -35
  135. data/spec/core/placeholder_literalizer_spec.rb +2 -4
  136. data/spec/core/schema_generator_spec.rb +4 -4
  137. data/spec/core/schema_spec.rb +1 -2
  138. data/spec/core_extensions_spec.rb +22 -29
  139. data/spec/extensions/active_model_spec.rb +6 -6
  140. data/spec/extensions/association_dependencies_spec.rb +2 -2
  141. data/spec/extensions/blacklist_security_spec.rb +3 -3
  142. data/spec/extensions/boolean_readers_spec.rb +12 -12
  143. data/spec/extensions/caching_spec.rb +13 -10
  144. data/spec/extensions/class_table_inheritance_spec.rb +38 -43
  145. data/spec/extensions/column_conflicts_spec.rb +1 -3
  146. data/spec/extensions/columns_introspection_spec.rb +2 -3
  147. data/spec/extensions/composition_spec.rb +5 -3
  148. data/spec/extensions/constraint_validations_plugin_spec.rb +5 -5
  149. data/spec/extensions/constraint_validations_spec.rb +14 -8
  150. data/spec/extensions/core_refinements_spec.rb +22 -29
  151. data/spec/extensions/csv_serializer_spec.rb +7 -6
  152. data/spec/extensions/date_arithmetic_spec.rb +15 -15
  153. data/spec/extensions/defaults_setter_spec.rb +2 -2
  154. data/spec/extensions/delay_add_association_spec.rb +1 -1
  155. data/spec/extensions/dirty_spec.rb +19 -10
  156. data/spec/extensions/duplicate_columns_handler_spec.rb +12 -18
  157. data/spec/extensions/eager_each_spec.rb +12 -16
  158. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  159. data/spec/extensions/eval_inspect_spec.rb +4 -3
  160. data/spec/extensions/force_encoding_spec.rb +12 -12
  161. data/spec/extensions/freeze_datasets_spec.rb +31 -0
  162. data/spec/extensions/graph_each_spec.rb +6 -18
  163. data/spec/extensions/hook_class_methods_spec.rb +7 -7
  164. data/spec/extensions/identifier_mangling_spec.rb +307 -0
  165. data/spec/extensions/instance_filters_spec.rb +5 -6
  166. data/spec/extensions/instance_hooks_spec.rb +12 -12
  167. data/spec/extensions/json_serializer_spec.rb +12 -15
  168. data/spec/extensions/lazy_attributes_spec.rb +4 -4
  169. data/spec/extensions/list_spec.rb +19 -21
  170. data/spec/extensions/many_through_many_spec.rb +108 -163
  171. data/spec/extensions/meta_def_spec.rb +7 -2
  172. data/spec/extensions/migration_spec.rb +10 -12
  173. data/spec/extensions/mssql_optimistic_locking_spec.rb +4 -3
  174. data/spec/extensions/named_timezones_spec.rb +4 -3
  175. data/spec/extensions/nested_attributes_spec.rb +2 -2
  176. data/spec/extensions/null_dataset_spec.rb +17 -12
  177. data/spec/extensions/optimistic_locking_spec.rb +4 -5
  178. data/spec/extensions/pagination_spec.rb +8 -10
  179. data/spec/extensions/pg_array_associations_spec.rb +28 -27
  180. data/spec/extensions/pg_array_ops_spec.rb +2 -1
  181. data/spec/extensions/pg_array_spec.rb +6 -2
  182. data/spec/extensions/pg_enum_spec.rb +5 -3
  183. data/spec/extensions/pg_hstore_ops_spec.rb +3 -1
  184. data/spec/extensions/pg_hstore_spec.rb +7 -6
  185. data/spec/extensions/pg_inet_ops_spec.rb +2 -1
  186. data/spec/extensions/pg_inet_spec.rb +2 -1
  187. data/spec/extensions/pg_interval_spec.rb +2 -1
  188. data/spec/extensions/pg_json_ops_spec.rb +2 -1
  189. data/spec/extensions/pg_json_spec.rb +6 -3
  190. data/spec/extensions/pg_loose_count_spec.rb +1 -0
  191. data/spec/extensions/pg_range_ops_spec.rb +3 -1
  192. data/spec/extensions/pg_range_spec.rb +9 -5
  193. data/spec/extensions/pg_row_ops_spec.rb +2 -1
  194. data/spec/extensions/pg_row_plugin_spec.rb +4 -6
  195. data/spec/extensions/pg_row_spec.rb +5 -3
  196. data/spec/extensions/pg_static_cache_updater_spec.rb +2 -1
  197. data/spec/extensions/pg_typecast_on_load_spec.rb +1 -1
  198. data/spec/extensions/prepared_statements_associations_spec.rb +1 -1
  199. data/spec/extensions/prepared_statements_spec.rb +12 -11
  200. data/spec/extensions/pretty_table_spec.rb +1 -1
  201. data/spec/extensions/query_spec.rb +8 -5
  202. data/spec/extensions/rcte_tree_spec.rb +39 -39
  203. data/spec/extensions/round_timestamps_spec.rb +2 -2
  204. data/spec/extensions/schema_dumper_spec.rb +3 -2
  205. data/spec/extensions/schema_spec.rb +2 -2
  206. data/spec/extensions/scissors_spec.rb +1 -2
  207. data/spec/extensions/sequel_3_dataset_methods_spec.rb +30 -17
  208. data/spec/extensions/serialization_modification_detection_spec.rb +2 -2
  209. data/spec/extensions/serialization_spec.rb +15 -13
  210. data/spec/extensions/set_overrides_spec.rb +14 -8
  211. data/spec/extensions/sharding_spec.rb +9 -18
  212. data/spec/extensions/shared_caching_spec.rb +3 -4
  213. data/spec/extensions/single_table_inheritance_spec.rb +11 -11
  214. data/spec/extensions/skip_create_refresh_spec.rb +2 -1
  215. data/spec/extensions/spec_helper.rb +1 -1
  216. data/spec/extensions/split_values_spec.rb +2 -2
  217. data/spec/extensions/sql_comments_spec.rb +6 -0
  218. data/spec/extensions/static_cache_spec.rb +7 -9
  219. data/spec/extensions/string_agg_spec.rb +30 -29
  220. data/spec/extensions/tactical_eager_loading_spec.rb +4 -5
  221. data/spec/extensions/thread_local_timezones_spec.rb +2 -2
  222. data/spec/extensions/timestamps_spec.rb +28 -3
  223. data/spec/extensions/to_dot_spec.rb +1 -2
  224. data/spec/extensions/tree_spec.rb +33 -29
  225. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  226. data/spec/extensions/unlimited_update_spec.rb +1 -0
  227. data/spec/extensions/update_primary_key_spec.rb +11 -7
  228. data/spec/extensions/update_refresh_spec.rb +1 -1
  229. data/spec/extensions/uuid_spec.rb +0 -1
  230. data/spec/extensions/validate_associated_spec.rb +1 -1
  231. data/spec/extensions/validation_class_methods_spec.rb +10 -10
  232. data/spec/extensions/validation_helpers_spec.rb +10 -10
  233. data/spec/extensions/xml_serializer_spec.rb +7 -3
  234. data/spec/integration/associations_test.rb +31 -31
  235. data/spec/integration/dataset_test.rb +17 -19
  236. data/spec/integration/eager_loader_test.rb +24 -24
  237. data/spec/integration/model_test.rb +6 -6
  238. data/spec/integration/plugin_test.rb +43 -43
  239. data/spec/integration/prepared_statement_test.rb +6 -6
  240. data/spec/integration/schema_test.rb +63 -52
  241. data/spec/integration/spec_helper.rb +6 -1
  242. data/spec/integration/transaction_test.rb +13 -13
  243. data/spec/model/association_reflection_spec.rb +17 -17
  244. data/spec/model/associations_spec.rb +101 -96
  245. data/spec/model/base_spec.rb +175 -49
  246. data/spec/model/class_dataset_methods_spec.rb +5 -9
  247. data/spec/model/dataset_methods_spec.rb +5 -5
  248. data/spec/model/eager_loading_spec.rb +209 -235
  249. data/spec/model/hooks_spec.rb +15 -15
  250. data/spec/model/model_spec.rb +28 -21
  251. data/spec/model/plugins_spec.rb +4 -5
  252. data/spec/model/record_spec.rb +59 -57
  253. data/spec/model/spec_helper.rb +1 -1
  254. data/spec/model/validations_spec.rb +6 -6
  255. data/spec/spec_config.rb +1 -1
  256. metadata +10 -2
@@ -357,11 +357,6 @@ describe "Simple dataset operations with nasty table names" do
357
357
  before do
358
358
  @db = DB
359
359
  @table = :"i`t' [e]\"m\\s"
360
- @qi = @db.quote_identifiers?
361
- @db.quote_identifiers = true
362
- end
363
- after do
364
- @db.quote_identifiers = @qi
365
360
  end
366
361
 
367
362
  cspecify "should work correctly", :oracle, :sqlanywhere, [:jdbc, :mssql] do
@@ -378,7 +373,7 @@ describe "Simple dataset operations with nasty table names" do
378
373
  @ds.count.must_equal 0
379
374
  @db.drop_table?(@table)
380
375
  end
381
- end
376
+ end if DB.dataset.quote_identifiers?
382
377
 
383
378
  describe Sequel::Dataset do
384
379
  before do
@@ -396,8 +391,12 @@ describe Sequel::Dataset do
396
391
  @d.count.must_equal 0
397
392
  @d << {:name => 'abc', :value => 123}
398
393
  @d << {:name => 'abc', :value => 456}
399
- @d << {:name => 'def', :value => 789}
400
- @d.count.must_equal 3
394
+ @d << {:name => 'def', :value => nil}
395
+ 5.times do
396
+ @d.count.must_equal 3
397
+ @d.count(:name).must_equal 3
398
+ @d.count(:value).must_equal 2
399
+ end
401
400
  end
402
401
 
403
402
  it "should handle functions with identifier names correctly" do
@@ -455,7 +454,7 @@ describe Sequel::Dataset do
455
454
  @d << {:name => 'abc', :value => 456}
456
455
  @d << {:name => 'def', :value => 789}
457
456
  @d.count.must_equal 3
458
- @d.truncate.must_equal nil
457
+ @d.truncate.must_be_nil
459
458
  @d.count.must_equal 0
460
459
  end
461
460
 
@@ -1435,7 +1434,6 @@ describe "Sequel::Dataset DSL support" do
1435
1434
 
1436
1435
  it "should work with multiple value arrays" do
1437
1436
  @ds.insert(20, 10)
1438
- @ds = @ds.with_quote_identifiers(false)
1439
1437
  @ds.filter([:a, :b]=>[[20, 10]]).all.must_equal [{:a=>20, :b=>10}]
1440
1438
  @ds.filter([:a, :b]=>[[10, 20]]).all.must_equal []
1441
1439
  @ds.filter([:a, :b]=>[[20, 10], [1, 2]]).all.must_equal [{:a=>20, :b=>10}]
@@ -1449,7 +1447,7 @@ describe "Sequel::Dataset DSL support" do
1449
1447
 
1450
1448
  it "should work with IN/NOT in with datasets" do
1451
1449
  @ds.insert(20, 10)
1452
- ds = @ds.unordered.with_quote_identifiers(false)
1450
+ ds = @ds.unordered
1453
1451
 
1454
1452
  @ds.filter(:a=>ds.select(:a)).all.must_equal [{:a=>20, :b=>10}]
1455
1453
  @ds.filter(:a=>ds.select(:a).where(:a=>15)).all.must_equal []
@@ -1484,10 +1482,10 @@ describe "Sequel::Dataset DSL support" do
1484
1482
  unless Sequel.guarded?(:mssql, :oracle, :db2, :sqlanywhere)
1485
1483
  # Some databases don't like boolean results in the select list
1486
1484
  pr = proc{|r| r.is_a?(Integer) ? (r != 0) : r}
1487
- pr[@ds.get(Sequel.expr(:a=>[]))].must_equal nil
1488
- pr[@ds.get(~Sequel.expr(:a=>[]))].must_equal nil
1489
- pr[@ds.get(Sequel.expr([:a, :b]=>[]))].must_equal nil
1490
- pr[@ds.get(~Sequel.expr([:a, :b]=>[]))].must_equal nil
1485
+ pr[@ds.get(Sequel.expr(:a=>[]))].must_be_nil
1486
+ pr[@ds.get(~Sequel.expr(:a=>[]))].must_be_nil
1487
+ pr[@ds.get(Sequel.expr([:a, :b]=>[]))].must_be_nil
1488
+ pr[@ds.get(~Sequel.expr([:a, :b]=>[]))].must_be_nil
1491
1489
  end
1492
1490
  end
1493
1491
 
@@ -1531,7 +1529,7 @@ describe "SQL Extract Function" do
1531
1529
 
1532
1530
  it "should return the part of the datetime asked for" do
1533
1531
  t = Time.now
1534
- @ds = @ds.with_extend(Module.new do def supports_timestamp_timezones?() false end end)
1532
+ @ds = @ds.with_extend{def supports_timestamp_timezones?() false end}
1535
1533
  @ds.insert(t)
1536
1534
  @ds.get{a.extract(:year)}.must_equal t.year
1537
1535
  @ds.get{a.extract(:month)}.must_equal t.month
@@ -1725,7 +1723,7 @@ describe "Dataset identifier methods" do
1725
1723
  it "should work when not quoting identifiers" do
1726
1724
  @ds.with_quote_identifiers(false).first.must_equal(:ab=>1)
1727
1725
  end
1728
- end
1726
+ end if IDENTIFIER_MANGLING
1729
1727
 
1730
1728
  describe "Dataset defaults and overrides" do
1731
1729
  before(:all) do
@@ -1806,7 +1804,7 @@ describe "Emulated functions" do
1806
1804
  end
1807
1805
 
1808
1806
  it "Sequel.char_length should return the length of characters in the string" do
1809
- @ds.get(Sequel.char_length(:a)).must_equal nil
1807
+ @ds.get(Sequel.char_length(:a)).must_be_nil
1810
1808
  @ds.insert(:a=>'foo')
1811
1809
  @ds.get(Sequel.char_length(:a)).must_equal 3
1812
1810
  # Check behavior with leading/trailing blanks
@@ -1815,7 +1813,7 @@ describe "Emulated functions" do
1815
1813
  end
1816
1814
 
1817
1815
  it "Sequel.trim should return the string with spaces trimmed from both sides" do
1818
- @ds.get(Sequel.trim(:a)).must_equal nil
1816
+ @ds.get(Sequel.trim(:a)).must_be_nil
1819
1817
  @ds.insert(:a=>'foo')
1820
1818
  @ds.get(Sequel.trim(:a)).must_equal 'foo'
1821
1819
  # Check behavior with leading/trailing blanks
@@ -103,7 +103,7 @@ describe "Eagerly loading a tree structure" do
103
103
  nodes.length.must_equal 2
104
104
  nodes.collect{|x| x.pk}.must_equal [3, 7]
105
105
  nodes.first.parent.pk.must_equal 1
106
- nodes.first.parent.parent.must_equal nil
106
+ nodes.first.parent.parent.must_be_nil
107
107
  node = nodes.last
108
108
  node.parent.pk.must_equal 6
109
109
  node = node.parent
@@ -114,7 +114,7 @@ describe "Eagerly loading a tree structure" do
114
114
  node.parent.pk.must_equal 2
115
115
  node = node.parent
116
116
  node.parent.pk.must_equal 1
117
- node.parent.parent.must_equal nil
117
+ node.parent.parent.must_be_nil
118
118
  end
119
119
  end
120
120
 
@@ -291,7 +291,7 @@ describe "has_many :through has_many and has_one :through belongs_to" do
291
291
  firm.must_equal @firm1
292
292
  @invoice1.client.must_equal @client1
293
293
  @invoice1.client.firm.must_equal @firm1
294
- firm.associations[:clients].must_equal nil
294
+ firm.associations[:clients].must_be_nil
295
295
  end
296
296
 
297
297
  it "should eagerly load has_one :through belongs_to records for multiple objects" do
@@ -300,23 +300,23 @@ describe "has_many :through has_many and has_one :through belongs_to" do
300
300
  invs[0].firm.must_equal @firm1
301
301
  invs[0].client.must_equal @client1
302
302
  invs[0].client.firm.must_equal @firm1
303
- invs[0].firm.associations[:clients].must_equal nil
303
+ invs[0].firm.associations[:clients].must_be_nil
304
304
  invs[1].firm.must_equal @firm1
305
305
  invs[1].client.must_equal @client1
306
306
  invs[1].client.firm.must_equal @firm1
307
- invs[1].firm.associations[:clients].must_equal nil
307
+ invs[1].firm.associations[:clients].must_be_nil
308
308
  invs[2].firm.must_equal @firm1
309
309
  invs[2].client.must_equal @client2
310
310
  invs[2].client.firm.must_equal @firm1
311
- invs[2].firm.associations[:clients].must_equal nil
311
+ invs[2].firm.associations[:clients].must_be_nil
312
312
  invs[3].firm.must_equal @firm2
313
313
  invs[3].client.must_equal @client3
314
314
  invs[3].client.firm.must_equal @firm2
315
- invs[3].firm.associations[:clients].must_equal nil
315
+ invs[3].firm.associations[:clients].must_be_nil
316
316
  invs[4].firm.must_equal @firm2
317
317
  invs[4].client.must_equal @client3
318
318
  invs[4].client.firm.must_equal @firm2
319
- invs[4].firm.associations[:clients].must_equal nil
319
+ invs[4].firm.associations[:clients].must_be_nil
320
320
  end
321
321
  end
322
322
 
@@ -415,9 +415,9 @@ describe "Polymorphic Associations" do
415
415
  @asset2.attachable_id.must_equal @post.pk
416
416
  @asset2.attachable_type.must_equal 'Post'
417
417
  @asset1.attachable = nil
418
- @asset1.attachable.must_equal nil
419
- @asset1.attachable_id.must_equal nil
420
- @asset1.attachable_type.must_equal nil
418
+ @asset1.attachable.must_be_nil
419
+ @asset1.attachable_id.must_be_nil
420
+ @asset1.attachable_type.must_be_nil
421
421
  end
422
422
 
423
423
  it "should add items correctly" do
@@ -433,16 +433,16 @@ describe "Polymorphic Associations" do
433
433
  @note.assets.must_equal [@asset2]
434
434
  @note.remove_asset(@asset2)
435
435
  @note.assets.must_equal []
436
- @asset2.attachable.must_equal nil
437
- @asset2.attachable_id.must_equal nil
438
- @asset2.attachable_type.must_equal nil
436
+ @asset2.attachable.must_be_nil
437
+ @asset2.attachable_id.must_be_nil
438
+ @asset2.attachable_type.must_be_nil
439
439
  end
440
440
 
441
441
  it "should remove all items correctly" do
442
442
  @post.remove_all_assets
443
443
  @note.remove_all_assets
444
- @asset1.reload.attachable.must_equal nil
445
- @asset2.reload.attachable.must_equal nil
444
+ @asset1.reload.attachable.must_be_nil
445
+ @asset2.reload.attachable.must_be_nil
446
446
  end
447
447
  end
448
448
 
@@ -543,7 +543,7 @@ describe "many_to_one/one_to_many not referencing primary key" do
543
543
  @invoice1.client.must_equal @client2
544
544
  @invoice1.client_name.must_equal 'Y'
545
545
  @invoice1.client = nil
546
- @invoice1.client_name.must_equal nil
546
+ @invoice1.client_name.must_be_nil
547
547
  end
548
548
 
549
549
  it "should add the associated object correctly" do
@@ -552,7 +552,7 @@ describe "many_to_one/one_to_many not referencing primary key" do
552
552
  @client2.invoices.must_equal [@invoice1]
553
553
  @invoice1.client_name.must_equal 'Y'
554
554
  @invoice1.client = nil
555
- @invoice1.client_name.must_equal nil
555
+ @invoice1.client_name.must_be_nil
556
556
  end
557
557
 
558
558
  it "should remove the associated object correctly" do
@@ -560,16 +560,16 @@ describe "many_to_one/one_to_many not referencing primary key" do
560
560
  invs.must_equal [@invoice1, @invoice2]
561
561
  @client1.remove_invoice(@invoice1)
562
562
  @client1.invoices.must_equal [@invoice2]
563
- @invoice1.client_name.must_equal nil
564
- @invoice1.client.must_equal nil
563
+ @invoice1.client_name.must_be_nil
564
+ @invoice1.client.must_be_nil
565
565
  end
566
566
 
567
567
  it "should remove all associated objects correctly" do
568
568
  @client1.remove_all_invoices
569
- @invoice1.refresh.client.must_equal nil
570
- @invoice1.client_name.must_equal nil
571
- @invoice2.refresh.client.must_equal nil
572
- @invoice2.client_name.must_equal nil
569
+ @invoice1.refresh.client.must_be_nil
570
+ @invoice1.client_name.must_be_nil
571
+ @invoice2.refresh.client.must_be_nil
572
+ @invoice2.client_name.must_be_nil
573
573
  end
574
574
  end
575
575
 
@@ -17,7 +17,7 @@ describe "Sequel::Model basic support" do
17
17
 
18
18
  it ".find should return first matching item" do
19
19
  Item.all.must_equal []
20
- Item.find(:name=>'J').must_equal nil
20
+ Item.find(:name=>'J').must_be_nil
21
21
  Item.create(:name=>'J')
22
22
  Item.find(:name=>'J').must_equal Item.load(:id=>1, :name=>'J')
23
23
  end
@@ -25,7 +25,7 @@ describe "Sequel::Model basic support" do
25
25
  it ".finder should create method that returns first matching item" do
26
26
  def Item.by_name(name) where(:name=>name) end
27
27
  Item.finder :by_name
28
- Item.first_by_name('J').must_equal nil
28
+ Item.first_by_name('J').must_be_nil
29
29
  Item.create(:name=>'J')
30
30
  Item.first_by_name('J').must_equal Item.load(:id=>1, :name=>'J')
31
31
  Item.first_by_name(['J', 'K']).must_equal Item.load(:id=>1, :name=>'J')
@@ -34,7 +34,7 @@ describe "Sequel::Model basic support" do
34
34
  it ".prepared_finder should create method that returns first matching item" do
35
35
  def Item.by_name(name) where(:name=>name) end
36
36
  Item.prepared_finder :by_name
37
- Item.first_by_name('J').must_equal nil
37
+ Item.first_by_name('J').must_be_nil
38
38
  Item.create(:name=>'J')
39
39
  Item.first_by_name('J').must_equal Item.load(:id=>1, :name=>'J')
40
40
  end
@@ -83,7 +83,7 @@ describe "Sequel::Model basic support" do
83
83
  def i.after_save
84
84
  raise Sequel::Rollback
85
85
  end
86
- i.save.must_equal nil
86
+ i.save.must_be_nil
87
87
  end
88
88
 
89
89
  it "#should respect after_commit, after_rollback, after_destroy_commit, and after_destroy_rollback hooks" do
@@ -118,12 +118,12 @@ describe "Sequel::Model basic support" do
118
118
  end
119
119
  i.name = 'K'
120
120
  i.rb = true
121
- i.save.must_equal nil
121
+ i.save.must_be_nil
122
122
  i.reload.name.must_equal 'J'
123
123
  i.hooks.must_equal [:as, :ar]
124
124
 
125
125
  i.rb = true
126
- i.destroy.must_equal nil
126
+ i.destroy.must_be_nil
127
127
  i.exists?.must_equal true
128
128
  i.hooks.must_equal [:ad, :adr]
129
129
 
@@ -70,27 +70,27 @@ describe "Class Table Inheritance Plugin" do
70
70
  end
71
71
 
72
72
  it "should lazily load columns in subclass tables" do
73
- Employee[@i2][:manager_id].must_equal nil
73
+ Employee[@i2][:manager_id].must_be_nil
74
74
  Employee[@i2].manager_id.must_equal @i4
75
- Employee[@i3][:num_staff].must_equal nil
75
+ Employee[@i3][:num_staff].must_be_nil
76
76
  Employee[@i3].num_staff.must_equal 7
77
- Employee[@i4][:num_staff].must_equal nil
77
+ Employee[@i4][:num_staff].must_be_nil
78
78
  Employee[@i4].num_staff.must_equal 5
79
- Employee[@i4][:num_managers].must_equal nil
79
+ Employee[@i4][:num_managers].must_be_nil
80
80
  Employee[@i4].num_managers.must_equal 6
81
- Employee[@i5][:num_managers].must_equal nil
81
+ Employee[@i5][:num_managers].must_be_nil
82
82
  Employee[@i5].num_managers.must_equal 1
83
83
  end
84
84
 
85
85
  it "should eagerly load columns in subclass tables when retrieving multiple objects" do
86
86
  a = Employee.order(:id).all
87
- a[1][:manager_id].must_equal nil
87
+ a[1][:manager_id].must_be_nil
88
88
  a[1].manager_id.must_equal @i4
89
- a[2][:num_staff].must_equal nil
89
+ a[2][:num_staff].must_be_nil
90
90
  a[2].num_staff.must_equal 7
91
91
  a[3][:num_staff].must_equal 5 # eagerly loaded by previous call
92
92
  a[3].num_staff.must_equal 5
93
- a[3][:num_managers].must_equal nil
93
+ a[3][:num_managers].must_be_nil
94
94
  a[3].num_managers.must_equal 6
95
95
  a[4][:num_managers].must_equal 1
96
96
  a[4].num_managers.must_equal 1
@@ -117,9 +117,9 @@ describe "Class Table Inheritance Plugin" do
117
117
  i = e.id
118
118
  e.staff_members_dataset.destroy
119
119
  e.destroy
120
- @db[:executives][:id=>i].must_equal nil
121
- @db[:managers][:id=>i].must_equal nil
122
- @db[:employees][:id=>i].must_equal nil
120
+ @db[:executives][:id=>i].must_be_nil
121
+ @db[:managers][:id=>i].must_be_nil
122
+ @db[:employees][:id=>i].must_be_nil
123
123
  end
124
124
 
125
125
  it "should handle associations only defined in subclasses" do
@@ -563,7 +563,7 @@ describe "Touch plugin" do
563
563
 
564
564
  it "should update the timestamp column when touching the record" do
565
565
  Album.plugin :touch
566
- @album.updated_at.must_equal nil
566
+ @album.updated_at.must_be_nil
567
567
  @album.touch
568
568
  @album.updated_at.to_i.must_be_close_to Time.now.to_i, 2
569
569
  end
@@ -571,7 +571,7 @@ describe "Touch plugin" do
571
571
  cspecify "should update the timestamp column for many_to_one associated records when the record is updated or destroyed", [:do, :sqlite], [:jdbc, :sqlite], [:swift] do
572
572
  Album.many_to_one :artist
573
573
  Album.plugin :touch, :associations=>:artist
574
- @artist.updated_at.must_equal nil
574
+ @artist.updated_at.must_be_nil
575
575
  @album.update(:name=>'B')
576
576
  ua = @artist.reload.updated_at
577
577
  if ua.is_a?(Time)
@@ -591,7 +591,7 @@ describe "Touch plugin" do
591
591
  cspecify "should update the timestamp column for one_to_many associated records when the record is updated", [:do, :sqlite], [:jdbc, :sqlite], [:swift] do
592
592
  Artist.one_to_many :albums
593
593
  Artist.plugin :touch, :associations=>:albums
594
- @album.updated_at.must_equal nil
594
+ @album.updated_at.must_be_nil
595
595
  @artist.update(:name=>'B')
596
596
  ua = @album.reload.updated_at
597
597
  if ua.is_a?(Time)
@@ -605,7 +605,7 @@ describe "Touch plugin" do
605
605
  Artist.many_to_many :albums
606
606
  Artist.plugin :touch, :associations=>:albums
607
607
  @artist.add_album(@album)
608
- @album.updated_at.must_equal nil
608
+ @album.updated_at.must_be_nil
609
609
  @artist.update(:name=>'B')
610
610
  ua = @album.reload.updated_at
611
611
  if ua.is_a?(Time)
@@ -717,7 +717,7 @@ describe "Composition plugin" do
717
717
 
718
718
  it "should return a composed object if the underlying columns have a value" do
719
719
  @e1.date.must_equal Date.civil(2010, 2, 15)
720
- @e2.date.must_equal nil
720
+ @e2.date.must_be_nil
721
721
  end
722
722
 
723
723
  it "should decompose the object when saving the record" do
@@ -755,8 +755,8 @@ describe "RcteTree Plugin" do
755
755
  @aaab.children.must_equal []
756
756
  @aaaaa.children.must_equal []
757
757
 
758
- @a.parent.must_equal nil
759
- @b.parent.must_equal nil
758
+ @a.parent.must_be_nil
759
+ @b.parent.must_be_nil
760
760
  @aa.parent.must_equal @a
761
761
  @ab.parent.must_equal @a
762
762
  @ba.parent.must_equal @b
@@ -891,28 +891,28 @@ describe "RcteTree Plugin" do
891
891
 
892
892
  it "should populate all :parent associations when eagerly loading ancestors for a dataset" do
893
893
  nodes = @Node.filter(@Node.primary_key=>[@a.pk, @ba.pk, @aaa.pk, @aaaaa.pk]).order(:name).eager(:ancestors).all
894
- nodes[0].associations.fetch(:parent, 1).must_equal nil
894
+ nodes[0].associations.fetch(:parent, 1).must_be_nil
895
895
  nodes[1].associations[:parent].must_equal @aa
896
896
  nodes[1].associations[:parent].associations[:parent].must_equal @a
897
- nodes[1].associations[:parent].associations[:parent].associations.fetch(:parent, 1).must_equal nil
897
+ nodes[1].associations[:parent].associations[:parent].associations.fetch(:parent, 1).must_be_nil
898
898
  nodes[2].associations[:parent].must_equal @aaaa
899
899
  nodes[2].associations[:parent].associations[:parent].must_equal @aaa
900
900
  nodes[2].associations[:parent].associations[:parent].associations[:parent].must_equal @aa
901
901
  nodes[2].associations[:parent].associations[:parent].associations[:parent].associations[:parent].must_equal @a
902
- nodes[2].associations[:parent].associations[:parent].associations[:parent].associations[:parent].associations.fetch(:parent, 1).must_equal nil
902
+ nodes[2].associations[:parent].associations[:parent].associations[:parent].associations[:parent].associations.fetch(:parent, 1).must_be_nil
903
903
  nodes[3].associations[:parent].must_equal @b
904
- nodes[3].associations[:parent].associations.fetch(:parent, 1).must_equal nil
904
+ nodes[3].associations[:parent].associations.fetch(:parent, 1).must_be_nil
905
905
  end
906
906
 
907
907
  it "should populate all :parent associations when lazily loading ancestors" do
908
908
  @a.reload
909
909
  @a.ancestors
910
- @a.associations[:parent].must_equal nil
910
+ @a.associations[:parent].must_be_nil
911
911
 
912
912
  @ba.reload
913
913
  @ba.ancestors
914
914
  @ba.associations[:parent].must_equal @b
915
- @ba.associations[:parent].associations.fetch(:parent, 1).must_equal nil
915
+ @ba.associations[:parent].associations.fetch(:parent, 1).must_be_nil
916
916
 
917
917
  @ba.reload
918
918
  @aaaaa.ancestors
@@ -920,7 +920,7 @@ describe "RcteTree Plugin" do
920
920
  @aaaaa.associations[:parent].associations[:parent].must_equal @aaa
921
921
  @aaaaa.associations[:parent].associations[:parent].associations[:parent].must_equal @aa
922
922
  @aaaaa.associations[:parent].associations[:parent].associations[:parent].associations[:parent].must_equal @a
923
- @aaaaa.associations[:parent].associations[:parent].associations[:parent].associations[:parent].associations.fetch(:parent, 1).must_equal nil
923
+ @aaaaa.associations[:parent].associations[:parent].associations[:parent].associations[:parent].associations.fetch(:parent, 1).must_be_nil
924
924
  end
925
925
  end
926
926
 
@@ -1528,12 +1528,12 @@ describe "List plugin without a scope" do
1528
1528
 
1529
1529
  it "should define prev and next" do
1530
1530
  i = @c[:name => "abc"]
1531
- i.prev.must_equal nil
1531
+ i.prev.must_be_nil
1532
1532
  i = @c[:name => "def"]
1533
1533
  i.prev.must_equal @c[:name => "abc"]
1534
1534
  i.next.must_equal @c[:name => "hig"]
1535
1535
  i = @c[:name => "hig"]
1536
- i.next.must_equal nil
1536
+ i.next.must_be_nil
1537
1537
  end
1538
1538
 
1539
1539
  it "should define move_to" do
@@ -1623,10 +1623,10 @@ describe "List plugin with a scope" do
1623
1623
  @c[:name => "P3"].prev(2).name.must_equal 'P1'
1624
1624
  @c[:name => "P2"].prev(-1).name.must_equal 'P3'
1625
1625
 
1626
- @c[:name => "Ps"].prev.must_equal nil
1627
- @c[:name => "Au"].next.must_equal nil
1628
- @c[:name => "P1"].prev.must_equal nil
1629
- @c[:name => "P3"].next.must_equal nil
1626
+ @c[:name => "Ps"].prev.must_be_nil
1627
+ @c[:name => "Au"].next.must_be_nil
1628
+ @c[:name => "P1"].prev.must_be_nil
1629
+ @c[:name => "P3"].next.must_be_nil
1630
1630
  end
1631
1631
 
1632
1632
  it "should define move_to" do
@@ -1833,31 +1833,31 @@ describe "Sequel::Plugins::PreparedStatements" do
1833
1833
  it "should work with looking up using Model.[]" do
1834
1834
  @c[@foo.id].must_equal @foo
1835
1835
  @c[@bar.id].must_equal @bar
1836
- @c[0].must_equal nil
1837
- @c[nil].must_equal nil
1836
+ @c[0].must_be_nil
1837
+ @c[nil].must_be_nil
1838
1838
  end
1839
1839
 
1840
1840
  it "should work with looking up using Dataset#with_pk" do
1841
1841
  @c.dataset.with_pk(@foo.id).must_equal @foo
1842
1842
  @c.dataset.with_pk(@bar.id).must_equal @bar
1843
- @c.dataset.with_pk(0).must_equal nil
1844
- @c.dataset.with_pk(nil).must_equal nil
1843
+ @c.dataset.with_pk(0).must_be_nil
1844
+ @c.dataset.with_pk(nil).must_be_nil
1845
1845
 
1846
- @c.dataset.filter(:i=>0).with_pk(@foo.id).must_equal nil
1846
+ @c.dataset.filter(:i=>0).with_pk(@foo.id).must_be_nil
1847
1847
  @c.dataset.filter(:i=>10).with_pk(@foo.id).must_equal @foo
1848
1848
  @c.dataset.filter(:i=>20).with_pk(@bar.id).must_equal @bar
1849
- @c.dataset.filter(:i=>10).with_pk(nil).must_equal nil
1849
+ @c.dataset.filter(:i=>10).with_pk(nil).must_be_nil
1850
1850
  @c.dataset.filter(:name=>'foo').with_pk(@foo.id).must_equal @foo
1851
1851
  @c.dataset.filter(:name=>'bar').with_pk(@bar.id).must_equal @bar
1852
- @c.dataset.filter(:name=>'baz').with_pk(@bar.id).must_equal nil
1853
- @c.dataset.filter(:name=>'bar').with_pk(nil).must_equal nil
1852
+ @c.dataset.filter(:name=>'baz').with_pk(@bar.id).must_be_nil
1853
+ @c.dataset.filter(:name=>'bar').with_pk(nil).must_be_nil
1854
1854
  end
1855
1855
 
1856
1856
  it "should work with Model#destroy" do
1857
1857
  @foo.destroy
1858
1858
  @bar.destroy
1859
- @c[@foo.id].must_equal nil
1860
- @c[@bar.id].must_equal nil
1859
+ @c[@foo.id].must_be_nil
1860
+ @c[@bar.id].must_be_nil
1861
1861
  end
1862
1862
 
1863
1863
  it "should work with Model#update" do
@@ -1952,8 +1952,8 @@ describe "Caching plugins" do
1952
1952
  it "should work with looking up using Model.[]" do
1953
1953
  @Artist[1].must_be_same_as(@Artist[1])
1954
1954
  @Artist[:id=>1].must_equal @Artist[1]
1955
- @Artist[0].must_equal nil
1956
- @Artist[nil].must_equal nil
1955
+ @Artist[0].must_be_nil
1956
+ @Artist[nil].must_be_nil
1957
1957
  end
1958
1958
 
1959
1959
  it "should work with lookup up many_to_one associated objects" do