sequel 4.22.0 → 4.23.0

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 (214) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +22 -0
  3. data/README.rdoc +6 -0
  4. data/Rakefile +59 -81
  5. data/doc/migration.rdoc +2 -0
  6. data/doc/release_notes/4.23.0.txt +65 -0
  7. data/doc/sharding.rdoc +16 -14
  8. data/doc/testing.rdoc +61 -77
  9. data/lib/sequel/adapters/jdbc.rb +1 -0
  10. data/lib/sequel/adapters/mock.rb +0 -1
  11. data/lib/sequel/adapters/postgres.rb +1 -0
  12. data/lib/sequel/adapters/postgresql.rb +1 -0
  13. data/lib/sequel/adapters/shared/postgres.rb +3 -3
  14. data/lib/sequel/connection_pool/sharded_threaded.rb +5 -0
  15. data/lib/sequel/connection_pool/threaded.rb +9 -1
  16. data/lib/sequel/database/connecting.rb +1 -1
  17. data/lib/sequel/database/transactions.rb +2 -1
  18. data/lib/sequel/dataset/prepared_statements.rb +1 -1
  19. data/lib/sequel/extensions/constraint_validations.rb +12 -12
  20. data/lib/sequel/extensions/date_arithmetic.rb +0 -4
  21. data/lib/sequel/extensions/pagination.rb +14 -2
  22. data/lib/sequel/extensions/pg_enum.rb +2 -2
  23. data/lib/sequel/extensions/pg_hstore.rb +1 -1
  24. data/lib/sequel/extensions/pg_json_ops.rb +2 -2
  25. data/lib/sequel/plugins/csv_serializer.rb +2 -0
  26. data/lib/sequel/plugins/delay_add_association.rb +50 -0
  27. data/lib/sequel/plugins/list.rb +2 -2
  28. data/lib/sequel/plugins/nested_attributes.rb +8 -28
  29. data/lib/sequel/plugins/update_refresh.rb +50 -0
  30. data/lib/sequel/plugins/validate_associated.rb +55 -0
  31. data/lib/sequel/version.rb +1 -1
  32. data/spec/adapters/db2_spec.rb +29 -29
  33. data/spec/adapters/firebird_spec.rb +97 -103
  34. data/spec/adapters/informix_spec.rb +25 -25
  35. data/spec/adapters/mssql_spec.rb +156 -172
  36. data/spec/adapters/mysql_spec.rb +334 -359
  37. data/spec/adapters/oracle_spec.rb +67 -69
  38. data/spec/adapters/postgres_spec.rb +1298 -1249
  39. data/spec/adapters/spec_helper.rb +2 -35
  40. data/spec/adapters/sqlanywhere_spec.rb +39 -39
  41. data/spec/adapters/sqlite_spec.rb +203 -200
  42. data/spec/bin_spec.rb +57 -59
  43. data/spec/core/connection_pool_spec.rb +402 -401
  44. data/spec/core/database_spec.rb +953 -944
  45. data/spec/core/dataset_spec.rb +2178 -2168
  46. data/spec/core/deprecated_spec.rb +19 -19
  47. data/spec/core/expression_filters_spec.rb +415 -415
  48. data/spec/core/mock_adapter_spec.rb +212 -212
  49. data/spec/core/object_graph_spec.rb +73 -73
  50. data/spec/core/placeholder_literalizer_spec.rb +71 -71
  51. data/spec/core/schema_generator_spec.rb +44 -44
  52. data/spec/core/schema_spec.rb +470 -472
  53. data/spec/core/spec_helper.rb +5 -20
  54. data/spec/core/version_spec.rb +2 -2
  55. data/spec/core_extensions_spec.rb +320 -320
  56. data/spec/extensions/accessed_columns_spec.rb +12 -12
  57. data/spec/extensions/active_model_spec.rb +3 -3
  58. data/spec/extensions/after_initialize_spec.rb +2 -2
  59. data/spec/extensions/arbitrary_servers_spec.rb +23 -23
  60. data/spec/extensions/association_dependencies_spec.rb +34 -34
  61. data/spec/extensions/association_pks_spec.rb +98 -98
  62. data/spec/extensions/association_proxies_spec.rb +33 -33
  63. data/spec/extensions/auto_validations_spec.rb +46 -46
  64. data/spec/extensions/blacklist_security_spec.rb +19 -18
  65. data/spec/extensions/blank_spec.rb +36 -36
  66. data/spec/extensions/boolean_readers_spec.rb +36 -36
  67. data/spec/extensions/caching_spec.rb +82 -82
  68. data/spec/extensions/class_table_inheritance_spec.rb +72 -72
  69. data/spec/extensions/column_conflicts_spec.rb +19 -14
  70. data/spec/extensions/column_select_spec.rb +19 -19
  71. data/spec/extensions/columns_introspection_spec.rb +43 -43
  72. data/spec/extensions/composition_spec.rb +64 -64
  73. data/spec/extensions/connection_validator_spec.rb +92 -90
  74. data/spec/extensions/constraint_validations_plugin_spec.rb +92 -92
  75. data/spec/extensions/constraint_validations_spec.rb +80 -80
  76. data/spec/extensions/core_refinements_spec.rb +220 -220
  77. data/spec/extensions/csv_serializer_spec.rb +44 -44
  78. data/spec/extensions/current_datetime_timestamp_spec.rb +8 -8
  79. data/spec/extensions/dataset_associations_spec.rb +65 -65
  80. data/spec/extensions/dataset_source_alias_spec.rb +16 -16
  81. data/spec/extensions/date_arithmetic_spec.rb +51 -58
  82. data/spec/extensions/defaults_setter_spec.rb +19 -19
  83. data/spec/extensions/delay_add_association_spec.rb +52 -0
  84. data/spec/extensions/dirty_spec.rb +51 -51
  85. data/spec/extensions/eager_each_spec.rb +8 -8
  86. data/spec/extensions/empty_array_ignore_nulls_spec.rb +10 -10
  87. data/spec/extensions/error_splitter_spec.rb +2 -2
  88. data/spec/extensions/error_sql_spec.rb +4 -4
  89. data/spec/extensions/eval_inspect_spec.rb +3 -3
  90. data/spec/extensions/filter_having_spec.rb +8 -8
  91. data/spec/extensions/force_encoding_spec.rb +30 -30
  92. data/spec/extensions/from_block_spec.rb +7 -7
  93. data/spec/extensions/graph_each_spec.rb +19 -19
  94. data/spec/extensions/hash_aliases_spec.rb +5 -5
  95. data/spec/extensions/hook_class_methods_spec.rb +100 -100
  96. data/spec/extensions/inflector_spec.rb +54 -54
  97. data/spec/extensions/input_transformer_spec.rb +10 -10
  98. data/spec/extensions/insert_returning_select_spec.rb +8 -8
  99. data/spec/extensions/instance_filters_spec.rb +26 -26
  100. data/spec/extensions/instance_hooks_spec.rb +85 -85
  101. data/spec/extensions/json_serializer_spec.rb +68 -68
  102. data/spec/extensions/lazy_attributes_spec.rb +49 -49
  103. data/spec/extensions/list_spec.rb +77 -75
  104. data/spec/extensions/looser_typecasting_spec.rb +16 -16
  105. data/spec/extensions/many_through_many_spec.rb +627 -627
  106. data/spec/extensions/meta_def_spec.rb +7 -7
  107. data/spec/extensions/migration_spec.rb +217 -217
  108. data/spec/extensions/modification_detection_spec.rb +20 -20
  109. data/spec/extensions/mssql_optimistic_locking_spec.rb +21 -21
  110. data/spec/extensions/named_timezones_spec.rb +18 -18
  111. data/spec/extensions/nested_attributes_spec.rb +107 -107
  112. data/spec/extensions/null_dataset_spec.rb +24 -24
  113. data/spec/extensions/optimistic_locking_spec.rb +21 -21
  114. data/spec/extensions/pagination_spec.rb +52 -52
  115. data/spec/extensions/pg_array_associations_spec.rb +273 -273
  116. data/spec/extensions/pg_array_ops_spec.rb +52 -52
  117. data/spec/extensions/pg_array_spec.rb +152 -152
  118. data/spec/extensions/pg_enum_spec.rb +13 -13
  119. data/spec/extensions/pg_hstore_ops_spec.rb +63 -63
  120. data/spec/extensions/pg_hstore_spec.rb +84 -84
  121. data/spec/extensions/pg_inet_spec.rb +15 -15
  122. data/spec/extensions/pg_interval_spec.rb +29 -29
  123. data/spec/extensions/pg_json_ops_spec.rb +86 -84
  124. data/spec/extensions/pg_json_spec.rb +104 -104
  125. data/spec/extensions/pg_loose_count_spec.rb +6 -6
  126. data/spec/extensions/pg_range_ops_spec.rb +24 -24
  127. data/spec/extensions/pg_range_spec.rb +143 -143
  128. data/spec/extensions/pg_row_ops_spec.rb +14 -14
  129. data/spec/extensions/pg_row_plugin_spec.rb +12 -12
  130. data/spec/extensions/pg_row_spec.rb +118 -118
  131. data/spec/extensions/pg_static_cache_updater_spec.rb +28 -28
  132. data/spec/extensions/pg_typecast_on_load_spec.rb +21 -21
  133. data/spec/extensions/prepared_statements_associations_spec.rb +42 -42
  134. data/spec/extensions/prepared_statements_safe_spec.rb +18 -18
  135. data/spec/extensions/prepared_statements_spec.rb +28 -28
  136. data/spec/extensions/prepared_statements_with_pk_spec.rb +11 -11
  137. data/spec/extensions/pretty_table_spec.rb +16 -16
  138. data/spec/extensions/query_literals_spec.rb +37 -37
  139. data/spec/extensions/query_spec.rb +32 -32
  140. data/spec/extensions/rcte_tree_spec.rb +141 -141
  141. data/spec/extensions/round_timestamps_spec.rb +21 -21
  142. data/spec/extensions/schema_caching_spec.rb +8 -8
  143. data/spec/extensions/schema_dumper_spec.rb +78 -78
  144. data/spec/extensions/schema_spec.rb +31 -27
  145. data/spec/extensions/scissors_spec.rb +3 -3
  146. data/spec/extensions/select_remove_spec.rb +14 -14
  147. data/spec/extensions/sequel_3_dataset_methods_spec.rb +28 -28
  148. data/spec/extensions/serialization_modification_detection_spec.rb +33 -33
  149. data/spec/extensions/serialization_spec.rb +79 -78
  150. data/spec/extensions/server_block_spec.rb +17 -17
  151. data/spec/extensions/set_overrides_spec.rb +30 -30
  152. data/spec/extensions/sharding_spec.rb +65 -65
  153. data/spec/extensions/shared_caching_spec.rb +29 -29
  154. data/spec/extensions/single_table_inheritance_spec.rb +79 -79
  155. data/spec/extensions/skip_create_refresh_spec.rb +3 -3
  156. data/spec/extensions/spec_helper.rb +4 -29
  157. data/spec/extensions/split_array_nil_spec.rb +9 -9
  158. data/spec/extensions/split_values_spec.rb +7 -7
  159. data/spec/extensions/sql_expr_spec.rb +32 -32
  160. data/spec/extensions/static_cache_spec.rb +123 -123
  161. data/spec/extensions/string_date_time_spec.rb +34 -34
  162. data/spec/extensions/string_stripper_spec.rb +15 -15
  163. data/spec/extensions/subclasses_spec.rb +31 -31
  164. data/spec/extensions/table_select_spec.rb +15 -15
  165. data/spec/extensions/tactical_eager_loading_spec.rb +23 -23
  166. data/spec/extensions/thread_local_timezones_spec.rb +13 -13
  167. data/spec/extensions/timestamps_spec.rb +40 -40
  168. data/spec/extensions/to_dot_spec.rb +34 -34
  169. data/spec/extensions/touch_spec.rb +52 -52
  170. data/spec/extensions/tree_spec.rb +72 -72
  171. data/spec/extensions/typecast_on_load_spec.rb +25 -25
  172. data/spec/extensions/unlimited_update_spec.rb +2 -2
  173. data/spec/extensions/update_or_create_spec.rb +36 -36
  174. data/spec/extensions/update_primary_key_spec.rb +35 -35
  175. data/spec/extensions/update_refresh_spec.rb +41 -0
  176. data/spec/extensions/validate_associated_spec.rb +52 -0
  177. data/spec/extensions/validation_class_methods_spec.rb +314 -317
  178. data/spec/extensions/validation_helpers_spec.rb +195 -195
  179. data/spec/extensions/xml_serializer_spec.rb +48 -48
  180. data/spec/guards_helper.rb +55 -0
  181. data/spec/integration/associations_test.rb +1089 -1088
  182. data/spec/integration/database_test.rb +29 -29
  183. data/spec/integration/dataset_test.rb +661 -661
  184. data/spec/integration/eager_loader_test.rb +147 -147
  185. data/spec/integration/migrator_test.rb +122 -122
  186. data/spec/integration/model_test.rb +70 -70
  187. data/spec/integration/plugin_test.rb +682 -640
  188. data/spec/integration/prepared_statement_test.rb +172 -172
  189. data/spec/integration/schema_test.rb +245 -245
  190. data/spec/integration/spec_helper.rb +1 -64
  191. data/spec/integration/timezone_test.rb +17 -17
  192. data/spec/integration/transaction_test.rb +87 -87
  193. data/spec/integration/type_test.rb +33 -33
  194. data/spec/model/association_reflection_spec.rb +130 -121
  195. data/spec/model/associations_spec.rb +1112 -1113
  196. data/spec/model/base_spec.rb +197 -196
  197. data/spec/model/class_dataset_methods_spec.rb +118 -118
  198. data/spec/model/dataset_methods_spec.rb +49 -49
  199. data/spec/model/eager_loading_spec.rb +705 -702
  200. data/spec/model/hooks_spec.rb +169 -168
  201. data/spec/model/inflector_spec.rb +5 -5
  202. data/spec/model/model_spec.rb +287 -297
  203. data/spec/model/plugins_spec.rb +47 -47
  204. data/spec/model/record_spec.rb +534 -535
  205. data/spec/model/spec_helper.rb +3 -21
  206. data/spec/model/validations_spec.rb +72 -70
  207. data/spec/spec_config.rb +8 -0
  208. metadata +41 -9
  209. data/lib/sequel/adapters/fdbsql.rb +0 -286
  210. data/lib/sequel/adapters/jdbc/fdbsql.rb +0 -66
  211. data/lib/sequel/adapters/openbase.rb +0 -54
  212. data/lib/sequel/adapters/shared/fdbsql.rb +0 -550
  213. data/spec/adapters/fdbsql_spec.rb +0 -429
  214. data/spec/rspec_helper.rb +0 -22
@@ -1,26 +1,26 @@
1
1
  require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
2
2
 
3
- shared_examples_for "Database#with_server" do
4
- specify "should set the default server to use in the block" do
3
+ with_server_specs = shared_description do
4
+ it "should set the default server to use in the block" do
5
5
  @db.with_server(:a){@db[:t].all}
6
- @db.sqls.should == ["SELECT * FROM t -- a"]
6
+ @db.sqls.must_equal ["SELECT * FROM t -- a"]
7
7
  @db.with_server(:b){@db[:t].all}
8
- @db.sqls.should == ["SELECT * FROM t -- b"]
8
+ @db.sqls.must_equal ["SELECT * FROM t -- b"]
9
9
  end
10
10
 
11
- specify "should have no affect after the block" do
11
+ it "should have no affect after the block" do
12
12
  @db.with_server(:a){@db[:t].all}
13
- @db.sqls.should == ["SELECT * FROM t -- a"]
13
+ @db.sqls.must_equal ["SELECT * FROM t -- a"]
14
14
  @db[:t].all
15
- @db.sqls.should == ["SELECT * FROM t"]
15
+ @db.sqls.must_equal ["SELECT * FROM t"]
16
16
  end
17
17
 
18
- specify "should not override specific server inside the block" do
18
+ it "should not override specific server inside the block" do
19
19
  @db.with_server(:a){@db[:t].server(:b).all}
20
- @db.sqls.should == ["SELECT * FROM t -- b"]
20
+ @db.sqls.must_equal ["SELECT * FROM t -- b"]
21
21
  end
22
22
 
23
- specify "should work correctly when blocks are nested" do
23
+ it "should work correctly when blocks are nested" do
24
24
  @db[:t].all
25
25
  @db.with_server(:a) do
26
26
  @db[:t].all
@@ -28,16 +28,16 @@ shared_examples_for "Database#with_server" do
28
28
  @db[:t].all
29
29
  end
30
30
  @db[:t].all
31
- @db.sqls.should == ["SELECT * FROM t", "SELECT * FROM t -- a", "SELECT * FROM t -- b", "SELECT * FROM t -- a", "SELECT * FROM t"]
31
+ @db.sqls.must_equal ["SELECT * FROM t", "SELECT * FROM t -- a", "SELECT * FROM t -- b", "SELECT * FROM t -- a", "SELECT * FROM t"]
32
32
  end
33
33
 
34
- specify "should work correctly for inserts/updates/deletes" do
34
+ it "should work correctly for inserts/updates/deletes" do
35
35
  @db.with_server(:a) do
36
36
  @db[:t].insert
37
37
  @db[:t].update(:a=>1)
38
38
  @db[:t].delete
39
39
  end
40
- @db.sqls.should == ["INSERT INTO t DEFAULT VALUES -- a", "UPDATE t SET a = 1 -- a", "DELETE FROM t -- a"]
40
+ @db.sqls.must_equal ["INSERT INTO t DEFAULT VALUES -- a", "UPDATE t SET a = 1 -- a", "DELETE FROM t -- a"]
41
41
  end
42
42
  end
43
43
 
@@ -47,7 +47,7 @@ describe "Database#with_server single threaded" do
47
47
  @db.extension :server_block
48
48
  end
49
49
 
50
- it_should_behave_like "Database#with_server"
50
+ include with_server_specs
51
51
  end
52
52
 
53
53
  describe "Database#with_server multi threaded" do
@@ -56,9 +56,9 @@ describe "Database#with_server multi threaded" do
56
56
  @db.extension :server_block
57
57
  end
58
58
 
59
- it_should_behave_like "Database#with_server"
59
+ include with_server_specs
60
60
 
61
- specify "should respect multithreaded access" do
61
+ it "should respect multithreaded access" do
62
62
  q, q1 = Queue.new, Queue.new
63
63
 
64
64
  t = nil
@@ -83,7 +83,7 @@ describe "Database#with_server multi threaded" do
83
83
  @db[:t].all
84
84
  q1.push nil
85
85
  t.join
86
- @db.sqls.should == ["SELECT * FROM t", "SELECT * FROM t -- a", "SELECT * FROM t", "SELECT * FROM t -- c", "SELECT * FROM t -- d",
86
+ @db.sqls.must_equal ["SELECT * FROM t", "SELECT * FROM t -- a", "SELECT * FROM t", "SELECT * FROM t -- c", "SELECT * FROM t -- d",
87
87
  "SELECT * FROM t -- b", "SELECT * FROM t -- a", "SELECT * FROM t", "SELECT * FROM t -- c", "SELECT * FROM t"]
88
88
  end
89
89
  end
@@ -5,30 +5,30 @@ describe "Sequel::Dataset #set_defaults" do
5
5
  @ds = Sequel.mock.dataset.from(:items).extension(:set_overrides).set_defaults(:x=>1)
6
6
  end
7
7
 
8
- specify "should set the default values for inserts" do
9
- @ds.insert_sql.should == "INSERT INTO items (x) VALUES (1)"
10
- @ds.insert_sql(:x=>2).should == "INSERT INTO items (x) VALUES (2)"
11
- @ds.insert_sql(:y=>2).should =~ /INSERT INTO items \([xy], [xy]\) VALUES \([21], [21]\)/
12
- @ds.set_defaults(:y=>2).insert_sql.should =~ /INSERT INTO items \([xy], [xy]\) VALUES \([21], [21]\)/
13
- @ds.set_defaults(:x=>2).insert_sql.should == "INSERT INTO items (x) VALUES (2)"
8
+ it "should set the default values for inserts" do
9
+ @ds.insert_sql.must_equal "INSERT INTO items (x) VALUES (1)"
10
+ @ds.insert_sql(:x=>2).must_equal "INSERT INTO items (x) VALUES (2)"
11
+ @ds.insert_sql(:y=>2).must_match(/INSERT INTO items \([xy], [xy]\) VALUES \([21], [21]\)/)
12
+ @ds.set_defaults(:y=>2).insert_sql.must_match(/INSERT INTO items \([xy], [xy]\) VALUES \([21], [21]\)/)
13
+ @ds.set_defaults(:x=>2).insert_sql.must_equal "INSERT INTO items (x) VALUES (2)"
14
14
  end
15
15
 
16
- specify "should set the default values for updates" do
17
- @ds.update_sql.should == "UPDATE items SET x = 1"
18
- @ds.update_sql(:x=>2).should == "UPDATE items SET x = 2"
19
- @ds.update_sql(:y=>2).should =~ /UPDATE items SET (x = 1|y = 2), (x = 1|y = 2)/
20
- @ds.set_defaults(:y=>2).update_sql.should =~ /UPDATE items SET (x = 1|y = 2), (x = 1|y = 2)/
21
- @ds.set_defaults(:x=>2).update_sql.should == "UPDATE items SET x = 2"
16
+ it "should set the default values for updates" do
17
+ @ds.update_sql.must_equal "UPDATE items SET x = 1"
18
+ @ds.update_sql(:x=>2).must_equal "UPDATE items SET x = 2"
19
+ @ds.update_sql(:y=>2).must_match(/UPDATE items SET (x = 1|y = 2), (x = 1|y = 2)/)
20
+ @ds.set_defaults(:y=>2).update_sql.must_match(/UPDATE items SET (x = 1|y = 2), (x = 1|y = 2)/)
21
+ @ds.set_defaults(:x=>2).update_sql.must_equal "UPDATE items SET x = 2"
22
22
  end
23
23
 
24
- specify "should not affect String update arguments" do
25
- @ds.update_sql('y = 2').should == "UPDATE items SET y = 2"
24
+ it "should not affect String update arguments" do
25
+ @ds.update_sql('y = 2').must_equal "UPDATE items SET y = 2"
26
26
  end
27
27
 
28
- specify "should have working mutation method" do
28
+ it "should have working mutation method" do
29
29
  @ds = Sequel.mock.dataset.from(:items).extension(:set_overrides)
30
30
  @ds.set_defaults!(:x=>1)
31
- @ds.insert_sql.should == "INSERT INTO items (x) VALUES (1)"
31
+ @ds.insert_sql.must_equal "INSERT INTO items (x) VALUES (1)"
32
32
  end
33
33
  end
34
34
 
@@ -37,25 +37,25 @@ describe "Sequel::Dataset #set_overrides" do
37
37
  @ds = Sequel.mock.dataset.from(:items).extension(:set_overrides).set_overrides(:x=>1)
38
38
  end
39
39
 
40
- specify "should override the given values for inserts" do
41
- @ds.insert_sql.should == "INSERT INTO items (x) VALUES (1)"
42
- @ds.insert_sql(:x=>2).should == "INSERT INTO items (x) VALUES (1)"
43
- @ds.insert_sql(:y=>2).should =~ /INSERT INTO items \([xy], [xy]\) VALUES \([21], [21]\)/
44
- @ds.set_overrides(:y=>2).insert_sql.should =~ /INSERT INTO items \([xy], [xy]\) VALUES \([21], [21]\)/
45
- @ds.set_overrides(:x=>2).insert_sql.should == "INSERT INTO items (x) VALUES (1)"
40
+ it "should override the given values for inserts" do
41
+ @ds.insert_sql.must_equal "INSERT INTO items (x) VALUES (1)"
42
+ @ds.insert_sql(:x=>2).must_equal "INSERT INTO items (x) VALUES (1)"
43
+ @ds.insert_sql(:y=>2).must_match(/INSERT INTO items \([xy], [xy]\) VALUES \([21], [21]\)/)
44
+ @ds.set_overrides(:y=>2).insert_sql.must_match(/INSERT INTO items \([xy], [xy]\) VALUES \([21], [21]\)/)
45
+ @ds.set_overrides(:x=>2).insert_sql.must_equal "INSERT INTO items (x) VALUES (1)"
46
46
  end
47
47
 
48
- specify "should override the given values for updates" do
49
- @ds.update_sql.should == "UPDATE items SET x = 1"
50
- @ds.update_sql(:x=>2).should == "UPDATE items SET x = 1"
51
- @ds.update_sql(:y=>2).should =~ /UPDATE items SET (x = 1|y = 2), (x = 1|y = 2)/
52
- @ds.set_overrides(:y=>2).update_sql.should =~ /UPDATE items SET (x = 1|y = 2), (x = 1|y = 2)/
53
- @ds.set_overrides(:x=>2).update_sql.should == "UPDATE items SET x = 1"
48
+ it "should override the given values for updates" do
49
+ @ds.update_sql.must_equal "UPDATE items SET x = 1"
50
+ @ds.update_sql(:x=>2).must_equal "UPDATE items SET x = 1"
51
+ @ds.update_sql(:y=>2).must_match(/UPDATE items SET (x = 1|y = 2), (x = 1|y = 2)/)
52
+ @ds.set_overrides(:y=>2).update_sql.must_match(/UPDATE items SET (x = 1|y = 2), (x = 1|y = 2)/)
53
+ @ds.set_overrides(:x=>2).update_sql.must_equal "UPDATE items SET x = 1"
54
54
  end
55
55
 
56
- specify "should have working mutation method" do
56
+ it "should have working mutation method" do
57
57
  @ds = Sequel.mock.dataset.from(:items).extension(:set_overrides)
58
58
  @ds.set_overrides!(:x=>1)
59
- @ds.insert_sql.should == "INSERT INTO items (x) VALUES (1)"
59
+ @ds.insert_sql.must_equal "INSERT INTO items (x) VALUES (1)"
60
60
  end
61
61
  end
@@ -27,172 +27,172 @@ describe "sharding plugin" do
27
27
  @db.sqls
28
28
  end
29
29
 
30
- specify "should allow you to instantiate a new object for a specified shard" do
30
+ it "should allow you to instantiate a new object for a specified shard" do
31
31
  @Album.new_using_server(:s1, :name=>'RF').save
32
- @db.sqls.should == ["INSERT INTO albums (name) VALUES ('RF') -- s1", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s1"]
32
+ @db.sqls.must_equal ["INSERT INTO albums (name) VALUES ('RF') -- s1", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s1"]
33
33
 
34
34
  @Album.new_using_server(:s2){|o| o.name = 'MO'}.save
35
- @db.sqls.should == ["INSERT INTO albums (name) VALUES ('MO') -- s2", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s2"]
35
+ @db.sqls.must_equal ["INSERT INTO albums (name) VALUES ('MO') -- s2", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s2"]
36
36
  end
37
37
 
38
- specify "should allow you to create and save a new object for a specified shard" do
38
+ it "should allow you to create and save a new object for a specified shard" do
39
39
  @Album.create_using_server(:s1, :name=>'RF')
40
- @db.sqls.should == ["INSERT INTO albums (name) VALUES ('RF') -- s1", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s1"]
40
+ @db.sqls.must_equal ["INSERT INTO albums (name) VALUES ('RF') -- s1", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s1"]
41
41
 
42
42
  @Album.create_using_server(:s2){|o| o.name = 'MO'}
43
- @db.sqls.should == ["INSERT INTO albums (name) VALUES ('MO') -- s2", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s2"]
43
+ @db.sqls.must_equal ["INSERT INTO albums (name) VALUES ('MO') -- s2", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s2"]
44
44
  end
45
45
 
46
- specify "should have objects retrieved from a specific shard update that shard" do
46
+ it "should have objects retrieved from a specific shard update that shard" do
47
47
  @Album.server(:s1).first.update(:name=>'MO')
48
- @db.sqls.should == ["SELECT * FROM albums LIMIT 1 -- s1", "UPDATE albums SET name = 'MO' WHERE (id = 1) -- s1"]
48
+ @db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "UPDATE albums SET name = 'MO' WHERE (id = 1) -- s1"]
49
49
  end
50
50
 
51
- specify "should have objects retrieved from a specific shard delete from that shard" do
51
+ it "should have objects retrieved from a specific shard delete from that shard" do
52
52
  @Album.server(:s1).first.delete
53
- @db.sqls.should == ["SELECT * FROM albums LIMIT 1 -- s1", "DELETE FROM albums WHERE (id = 1) -- s1"]
53
+ @db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "DELETE FROM albums WHERE (id = 1) -- s1"]
54
54
  end
55
55
 
56
- specify "should have objects retrieved from a specific shard reload from that shard" do
56
+ it "should have objects retrieved from a specific shard reload from that shard" do
57
57
  @Album.server(:s1).first.reload
58
- @db.sqls.should == ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s1"]
58
+ @db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s1"]
59
59
  end
60
60
 
61
- specify "should use current dataset's shard when eager loading if eagerly loaded dataset doesn't have its own shard" do
61
+ it "should use current dataset's shard when eager loading if eagerly loaded dataset doesn't have its own shard" do
62
62
  albums = @Album.server(:s1).eager(:artist).all
63
- @db.sqls.should == ["SELECT * FROM albums -- s1", "SELECT * FROM artists WHERE (artists.id IN (2)) -- s1"]
64
- albums.length.should == 1
63
+ @db.sqls.must_equal ["SELECT * FROM albums -- s1", "SELECT * FROM artists WHERE (artists.id IN (2)) -- s1"]
64
+ albums.length.must_equal 1
65
65
  albums.first.artist.save
66
- @db.sqls.should == ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s1"]
66
+ @db.sqls.must_equal ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s1"]
67
67
  end
68
68
 
69
- specify "should not use current dataset's shard when eager loading if eagerly loaded dataset has its own shard" do
69
+ it "should not use current dataset's shard when eager loading if eagerly loaded dataset has its own shard" do
70
70
  @Artist.instance_dataset.opts[:server] = @Artist.dataset.opts[:server] = :s2
71
71
  albums = @Album.server(:s1).eager(:artist).all
72
- @db.sqls.should == ["SELECT * FROM albums -- s1", "SELECT * FROM artists WHERE (artists.id IN (2)) -- s2"]
73
- albums.length.should == 1
72
+ @db.sqls.must_equal ["SELECT * FROM albums -- s1", "SELECT * FROM artists WHERE (artists.id IN (2)) -- s2"]
73
+ albums.length.must_equal 1
74
74
  albums.first.artist.save
75
- @db.sqls.should == ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s2"]
75
+ @db.sqls.must_equal ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s2"]
76
76
  end
77
77
 
78
- specify "should use current dataset's shard when eager graphing if eagerly graphed dataset doesn't have its own shard" do
78
+ it "should use current dataset's shard when eager graphing if eagerly graphed dataset doesn't have its own shard" do
79
79
  ds = @Album.server(:s1).eager_graph(:artist)
80
80
  ds._fetch = {:id=>1, :artist_id=>2, :name=>'RF', :artist_id_0=>2, :artist_name=>'YJM'}
81
81
  albums = ds.all
82
- @db.sqls.should == ["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
- albums.length.should == 1
82
+ @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
+ albums.length.must_equal 1
84
84
  albums.first.artist.save
85
- @db.sqls.should == ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s1"]
85
+ @db.sqls.must_equal ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s1"]
86
86
  end
87
87
 
88
- specify "should not use current dataset's shard when eager graphing if eagerly graphed dataset has its own shard" do
88
+ it "should not use current dataset's shard when eager graphing if eagerly graphed dataset has its own shard" do
89
89
  @Artist.instance_dataset.opts[:server] = @Artist.dataset.opts[:server] = :s2
90
90
  ds = @Album.server(:s1).eager_graph(:artist)
91
91
  ds._fetch = {:id=>1, :artist_id=>2, :name=>'RF', :artist_id_0=>2, :artist_name=>'YJM'}
92
92
  albums = ds.all
93
- @db.sqls.should == ["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
- albums.length.should == 1
93
+ @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
+ albums.length.must_equal 1
95
95
  albums.first.artist.save
96
- @db.sqls.should == ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s2"]
96
+ @db.sqls.must_equal ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s2"]
97
97
  end
98
98
 
99
- specify "should use eagerly graphed dataset shard for eagerly graphed objects even if current dataset does not have a shard" do
99
+ it "should use eagerly graphed dataset shard for eagerly graphed objects even if current dataset does not have a shard" do
100
100
  @Artist.instance_dataset.opts[:server] = @Artist.dataset.opts[:server] = :s2
101
101
  ds = @Album.eager_graph(:artist)
102
102
  ds._fetch = {:id=>1, :artist_id=>2, :name=>'RF', :artist_id_0=>2, :artist_name=>'YJM'}
103
103
  albums = ds.all
104
- @db.sqls.should == ["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
- albums.length.should == 1
104
+ @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
+ albums.length.must_equal 1
106
106
  albums.first.artist.save
107
- @db.sqls.should == ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s2"]
107
+ @db.sqls.must_equal ["UPDATE artists SET name = 'YJM' WHERE (id = 2) -- s2"]
108
108
  end
109
109
 
110
- specify "should have objects retrieved from a specific shard use associated objects from that shard, with modifications to the associated objects using that shard" do
110
+ it "should have objects retrieved from a specific shard use associated objects from that shard, with modifications to the associated objects using that shard" do
111
111
  album = @Album.server(:s1).first
112
- @db.sqls.should == ["SELECT * FROM albums LIMIT 1 -- s1"]
112
+ @db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1"]
113
113
  album.artist.update(:name=>'AS')
114
- @db.sqls.should == ["SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1 -- s1", "UPDATE artists SET name = 'AS' WHERE (id = 2) -- s1"]
114
+ @db.sqls.must_equal ["SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1 -- s1", "UPDATE artists SET name = 'AS' WHERE (id = 2) -- s1"]
115
115
  album.tags.map{|a| a.update(:name=>'SR')}
116
- @db.sqls.should == ["SELECT tags.* FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) WHERE (albums_tags.album_id = 1) -- s1", "UPDATE tags SET name = 'SR' WHERE (id = 3) -- s1"]
116
+ @db.sqls.must_equal ["SELECT tags.* FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) WHERE (albums_tags.album_id = 1) -- s1", "UPDATE tags SET name = 'SR' WHERE (id = 3) -- s1"]
117
117
  @Artist.server(:s2).first.albums.map{|a| a.update(:name=>'MO')}
118
- @db.sqls.should == ["SELECT * FROM artists LIMIT 1 -- s2", "SELECT * FROM albums WHERE (albums.artist_id = 2) -- s2", "UPDATE albums SET name = 'MO' WHERE (id = 1) -- s2"]
118
+ @db.sqls.must_equal ["SELECT * FROM artists LIMIT 1 -- s2", "SELECT * FROM albums WHERE (albums.artist_id = 2) -- s2", "UPDATE albums SET name = 'MO' WHERE (id = 1) -- s2"]
119
119
  end
120
120
 
121
- specify "should have objects retrieved from a specific shard add associated objects to that shard" do
121
+ it "should have objects retrieved from a specific shard add associated objects to that shard" do
122
122
  album = @Album.server(:s1).first
123
123
  artist = @Artist.server(:s2).first
124
- @db.sqls.should == ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM artists LIMIT 1 -- s2"]
124
+ @db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM artists LIMIT 1 -- s2"]
125
125
 
126
126
  artist.add_album(:name=>'MO')
127
127
  sqls = @db.sqls
128
- ["INSERT INTO albums (artist_id, name) VALUES (2, 'MO') -- s2", "INSERT INTO albums (name, artist_id) VALUES ('MO', 2) -- s2"].should include(sqls.shift)
129
- sqls.should == ["SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s2"]
128
+ ["INSERT INTO albums (artist_id, name) VALUES (2, 'MO') -- s2", "INSERT INTO albums (name, artist_id) VALUES ('MO', 2) -- s2"].must_include(sqls.shift)
129
+ sqls.must_equal ["SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s2"]
130
130
 
131
131
  album.add_tag(:name=>'SR')
132
132
  sqls = @db.sqls
133
- ["INSERT INTO albums_tags (album_id, tag_id) VALUES (1, 3) -- s1", "INSERT INTO albums_tags (tag_id, album_id) VALUES (3, 1) -- s1"].should include(sqls.pop)
134
- sqls.should == ["INSERT INTO tags (name) VALUES ('SR') -- s1", "SELECT * FROM tags WHERE (id = 1) LIMIT 1 -- s1", ]
133
+ ["INSERT INTO albums_tags (album_id, tag_id) VALUES (1, 3) -- s1", "INSERT INTO albums_tags (tag_id, album_id) VALUES (3, 1) -- s1"].must_include(sqls.pop)
134
+ sqls.must_equal ["INSERT INTO tags (name) VALUES ('SR') -- s1", "SELECT * FROM tags WHERE (id = 1) LIMIT 1 -- s1", ]
135
135
  end
136
136
 
137
- specify "should have objects retrieved from a specific shard remove associated objects from that shard" do
137
+ it "should have objects retrieved from a specific shard remove associated objects from that shard" do
138
138
  album = @Album.server(:s1).first
139
139
  artist = @Artist.server(:s2).first
140
- @db.sqls.should == ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM artists LIMIT 1 -- s2"]
140
+ @db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM artists LIMIT 1 -- s2"]
141
141
 
142
142
  artist.remove_album(1)
143
143
  sqls = @db.sqls
144
- ["UPDATE albums SET artist_id = NULL, name = 'RF' WHERE (id = 1) -- s2", "UPDATE albums SET name = 'RF', artist_id = NULL WHERE (id = 1) -- s2"].should include(sqls.pop)
145
- sqls.should == ["SELECT * FROM albums WHERE ((albums.artist_id = 2) AND (albums.id = 1)) LIMIT 1 -- s2"]
144
+ ["UPDATE albums SET artist_id = NULL, name = 'RF' WHERE (id = 1) -- s2", "UPDATE albums SET name = 'RF', artist_id = NULL WHERE (id = 1) -- s2"].must_include(sqls.pop)
145
+ sqls.must_equal ["SELECT * FROM albums WHERE ((albums.artist_id = 2) AND (albums.id = 1)) LIMIT 1 -- s2"]
146
146
 
147
147
  album.remove_tag(3)
148
- @db.sqls.should == ["SELECT tags.* FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) WHERE ((albums_tags.album_id = 1) AND (tags.id = 3)) LIMIT 1 -- s1", "DELETE FROM albums_tags WHERE ((album_id = 1) AND (tag_id = 3)) -- s1"]
148
+ @db.sqls.must_equal ["SELECT tags.* FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) WHERE ((albums_tags.album_id = 1) AND (tags.id = 3)) LIMIT 1 -- s1", "DELETE FROM albums_tags WHERE ((album_id = 1) AND (tag_id = 3)) -- s1"]
149
149
  end
150
150
 
151
- specify "should have objects retrieved from a specific shard remove all associated objects from that shard" do
151
+ it "should have objects retrieved from a specific shard remove all associated objects from that shard" do
152
152
  album = @Album.server(:s1).first
153
153
  artist = @Artist.server(:s2).first
154
- @db.sqls.should == ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM artists LIMIT 1 -- s2"]
154
+ @db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM artists LIMIT 1 -- s2"]
155
155
 
156
156
  artist.remove_all_albums
157
- @db.sqls.should == ["UPDATE albums SET artist_id = NULL WHERE (artist_id = 2) -- s2"]
157
+ @db.sqls.must_equal ["UPDATE albums SET artist_id = NULL WHERE (artist_id = 2) -- s2"]
158
158
 
159
159
  album.remove_all_tags
160
- @db.sqls.should == ["DELETE FROM albums_tags WHERE (album_id = 1) -- s1"]
160
+ @db.sqls.must_equal ["DELETE FROM albums_tags WHERE (album_id = 1) -- s1"]
161
161
  end
162
162
 
163
- specify "should not override a server already set on an associated object" do
163
+ it "should not override a server already set on an associated object" do
164
164
  @Album.server(:s1).first
165
165
  artist = @Artist.server(:s2).first
166
- @db.sqls.should == ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM artists LIMIT 1 -- s2"]
166
+ @db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM artists LIMIT 1 -- s2"]
167
167
 
168
168
  artist.add_album(@Album.load(:id=>4, :name=>'MO').set_server(:s3))
169
- ["UPDATE albums SET artist_id = 2, name = 'MO' WHERE (id = 4) -- s3", "UPDATE albums SET name = 'MO', artist_id = 2 WHERE (id = 4) -- s3"].should include(@db.sqls.pop)
169
+ ["UPDATE albums SET artist_id = 2, name = 'MO' WHERE (id = 4) -- s3", "UPDATE albums SET name = 'MO', artist_id = 2 WHERE (id = 4) -- s3"].must_include(@db.sqls.pop)
170
170
 
171
171
  artist.remove_album(@Album.load(:id=>5, :name=>'T', :artist_id=>2).set_server(:s4))
172
172
  # Should select from current object's shard to check existing association, but update associated object's shard
173
173
  sqls = @db.sqls
174
- ["UPDATE albums SET artist_id = NULL, name = 'T' WHERE (id = 5) -- s4", "UPDATE albums SET name = 'T', artist_id = NULL WHERE (id = 5) -- s4"].should include(sqls.pop)
175
- sqls.should == ["SELECT 1 AS one FROM albums WHERE ((albums.artist_id = 2) AND (id = 5)) LIMIT 1 -- s2"]
174
+ ["UPDATE albums SET artist_id = NULL, name = 'T' WHERE (id = 5) -- s4", "UPDATE albums SET name = 'T', artist_id = NULL WHERE (id = 5) -- s4"].must_include(sqls.pop)
175
+ sqls.must_equal ["SELECT 1 AS one FROM albums WHERE ((albums.artist_id = 2) AND (id = 5)) LIMIT 1 -- s2"]
176
176
  end
177
177
 
178
- specify "should be able to set a shard to use for any object using set_server" do
178
+ it "should be able to set a shard to use for any object using set_server" do
179
179
  @Album.server(:s1).first.set_server(:s2).reload
180
- @db.sqls.should == ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s2"]
180
+ @db.sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s1", "SELECT * FROM albums WHERE (id = 1) LIMIT 1 -- s2"]
181
181
  end
182
182
 
183
- specify "should use transactions on the correct shard" do
183
+ it "should use transactions on the correct shard" do
184
184
  @Album.use_transactions = true
185
185
  @Album.server(:s2).first.save
186
186
  sqls = @db.sqls
187
- ["UPDATE albums SET artist_id = 2, name = 'RF' WHERE (id = 1) -- s2", "UPDATE albums SET name = 'RF', artist_id = 2 WHERE (id = 1) -- s2"].should include(sqls.slice!(2))
188
- sqls.should == ["SELECT * FROM albums LIMIT 1 -- s2", "BEGIN -- s2", "COMMIT -- s2"]
187
+ ["UPDATE albums SET artist_id = 2, name = 'RF' WHERE (id = 1) -- s2", "UPDATE albums SET name = 'RF', artist_id = 2 WHERE (id = 1) -- s2"].must_include(sqls.slice!(2))
188
+ sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s2", "BEGIN -- s2", "COMMIT -- s2"]
189
189
  end
190
190
 
191
- specify "should use override current shard when saving with given :server option" do
191
+ it "should use override current shard when saving with given :server option" do
192
192
  @Album.use_transactions = true
193
193
  @Album.server(:s2).first.save(:server=>:s1)
194
194
  sqls = @db.sqls
195
- ["UPDATE albums SET artist_id = 2, name = 'RF' WHERE (id = 1) -- s1", "UPDATE albums SET name = 'RF', artist_id = 2 WHERE (id = 1) -- s1"].should include(sqls.slice!(2))
196
- sqls.should == ["SELECT * FROM albums LIMIT 1 -- s2", "BEGIN -- s1", "COMMIT -- s1"]
195
+ ["UPDATE albums SET artist_id = 2, name = 'RF' WHERE (id = 1) -- s1", "UPDATE albums SET name = 'RF', artist_id = 2 WHERE (id = 1) -- s1"].must_include(sqls.slice!(2))
196
+ sqls.must_equal ["SELECT * FROM albums LIMIT 1 -- s2", "BEGIN -- s1", "COMMIT -- s1"]
197
197
  end
198
198
  end
@@ -21,75 +21,75 @@ describe "Shared caching behavior" do
21
21
  Object.send(:remove_const, :LookupModel)
22
22
  end
23
23
 
24
- shared_examples_for "many_to_one_pk_lookup with composite keys" do
24
+ many_to_one_cpk_specs = shared_description do
25
25
  it "should use a simple primary key lookup when retrieving many_to_one associated records with a composite key" do
26
- @db.sqls.should == []
27
- @c.load(:id=>3, :caching_model_id=>1, :caching_model_id2=>2).caching_model2.should equal(@cm12)
28
- @c.load(:id=>3, :caching_model_id=>2, :caching_model_id2=>1).caching_model2.should equal(@cm21)
29
- @db.sqls.should == []
26
+ @db.sqls.must_equal []
27
+ @c.load(:id=>3, :caching_model_id=>1, :caching_model_id2=>2).caching_model2.must_be_same_as(@cm12)
28
+ @c.load(:id=>3, :caching_model_id=>2, :caching_model_id2=>1).caching_model2.must_be_same_as(@cm21)
29
+ @db.sqls.must_equal []
30
30
  @db.fetch = []
31
- @c.load(:id=>4, :caching_model_id=>2, :caching_model_id2=>2).caching_model2.should == nil
31
+ @c.load(:id=>4, :caching_model_id=>2, :caching_model_id2=>2).caching_model2.must_equal nil
32
32
  end
33
33
  end
34
34
 
35
- shared_examples_for "many_to_one_pk_lookup" do
35
+ many_to_one_pk_specs = shared_description do
36
36
  it "should use a simple primary key lookup when retrieving many_to_one associated records" do
37
37
  @cc.set_primary_key([:id, :id2])
38
- @db.sqls.should == []
39
- @c.load(:id=>3, :caching_model_id=>1).caching_model.should equal(@cm1)
40
- @c.load(:id=>4, :caching_model_id=>2).caching_model.should equal(@cm2)
41
- @db.sqls.should == []
38
+ @db.sqls.must_equal []
39
+ @c.load(:id=>3, :caching_model_id=>1).caching_model.must_be_same_as(@cm1)
40
+ @c.load(:id=>4, :caching_model_id=>2).caching_model.must_be_same_as(@cm2)
41
+ @db.sqls.must_equal []
42
42
  @db.fetch = []
43
- @c.load(:id=>4, :caching_model_id=>3).caching_model.should == nil
43
+ @c.load(:id=>4, :caching_model_id=>3).caching_model.must_equal 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
47
47
  @c.many_to_one :caching_model, :key=>nil, :dataset=>proc{CachingModel.filter(:caching_model_id=>caching_model_id)}
48
48
  @c.load(:id=>3, :caching_model_id=>1).caching_model
49
- @db.sqls.should_not == []
49
+ @db.sqls.wont_equal []
50
50
  end
51
51
 
52
52
  it "should not use a simple primary key lookup if the assocation has a nil :key option" do
53
53
  @c.many_to_one :caching_model, :many_to_one_pk_lookup=>false
54
54
  @c.load(:id=>3, :caching_model_id=>1).caching_model
55
- @db.sqls.should_not == []
55
+ @db.sqls.wont_equal []
56
56
  end
57
57
 
58
58
  it "should not use a simple primary key lookup if the assocation's :primary_key option doesn't match the primary key of the associated class" do
59
59
  @c.many_to_one :caching_model, :primary_key=>:id2
60
60
  @c.load(:id=>3, :caching_model_id=>1).caching_model
61
- @db.sqls.should_not == []
61
+ @db.sqls.wont_equal []
62
62
  end
63
63
 
64
64
  it "should not use a simple primary key lookup if the assocation has :conditions" do
65
65
  @c.many_to_one :caching_model, :conditions=>{:a=>1}
66
66
  @c.load(:id=>3, :caching_model_id=>1).caching_model
67
- @db.sqls.should_not == []
67
+ @db.sqls.wont_equal []
68
68
  end
69
69
 
70
70
  it "should not use a simple primary key lookup if the assocation has :select" do
71
71
  @c.many_to_one :caching_model, :select=>[:a, :b]
72
72
  @c.load(:id=>3, :caching_model_id=>1).caching_model
73
- @db.sqls.should_not == []
73
+ @db.sqls.wont_equal []
74
74
  end
75
75
 
76
76
  it "should not use a simple primary key lookup if the assocation has a block" do
77
77
  @c.many_to_one(:caching_model){|ds| ds.where{a > 1}}
78
78
  @c.load(:id=>3, :caching_model_id=>1).caching_model
79
- @db.sqls.should_not == []
79
+ @db.sqls.wont_equal []
80
80
  end
81
81
 
82
82
  it "should not use a simple primary key lookup if the assocation has a non-default :dataset option" do
83
83
  cc = @cc
84
84
  @c.many_to_one :caching_model, :dataset=>proc{cc.where(:id=>caching_model_id)}
85
85
  @c.load(:id=>3, :caching_model_id=>1).caching_model
86
- @db.sqls.should_not == []
86
+ @db.sqls.wont_equal []
87
87
  end
88
88
 
89
89
  it "should use a simple primary key lookup if explicitly set" do
90
90
  @c.many_to_one :caching_model, :select=>[:a, :b], :many_to_one_pk_lookup=>true
91
91
  @c.load(:id=>3, :caching_model_id=>1).caching_model
92
- @db.sqls.should == []
92
+ @db.sqls.must_equal []
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
@@ -101,8 +101,8 @@ describe "Shared caching behavior" do
101
101
  columns :id, :caching_model_id
102
102
  many_to_one :caching_model, :class=>c2
103
103
  end
104
- c.load(:id=>3, :caching_model_id=>1).caching_model.should == c2.load(:id=>1)
105
- @db.sqls.should_not == []
104
+ c.load(:id=>3, :caching_model_id=>1).caching_model.must_equal c2.load(:id=>1)
105
+ @db.sqls.wont_equal []
106
106
  end
107
107
 
108
108
  it "should use a simple primary key lookup if the prepared_statements_associations method is being used but associated model also uses caching" do
@@ -112,8 +112,8 @@ describe "Shared caching behavior" do
112
112
  columns :id, :caching_model_id
113
113
  many_to_one :caching_model
114
114
  end
115
- c.load(:id=>3, :caching_model_id=>1).caching_model.should equal(@cm1)
116
- @db.sqls.should == []
115
+ c.load(:id=>3, :caching_model_id=>1).caching_model.must_be_same_as(@cm1)
116
+ @db.sqls.must_equal []
117
117
  end
118
118
  end
119
119
 
@@ -137,8 +137,8 @@ describe "Shared caching behavior" do
137
137
  @db.sqls
138
138
  end
139
139
 
140
- it_should_behave_like "many_to_one_pk_lookup"
141
- it_should_behave_like "many_to_one_pk_lookup with composite keys"
140
+ include many_to_one_cpk_specs
141
+ include many_to_one_pk_specs
142
142
  end
143
143
 
144
144
  describe "With static_cache plugin with single key" do
@@ -150,13 +150,13 @@ describe "Shared caching behavior" do
150
150
  @db.sqls
151
151
  end
152
152
 
153
- it_should_behave_like "many_to_one_pk_lookup"
153
+ include many_to_one_pk_specs
154
154
 
155
155
  it "should not issue regular query if primary key lookup returns no rows" do
156
156
  def @cc.primary_key_lookup(pk); end
157
157
  @c.many_to_one :caching_model
158
158
  @c.load(:id=>3, :caching_model_id=>1).caching_model
159
- @db.sqls.should == []
159
+ @db.sqls.must_equal []
160
160
  end
161
161
  end
162
162
 
@@ -170,6 +170,6 @@ describe "Shared caching behavior" do
170
170
  @db.sqls
171
171
  end
172
172
 
173
- it_should_behave_like "many_to_one_pk_lookup with composite keys"
173
+ include many_to_one_cpk_specs
174
174
  end
175
175
  end