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
@@ -17,7 +17,7 @@ describe "Sequel::Dataset::RoundTimestamps" do
17
17
  end
18
18
 
19
19
  it "should round times properly for databases supporting millisecond precision" do
20
- def @dataset.timestamp_precision() 3 end
20
+ @dataset = @dataset.with_extend{def timestamp_precision; 3 end}
21
21
  @dataset.literal(Sequel::SQLTime.create(1, 2, 3, 499500)).must_equal "'01:02:03.500'"
22
22
  @dataset.literal(Time.local(2010, 1, 2, 3, 4, 5.4995)).must_equal "'2010-01-02 03:04:05.500'"
23
23
  @dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(54995, 10000))).must_equal "'2010-01-02 03:04:05.500'"
@@ -28,7 +28,7 @@ describe "Sequel::Dataset::RoundTimestamps" do
28
28
  end
29
29
 
30
30
  it "should round times properly for databases supporting second precision" do
31
- def @dataset.supports_timestamp_usecs?() false end
31
+ @dataset = @dataset.with_extend{def supports_timestamp_usecs?; false end}
32
32
  @dataset.literal(Sequel::SQLTime.create(1, 2, 3, 500000)).must_equal "'01:02:04'"
33
33
  @dataset.literal(Time.local(2010, 1, 2, 3, 4, 5.5)).must_equal "'2010-01-02 03:04:06'"
34
34
  @dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(55, 10))).must_equal "'2010-01-02 03:04:06'"
@@ -633,8 +633,9 @@ END_MIG
633
633
  s.each{|_, c| c[:ruby_default] = column_schema_to_ruby_default(c[:default], c[:type])}
634
634
  s
635
635
  end
636
- @d.dump_table_schema(:t4).gsub(/[+-]\d\d\d\d"\)/, '")').gsub(/\.0+/, '.0').must_equal "create_table(:t4) do\n TrueClass :c1, :default=>false\n String :c2, :default=>\"blah\"\n Integer :c3, :default=>-1\n Float :c4, :default=>1.0\n BigDecimal :c5, :default=>BigDecimal.new(\"0.1005E3\")\n File :c6, :default=>Sequel::SQL::Blob.new(\"blah\")\n Date :c7, :default=>Date.new(2008, 10, 29)\n DateTime :c8, :default=>DateTime.parse(\"2008-10-29T10:20:30.0\")\n Time :c9, :default=>Sequel::SQLTime.parse(\"10:20:30.0\"), :only_time=>true\n String :c10\n Date :c11, :default=>Sequel::CURRENT_DATE\n DateTime :c12, :default=>Sequel::CURRENT_TIMESTAMP\nend"
637
- @d.dump_table_schema(:t4, :same_db=>true).gsub(/[+-]\d\d\d\d"\)/, '")').gsub(/\.0+/, '.0').must_equal "create_table(:t4) do\n column :c1, \"boolean\", :default=>false\n column :c2, \"varchar\", :default=>\"blah\"\n column :c3, \"integer\", :default=>-1\n column :c4, \"float\", :default=>1.0\n column :c5, \"decimal\", :default=>BigDecimal.new(\"0.1005E3\")\n column :c6, \"blob\", :default=>Sequel::SQL::Blob.new(\"blah\")\n column :c7, \"date\", :default=>Date.new(2008, 10, 29)\n column :c8, \"datetime\", :default=>DateTime.parse(\"2008-10-29T10:20:30.0\")\n column :c9, \"time\", :default=>Sequel::SQLTime.parse(\"10:20:30.0\")\n column :c10, \"foo\", :default=>Sequel::LiteralString.new(\"'6 weeks'\")\n column :c11, \"date\", :default=>Sequel::CURRENT_DATE\n column :c12, \"timestamp\", :default=>Sequel::CURRENT_TIMESTAMP\nend"
636
+ e = RUBY_VERSION >= '2.4' ? 'e' : 'E'
637
+ @d.dump_table_schema(:t4).gsub(/[+-]\d\d\d\d"\)/, '")').gsub(/\.0+/, '.0').must_equal "create_table(:t4) do\n TrueClass :c1, :default=>false\n String :c2, :default=>\"blah\"\n Integer :c3, :default=>-1\n Float :c4, :default=>1.0\n BigDecimal :c5, :default=>BigDecimal.new(\"0.1005#{e}3\")\n File :c6, :default=>Sequel::SQL::Blob.new(\"blah\")\n Date :c7, :default=>Date.new(2008, 10, 29)\n DateTime :c8, :default=>DateTime.parse(\"2008-10-29T10:20:30.0\")\n Time :c9, :default=>Sequel::SQLTime.parse(\"10:20:30.0\"), :only_time=>true\n String :c10\n Date :c11, :default=>Sequel::CURRENT_DATE\n DateTime :c12, :default=>Sequel::CURRENT_TIMESTAMP\nend"
638
+ @d.dump_table_schema(:t4, :same_db=>true).gsub(/[+-]\d\d\d\d"\)/, '")').gsub(/\.0+/, '.0').must_equal "create_table(:t4) do\n column :c1, \"boolean\", :default=>false\n column :c2, \"varchar\", :default=>\"blah\"\n column :c3, \"integer\", :default=>-1\n column :c4, \"float\", :default=>1.0\n column :c5, \"decimal\", :default=>BigDecimal.new(\"0.1005#{e}3\")\n column :c6, \"blob\", :default=>Sequel::SQL::Blob.new(\"blah\")\n column :c7, \"date\", :default=>Date.new(2008, 10, 29)\n column :c8, \"datetime\", :default=>DateTime.parse(\"2008-10-29T10:20:30.0\")\n column :c9, \"time\", :default=>Sequel::SQLTime.parse(\"10:20:30.0\")\n column :c10, \"foo\", :default=>Sequel::LiteralString.new(\"'6 weeks'\")\n column :c11, \"date\", :default=>Sequel::CURRENT_DATE\n column :c12, \"timestamp\", :default=>Sequel::CURRENT_TIMESTAMP\nend"
638
639
  end
639
640
 
640
641
  it "should not use a literal string as a fallback if using MySQL with the :same_db option" do
@@ -67,9 +67,9 @@ describe Sequel::Model, "create_table and schema" do
67
67
  it "should return nil if no schema is present" do
68
68
  @model = Class.new(Sequel::Model)
69
69
  @model.plugin :schema
70
- @model.schema.must_equal nil
70
+ @model.schema.must_be_nil
71
71
  @submodel = Class.new(@model)
72
- @submodel.schema.must_equal nil
72
+ @submodel.schema.must_be_nil
73
73
  end
74
74
  end
75
75
 
@@ -19,8 +19,7 @@ describe "scissors plugin" do
19
19
  end
20
20
 
21
21
  it "Model.destory each instance in the dataset" do
22
- @m.dataset._fetch = {:id=>1}
23
- @m.destroy
22
+ @m.dataset.with_fetch(:id=>1).destroy
24
23
  @m.db.sqls.must_equal ['BEGIN', 'SELECT * FROM items', 'DELETE FROM items WHERE id = 1', 'COMMIT']
25
24
  end
26
25
  end
@@ -56,25 +56,38 @@ describe "Dataset#insert_multiple" do
56
56
  end
57
57
  end
58
58
 
59
- describe "Dataset#db=" do
60
- it "should change the dataset's database" do
61
- db = Sequel.mock
62
- ds = db[:items].extension(:sequel_3_dataset_methods)
63
- db2 = Sequel.mock
64
- ds.db = db2
65
- ds.db.must_equal db2
66
- ds.db.wont_equal db
59
+ # SEQUEL5: Remove
60
+ unless Sequel.mock.dataset.frozen?
61
+ describe "Dataset#db=" do
62
+ it "should change the dataset's database" do
63
+ db = Sequel.mock
64
+ ds = db[:items].extension(:sequel_3_dataset_methods)
65
+ db2 = Sequel.mock
66
+ ds.db = db2
67
+ ds.db.must_equal db2
68
+ ds.db.wont_equal db
69
+ end
70
+
71
+ it "should raise error for frozen datasets" do
72
+ ds = Sequel.mock.dataset.extension(:sequel_3_dataset_methods).freeze
73
+ proc{ds.db = ds.db}.must_raise RuntimeError
74
+ end
67
75
  end
68
- end
69
76
 
70
- describe "Dataset#opts=" do
71
- it "should change the dataset's opts" do
72
- db = Sequel.mock
73
- ds = db[:items].extension(:sequel_3_dataset_methods)
74
- ds.sql.must_equal 'SELECT * FROM items'
75
- ds.opts = {}
76
- ds.sql.must_equal 'SELECT *'
77
- ds.opts.must_equal({})
77
+ describe "Dataset#opts=" do
78
+ it "should change the dataset's opts" do
79
+ db = Sequel.mock
80
+ ds = db[:items].extension(:sequel_3_dataset_methods)
81
+ ds.sql.must_equal 'SELECT * FROM items'
82
+ ds.opts = {}
83
+ ds.sql.must_equal 'SELECT *'
84
+ ds.opts.must_equal({})
85
+ end
86
+
87
+ it "should raise error for frozen datasets" do
88
+ ds = Sequel.mock.dataset.extension(:sequel_3_dataset_methods).freeze
89
+ proc{ds.opts = {}}.must_raise RuntimeError
90
+ end
78
91
  end
79
92
  end
80
93
 
@@ -42,12 +42,12 @@ describe "serialization_modification_detection plugin" do
42
42
  @o2.changed_columns.must_equal [:h]
43
43
 
44
44
  @o3.changed_columns.must_equal []
45
- @o3.h.must_equal nil
45
+ @o3.h.must_be_nil
46
46
  @o3.h = {}
47
47
  @o3.changed_columns.must_equal [:h]
48
48
 
49
49
  @o4.changed_columns.must_equal []
50
- @o4.h.must_equal nil
50
+ @o4.h.must_be_nil
51
51
  @o4.h = {}
52
52
  @o4.changed_columns.must_equal [:h]
53
53
  end
@@ -94,7 +94,7 @@ describe "Serialization plugin" do
94
94
  it "should translate values to and from yaml serialization format using accessor methods" do
95
95
  @c.set_primary_key :id
96
96
  @c.plugin :serialization, :yaml, :abc, :def
97
- @c.dataset._fetch = {:id => 1, :abc => "--- 1\n", :def => "--- hello\n"}
97
+ @c.dataset = @c.dataset.with_fetch(:id => 1, :abc => "--- 1\n", :def => "--- hello\n")
98
98
 
99
99
  o = @c.first
100
100
  o.id.must_equal 1
@@ -114,7 +114,7 @@ describe "Serialization plugin" do
114
114
  it "should translate values to and from marshal serialization format using accessor methods" do
115
115
  @c.set_primary_key :id
116
116
  @c.plugin :serialization, :marshal, :abc, :def
117
- @c.dataset._fetch = [:id => 1, :abc =>[Marshal.dump(1)].pack('m'), :def =>[Marshal.dump('hello')].pack('m')]
117
+ @c.dataset = @c.dataset.with_fetch([:id => 1, :abc =>[Marshal.dump(1)].pack('m'), :def =>[Marshal.dump('hello')].pack('m')])
118
118
 
119
119
  o = @c.first
120
120
  o.id.must_equal 1
@@ -134,7 +134,7 @@ describe "Serialization plugin" do
134
134
  it "should handle old non-base-64 encoded marshal serialization format" do
135
135
  @c.set_primary_key :id
136
136
  @c.plugin :serialization, :marshal, :abc, :def
137
- @c.dataset._fetch = [:id => 1, :abc =>Marshal.dump(1), :def =>Marshal.dump('hello')]
137
+ @c.dataset = @c.dataset.with_fetch([:id => 1, :abc =>Marshal.dump(1), :def =>Marshal.dump('hello')])
138
138
 
139
139
  o = @c.first
140
140
  o.abc.must_equal 1
@@ -144,7 +144,7 @@ describe "Serialization plugin" do
144
144
  it "should raise exception for bad marshal data" do
145
145
  @c.set_primary_key :id
146
146
  @c.plugin :serialization, :marshal, :abc, :def
147
- @c.dataset._fetch = [:id => 1, :abc =>'foo', :def =>'bar']
147
+ @c.dataset = @c.dataset.with_fetch([:id => 1, :abc =>'foo', :def =>'bar'])
148
148
 
149
149
  o = @c.first
150
150
  proc{o.abc}.must_raise TypeError, ArgumentError
@@ -154,7 +154,7 @@ describe "Serialization plugin" do
154
154
  it "should translate values to and from json serialization format using accessor methods" do
155
155
  @c.set_primary_key :id
156
156
  @c.plugin :serialization, :json, :abc, :def
157
- @c.dataset._fetch = {:id => 1, :abc => [1].to_json, :def => ["hello"].to_json}
157
+ @c.dataset = @c.dataset.with_fetch(:id => 1, :abc => [1].to_json, :def => ["hello"].to_json)
158
158
 
159
159
  o = @c.first
160
160
  o.id.must_equal 1
@@ -175,7 +175,7 @@ describe "Serialization plugin" do
175
175
  it "should translate values to and from arbitrary callables using accessor methods" do
176
176
  @c.set_primary_key :id
177
177
  @c.plugin :serialization, [proc{|s| s.reverse}, proc{|s| s.reverse}], :abc, :def
178
- @c.dataset._fetch = {:id => 1, :abc => 'cba', :def => 'olleh'}
178
+ @c.dataset = @c.dataset.with_fetch(:id => 1, :abc => 'cba', :def => 'olleh')
179
179
 
180
180
  o = @c.first
181
181
  o.id.must_equal 1
@@ -198,7 +198,7 @@ describe "Serialization plugin" do
198
198
  require 'sequel/plugins/serialization'
199
199
  Sequel::Plugins::Serialization.register_format(:reverse, proc{|s| s.reverse}, proc{|s| s.reverse})
200
200
  @c.plugin :serialization, :reverse, :abc, :def
201
- @c.dataset._fetch = {:id => 1, :abc => 'cba', :def => 'olleh'}
201
+ @c.dataset = @c.dataset.with_fetch(:id => 1, :abc => 'cba', :def => 'olleh')
202
202
 
203
203
  o = @c.first
204
204
  o.id.must_equal 1
@@ -219,7 +219,7 @@ describe "Serialization plugin" do
219
219
  it "should copy serialization formats and columns to subclasses" do
220
220
  @c.set_primary_key :id
221
221
  @c.plugin :serialization, :yaml, :abc, :def
222
- @c.dataset._fetch = {:id => 1, :abc => "--- 1\n", :def => "--- hello\n"}
222
+ @c.dataset = @c.dataset.with_fetch(:id => 1, :abc => "--- 1\n", :def => "--- hello\n")
223
223
 
224
224
  o = Class.new(@c).first
225
225
  o.id.must_equal 1
@@ -259,8 +259,10 @@ describe "Serialization plugin" do
259
259
  it "should not clear the deserialized columns when refreshing after saving a new object with insert_select" do
260
260
  @c.set_primary_key :id
261
261
  @c.plugin :serialization, :yaml, :abc, :def
262
- def (@c.instance_dataset).supports_insert_select?() true end
263
- def (@c.instance_dataset).insert_select(*) {:id=>1} end
262
+ @c.dataset = @c.dataset.with_extend do
263
+ def supports_insert_select?; true end
264
+ def insert_select(*) {:id=>1} end
265
+ end
264
266
  o = @c.new(:abc => "--- 1\n", :def => "--- hello\n")
265
267
  o.deserialized_values.length.must_equal 2
266
268
  o.save
@@ -301,7 +303,7 @@ describe "Serialization plugin" do
301
303
  it "should work correctly with frozen instances" do
302
304
  @c.set_primary_key :id
303
305
  @c.plugin :serialization, :yaml, :abc, :def
304
- @c.dataset._fetch = {:id => 1, :abc => "--- 1\n", :def => "--- hello\n"}
306
+ @c.dataset = @c.dataset.with_fetch(:id => 1, :abc => "--- 1\n", :def => "--- hello\n")
305
307
 
306
308
  o = @c.first
307
309
  o.freeze
@@ -322,7 +324,7 @@ describe "Serialization plugin" do
322
324
 
323
325
  it "should have changed_columns include serialized columns if those columns have changed" do
324
326
  @c.plugin :serialization, :yaml, :abc, :def
325
- @c.dataset._fetch = {:id => 1, :abc => "--- 1\n", :def => "--- hello\n"}
327
+ @c.dataset = @c.dataset.with_fetch(:id => 1, :abc => "--- 1\n", :def => "--- hello\n")
326
328
  o = @c.first
327
329
  o.changed_columns.must_equal []
328
330
  o.abc = 1
@@ -342,7 +344,7 @@ describe "Serialization plugin" do
342
344
  it "should update column_changes if the dirty plugin is used" do
343
345
  @c.plugin :serialization, :yaml, :abc, :def
344
346
  @c.plugin :dirty
345
- @c.dataset._fetch = {:id => 1, :abc => "--- 1\n", :def => "--- hello\n"}
347
+ @c.dataset = @c.dataset.with_fetch(:id => 1, :abc => "--- 1\n", :def => "--- hello\n")
346
348
  o = @c.first
347
349
  o.column_changes.must_equal({})
348
350
  o.abc = 1
@@ -25,10 +25,13 @@ describe "Sequel::Dataset #set_defaults" do
25
25
  @ds.update_sql('y = 2').must_equal "UPDATE items SET y = 2"
26
26
  end
27
27
 
28
- it "should have working mutation method" do
29
- @ds = Sequel.mock.dataset.from(:items).extension(:set_overrides)
30
- @ds.set_defaults!(:x=>1)
31
- @ds.insert_sql.must_equal "INSERT INTO items (x) VALUES (1)"
28
+ # SEQUEL5: Remove
29
+ unless Sequel.mock.dataset.frozen?
30
+ it "should have working mutation method" do
31
+ @ds = Sequel.mock.dataset.from(:items).extension(:set_overrides)
32
+ @ds.set_defaults!(:x=>1)
33
+ @ds.insert_sql.must_equal "INSERT INTO items (x) VALUES (1)"
34
+ end
32
35
  end
33
36
  end
34
37
 
@@ -53,10 +56,13 @@ describe "Sequel::Dataset #set_overrides" do
53
56
  @ds.set_overrides(:x=>2).update_sql.must_equal "UPDATE items SET x = 1"
54
57
  end
55
58
 
56
- it "should have working mutation method" do
57
- @ds = Sequel.mock.dataset.from(:items).extension(:set_overrides)
58
- @ds.set_overrides!(:x=>1)
59
- @ds.insert_sql.must_equal "INSERT INTO items (x) VALUES (1)"
59
+ # SEQUEL5: Remove
60
+ unless Sequel.mock.dataset.frozen?
61
+ it "should have working mutation method" do
62
+ @ds = Sequel.mock.dataset.from(:items).extension(:set_overrides)
63
+ @ds.set_overrides!(:x=>1)
64
+ @ds.insert_sql.must_equal "INSERT INTO items (x) VALUES (1)"
65
+ end
60
66
  end
61
67
 
62
68
  it "should consider dataset with select overrides and default a simple select all" do
@@ -3,21 +3,18 @@ require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
3
3
  describe "sharding plugin" do
4
4
  before do
5
5
  @db = Sequel.mock(:numrows=>1, :autoid=>proc{1}, :servers=>{:s1=>{}, :s2=>{}, :s3=>{}, :s4=>{}})
6
- @Artist = Class.new(Sequel::Model(@db[:artists]))
6
+ @Artist = Class.new(Sequel::Model(@db[:artists].with_fetch(:id=>2, :name=>'YJM')))
7
7
  @Artist.class_eval do
8
- instance_dataset._fetch = dataset._fetch = {:id=>2, :name=>'YJM'}
9
8
  columns :id, :name
10
9
  plugin :sharding
11
10
  end
12
- @Album = Class.new(Sequel::Model(@db[:albums]))
11
+ @Album = Class.new(Sequel::Model(@db[:albums].with_fetch(:id=>1, :name=>'RF', :artist_id=>2)))
13
12
  @Album.class_eval do
14
- instance_dataset._fetch = dataset._fetch = {:id=>1, :name=>'RF', :artist_id=>2}
15
13
  columns :id, :artist_id, :name
16
14
  plugin :sharding
17
15
  end
18
- @Tag = Class.new(Sequel::Model(@db[:tags]))
16
+ @Tag = Class.new(Sequel::Model(@db[:tags].with_fetch(:id=>3, :name=>'M')))
19
17
  @Tag.class_eval do
20
- instance_dataset._fetch = dataset._fetch = {:id=>3, :name=>'M'}
21
18
  columns :id, :name
22
19
  plugin :sharding
23
20
  end
@@ -67,7 +64,7 @@ describe "sharding plugin" do
67
64
  end
68
65
 
69
66
  it "should not use current dataset's shard when eager loading if eagerly loaded dataset has its own shard" do
70
- @Artist.instance_dataset.opts[:server] = @Artist.dataset.opts[:server] = :s2
67
+ @Artist.dataset = @Artist.dataset.server(:s2)
71
68
  albums = @Album.server(:s1).eager(:artist).all
72
69
  @db.sqls.must_equal ["SELECT * FROM albums -- s1", "SELECT * FROM artists WHERE (artists.id IN (2)) -- s2"]
73
70
  albums.length.must_equal 1
@@ -76,9 +73,7 @@ describe "sharding plugin" do
76
73
  end
77
74
 
78
75
  it "should use current dataset's shard when eager graphing if eagerly graphed dataset doesn't have its own shard" do
79
- ds = @Album.server(:s1).eager_graph(:artist)
80
- ds._fetch = {:id=>1, :artist_id=>2, :name=>'RF', :artist_id_0=>2, :artist_name=>'YJM'}
81
- albums = ds.all
76
+ albums = @Album.server(:s1).eager_graph(:artist).with_fetch(:id=>1, :artist_id=>2, :name=>'RF', :artist_id_0=>2, :artist_name=>'YJM').all
82
77
  @db.sqls.must_equal ["SELECT albums.id, albums.artist_id, albums.name, artist.id AS artist_id_0, artist.name AS artist_name FROM albums LEFT OUTER JOIN artists AS artist ON (artist.id = albums.artist_id) -- s1"]
83
78
  albums.length.must_equal 1
84
79
  albums.first.artist.save
@@ -86,10 +81,8 @@ describe "sharding plugin" do
86
81
  end
87
82
 
88
83
  it "should not use current dataset's shard when eager graphing if eagerly graphed dataset has its own shard" do
89
- @Artist.instance_dataset.opts[:server] = @Artist.dataset.opts[:server] = :s2
90
- ds = @Album.server(:s1).eager_graph(:artist)
91
- ds._fetch = {:id=>1, :artist_id=>2, :name=>'RF', :artist_id_0=>2, :artist_name=>'YJM'}
92
- albums = ds.all
84
+ @Artist.dataset = @Artist.dataset.server(:s2)
85
+ albums = @Album.server(:s1).eager_graph(:artist).with_fetch(:id=>1, :artist_id=>2, :name=>'RF', :artist_id_0=>2, :artist_name=>'YJM').all
93
86
  @db.sqls.must_equal ["SELECT albums.id, albums.artist_id, albums.name, artist.id AS artist_id_0, artist.name AS artist_name FROM albums LEFT OUTER JOIN artists AS artist ON (artist.id = albums.artist_id) -- s1"]
94
87
  albums.length.must_equal 1
95
88
  albums.first.artist.save
@@ -97,10 +90,8 @@ describe "sharding plugin" do
97
90
  end
98
91
 
99
92
  it "should use eagerly graphed dataset shard for eagerly graphed objects even if current dataset does not have a shard" do
100
- @Artist.instance_dataset.opts[:server] = @Artist.dataset.opts[:server] = :s2
101
- ds = @Album.eager_graph(:artist)
102
- ds._fetch = {:id=>1, :artist_id=>2, :name=>'RF', :artist_id_0=>2, :artist_name=>'YJM'}
103
- albums = ds.all
93
+ @Artist.dataset = @Artist.dataset.server(:s2)
94
+ albums = @Album.eager_graph(:artist).with_fetch(:id=>1, :artist_id=>2, :name=>'RF', :artist_id_0=>2, :artist_name=>'YJM').all
104
95
  @db.sqls.must_equal ["SELECT albums.id, albums.artist_id, albums.name, artist.id AS artist_id_0, artist.name AS artist_name FROM albums LEFT OUTER JOIN artists AS artist ON (artist.id = albums.artist_id)"]
105
96
  albums.length.must_equal 1
106
97
  albums.first.artist.save
@@ -28,7 +28,7 @@ describe "Shared caching behavior" do
28
28
  @c.load(:id=>3, :caching_model_id=>2, :caching_model_id2=>1).caching_model2.must_be_same_as(@cm21)
29
29
  @db.sqls.must_equal []
30
30
  @db.fetch = []
31
- @c.load(:id=>4, :caching_model_id=>2, :caching_model_id2=>2).caching_model2.must_equal nil
31
+ @c.load(:id=>4, :caching_model_id=>2, :caching_model_id2=>2).caching_model2.must_be_nil
32
32
  end
33
33
  end
34
34
 
@@ -40,7 +40,7 @@ describe "Shared caching behavior" do
40
40
  @c.load(:id=>4, :caching_model_id=>2).caching_model.must_be_same_as(@cm2)
41
41
  @db.sqls.must_equal []
42
42
  @db.fetch = []
43
- @c.load(:id=>4, :caching_model_id=>3).caching_model.must_equal nil
43
+ @c.load(:id=>4, :caching_model_id=>3).caching_model.must_be_nil
44
44
  end
45
45
 
46
46
  it "should not use a simple primary key lookup if the assocation has a nil :key option" do
@@ -93,8 +93,7 @@ describe "Shared caching behavior" do
93
93
  end
94
94
 
95
95
  it "should not use a simple primary key lookup if the prepared_statements_associations method is being used" do
96
- c2 = Class.new(Sequel::Model(@db[:not_caching_model]))
97
- c2.dataset._fetch = {:id=>1}
96
+ c2 = Class.new(Sequel::Model(@db[:not_caching_model].with_fetch(:id=>1)))
98
97
  c = Class.new(Sequel::Model(@db[:lookup_model]))
99
98
  c.class_eval do
100
99
  plugin :prepared_statements_associations
@@ -21,7 +21,7 @@ describe Sequel::Model, "single table inheritance plugin" do
21
21
 
22
22
  it "should have simple_table = nil" do
23
23
  StiTest.simple_table.must_equal "sti_tests"
24
- StiTestSub1.simple_table.must_equal nil
24
+ StiTestSub1.simple_table.must_be_nil
25
25
  end
26
26
 
27
27
  it "should allow changing the inheritance column via a plugin :single_table_inheritance call" do
@@ -30,7 +30,7 @@ describe Sequel::Model, "single table inheritance plugin" do
30
30
  Object.send(:remove_const, :StiTestSub2)
31
31
  class ::StiTestSub1 < StiTest; end
32
32
  class ::StiTestSub2 < StiTest; end
33
- StiTest.dataset._fetch = [{:blah=>'StiTest'}, {:blah=>'StiTestSub1'}, {:blah=>'StiTestSub2'}]
33
+ StiTest.dataset = StiTest.dataset.with_fetch([{:blah=>'StiTest'}, {:blah=>'StiTestSub1'}, {:blah=>'StiTestSub2'}])
34
34
  StiTest.all.collect{|x| x.class}.must_equal [StiTest, StiTestSub1, StiTestSub2]
35
35
  StiTest.dataset.sql.must_equal "SELECT * FROM sti_tests"
36
36
  StiTestSub1.dataset.sql.must_equal "SELECT * FROM sti_tests WHERE (sti_tests.blah IN ('StiTestSub1'))"
@@ -38,23 +38,23 @@ describe Sequel::Model, "single table inheritance plugin" do
38
38
  end
39
39
 
40
40
  it "should return rows with the correct class based on the polymorphic_key value" do
41
- @ds._fetch = [{:kind=>'StiTest'}, {:kind=>'StiTestSub1'}, {:kind=>'StiTestSub2'}]
41
+ StiTest.dataset = StiTest.dataset.with_fetch([{:kind=>'StiTest'}, {:kind=>'StiTestSub1'}, {:kind=>'StiTestSub2'}])
42
42
  StiTest.all.collect{|x| x.class}.must_equal [StiTest, StiTestSub1, StiTestSub2]
43
43
  end
44
44
 
45
45
  it "should return rows with the correct class based on the polymorphic_key value when retreiving by primary key" do
46
- @ds._fetch = [{:kind=>'StiTestSub1'}]
46
+ StiTest.dataset = StiTest.dataset.with_fetch([{:kind=>'StiTestSub1'}])
47
47
  StiTest[1].class.must_equal StiTestSub1
48
48
  end
49
49
 
50
50
  it "should return rows with the correct class for subclasses based on the polymorphic_key value" do
51
51
  class ::StiTestSub1Sub < StiTestSub1; end
52
- StiTestSub1.dataset._fetch = [{:kind=>'StiTestSub1'}, {:kind=>'StiTestSub1Sub'}]
52
+ StiTestSub1.dataset = StiTestSub1.dataset.with_fetch([{:kind=>'StiTestSub1'}, {:kind=>'StiTestSub1Sub'}])
53
53
  StiTestSub1.all.collect{|x| x.class}.must_equal [StiTestSub1, StiTestSub1Sub]
54
54
  end
55
55
 
56
56
  it "should fallback to the main class if the given class does not exist" do
57
- @ds._fetch = {:kind=>'StiTestSub3'}
57
+ StiTest.dataset = StiTest.dataset.with_fetch(:kind=>'StiTestSub3')
58
58
  StiTest.all.collect{|x| x.class}.must_equal [StiTest]
59
59
  end
60
60
 
@@ -65,7 +65,7 @@ describe Sequel::Model, "single table inheritance plugin" do
65
65
  Object
66
66
  end
67
67
  StiTest.plugin :single_table_inheritance, :kind
68
- StiTest.dataset._fetch = [{:kind=>''}, {:kind=>nil}]
68
+ StiTest.dataset = StiTest.dataset.with_fetch([{:kind=>''}, {:kind=>nil}])
69
69
  StiTest.all.collect{|x| x.class}.must_equal [StiTest, StiTest]
70
70
  called.must_equal false
71
71
  end
@@ -147,8 +147,8 @@ describe Sequel::Model, "single table inheritance plugin" do
147
147
  c2[obj2.id]
148
148
  c2.cache_get_pk(obj2.id).values.must_equal StiTest.cache_get_pk(obj2.id).values
149
149
  obj2.save
150
- c2.cache_get_pk(obj2.id).must_equal nil
151
- StiTest.cache_get_pk(obj2.id).must_equal nil
150
+ c2.cache_get_pk(obj2.id).must_be_nil
151
+ StiTest.cache_get_pk(obj2.id).must_be_nil
152
152
  end
153
153
 
154
154
  describe "with custom options" do
@@ -170,7 +170,7 @@ describe Sequel::Model, "single table inheritance plugin" do
170
170
  set_dataset(dataset.select(*(columns - [:blah])))
171
171
  end
172
172
  class ::StiTest4 < ::StiTest3; end
173
- StiTest3.dataset._fetch = {:id=>1, :kind=>'StiTest4'}
173
+ StiTest3.dataset = StiTest3.dataset.with_fetch(:id=>1, :kind=>'StiTest4')
174
174
  StiTest3[1].must_equal StiTest4.load(:id=>1, :kind=>'StiTest4')
175
175
  end
176
176
 
@@ -214,7 +214,7 @@ describe Sequel::Model, "single table inheritance plugin" do
214
214
  StiTest4.create.kind.must_equal 6
215
215
 
216
216
  class ::StiTest5 < ::StiTest4; end
217
- StiTest5.create.kind.must_equal nil
217
+ StiTest5.create.kind.must_be_nil
218
218
  end
219
219
 
220
220
  it "should infer key_map from model_map if provided as a hash" do