sequel 4.22.0 → 4.23.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -25,107 +25,107 @@ describe "constraint_validations extension" do
25
25
 
26
26
  it "should allow creating the sequel_constraint_validations table" do
27
27
  @db.create_constraint_validations_table
28
- @db.sqls.should == ["CREATE TABLE sequel_constraint_validations (table varchar(255) NOT NULL, constraint_name varchar(255), validation_type varchar(255) NOT NULL, column varchar(255) NOT NULL, argument varchar(255), message varchar(255), allow_nil boolean)"]
28
+ @db.sqls.must_equal ["CREATE TABLE sequel_constraint_validations (table varchar(255) NOT NULL, constraint_name varchar(255), validation_type varchar(255) NOT NULL, column varchar(255) NOT NULL, argument varchar(255), message varchar(255), allow_nil boolean)"]
29
29
  end
30
30
 
31
31
  it "should allow creating the sequel_constraint_validations table with a non-default table name" do
32
32
  @db.constraint_validations_table = :foo
33
33
  @db.create_constraint_validations_table
34
- @db.sqls.should == ["CREATE TABLE foo (table varchar(255) NOT NULL, constraint_name varchar(255), validation_type varchar(255) NOT NULL, column varchar(255) NOT NULL, argument varchar(255), message varchar(255), allow_nil boolean)"]
34
+ @db.sqls.must_equal ["CREATE TABLE foo (table varchar(255) NOT NULL, constraint_name varchar(255), validation_type varchar(255) NOT NULL, column varchar(255) NOT NULL, argument varchar(255), message varchar(255), allow_nil boolean)"]
35
35
  end
36
36
 
37
37
  it "should allow dropping the sequel_constraint_validations table" do
38
38
  @db.drop_constraint_validations_table
39
- @db.sqls.should == ["DROP TABLE sequel_constraint_validations"]
39
+ @db.sqls.must_equal ["DROP TABLE sequel_constraint_validations"]
40
40
  end
41
41
 
42
42
  it "should allow dropping the sequel_constraint_validations table with a non-default table name" do
43
43
  @db.constraint_validations_table = :foo
44
44
  @db.drop_constraint_validations_table
45
- @db.sqls.should == ["DROP TABLE foo"]
45
+ @db.sqls.must_equal ["DROP TABLE foo"]
46
46
  end
47
47
 
48
48
  it "should allow dropping validations for a given table" do
49
49
  @db.drop_constraint_validations_for(:table=>:foo)
50
- @db.sqls.should == ["DELETE FROM sequel_constraint_validations WHERE (table = 'foo')"]
50
+ @db.sqls.must_equal ["DELETE FROM sequel_constraint_validations WHERE (table = 'foo')"]
51
51
  end
52
52
 
53
53
  it "should allow dropping validations for a given table and column" do
54
54
  @db.drop_constraint_validations_for(:table=>:foo, :column=>:bar)
55
- @db.sqls.should == ["DELETE FROM sequel_constraint_validations WHERE ((table = 'foo') AND (column = 'bar'))"]
55
+ @db.sqls.must_equal ["DELETE FROM sequel_constraint_validations WHERE ((table = 'foo') AND (column = 'bar'))"]
56
56
  end
57
57
 
58
58
  it "should allow dropping validations for a given table and constraint" do
59
59
  @db.drop_constraint_validations_for(:table=>:foo, :constraint=>:bar)
60
- @db.sqls.should == ["DELETE FROM sequel_constraint_validations WHERE ((table = 'foo') AND (constraint_name = 'bar'))"]
60
+ @db.sqls.must_equal ["DELETE FROM sequel_constraint_validations WHERE ((table = 'foo') AND (constraint_name = 'bar'))"]
61
61
  end
62
62
 
63
63
  it "should allow dropping validations for a non-default constraint_validations table" do
64
64
  @db.constraint_validations_table = :cv
65
65
  @db.drop_constraint_validations_for(:table=>:foo)
66
- @db.sqls.should == ["DELETE FROM cv WHERE (table = 'foo')"]
66
+ @db.sqls.must_equal ["DELETE FROM cv WHERE (table = 'foo')"]
67
67
  end
68
68
 
69
69
  it "should raise an error without deleting if attempting to drop validations without table, column, or constraint" do
70
- proc{@db.drop_constraint_validations_for({})}.should raise_error(Sequel::Error)
71
- @db.sqls.should == []
70
+ proc{@db.drop_constraint_validations_for({})}.must_raise(Sequel::Error)
71
+ @db.sqls.must_equal []
72
72
  end
73
73
 
74
74
  it "should allow adding constraint validations via create_table validate" do
75
75
  @db.create_table(:foo){String :name; validate{presence :name}}
76
76
  sqls = @db.sqls
77
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"presence", :column=>"name", :table=>"foo"}
78
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (trim(name) != '')))"]
77
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"presence", :column=>"name", :table=>"foo")
78
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (trim(name) != '')))"]
79
79
  end
80
80
 
81
81
  it "should allow adding constraint validations via alter_table validate" do
82
82
  @db.schema = [[:name, {:type=>:string}]]
83
83
  @db.alter_table(:foo){validate{presence :name}}
84
84
  sqls = @db.sqls
85
- parse_insert(sqls.slice!(2)).should == {:validation_type=>"presence", :column=>"name", :table=>"foo"}
86
- sqls.should == ["parse schema for foo", "BEGIN", "COMMIT", "ALTER TABLE foo ADD CHECK ((name IS NOT NULL) AND (trim(name) != ''))"]
85
+ parse_insert(sqls.slice!(2)).must_equal(:validation_type=>"presence", :column=>"name", :table=>"foo")
86
+ sqls.must_equal ["parse schema for foo", "BEGIN", "COMMIT", "ALTER TABLE foo ADD CHECK ((name IS NOT NULL) AND (trim(name) != ''))"]
87
87
  end
88
88
 
89
89
  it "should handle :message option when adding validations" do
90
90
  @db.create_table(:foo){String :name; validate{presence :name, :message=>'not there'}}
91
91
  sqls = @db.sqls
92
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"presence", :column=>"name", :table=>"foo", :message=>'not there'}
93
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (trim(name) != '')))"]
92
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"presence", :column=>"name", :table=>"foo", :message=>'not there')
93
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (trim(name) != '')))"]
94
94
  end
95
95
 
96
96
  it "should handle :allow_nil option when adding validations" do
97
97
  @db.create_table(:foo){String :name; validate{presence :name, :allow_nil=>true}}
98
98
  sqls = @db.sqls
99
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"presence", :column=>"name", :table=>"foo", :allow_nil=>'t'}
100
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NULL) OR (trim(name) != '')))"]
99
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"presence", :column=>"name", :table=>"foo", :allow_nil=>'t')
100
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NULL) OR (trim(name) != '')))"]
101
101
  end
102
102
 
103
103
  it "should handle :name option when adding validations" do
104
104
  @db.create_table(:foo){String :name; validate{presence :name, :name=>'cons'}}
105
105
  sqls = @db.sqls
106
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"presence", :column=>"name", :table=>"foo", :constraint_name=>'cons'}
107
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CONSTRAINT cons CHECK ((name IS NOT NULL) AND (trim(name) != '')))"]
106
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"presence", :column=>"name", :table=>"foo", :constraint_name=>'cons')
107
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CONSTRAINT cons CHECK ((name IS NOT NULL) AND (trim(name) != '')))"]
108
108
  end
109
109
 
110
110
  it "should handle multiple columns when adding validations" do
111
111
  @db.create_table(:foo){String :name; String :bar; validate{presence [:name, :bar]}}
112
112
  sqls = @db.sqls
113
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"presence", :column=>"name", :table=>"foo"}
114
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"presence", :column=>"bar", :table=>"foo"}
115
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), bar varchar(255), CHECK ((name IS NOT NULL) AND (bar IS NOT NULL) AND (trim(name) != '') AND (trim(bar) != '')))"]
113
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"presence", :column=>"name", :table=>"foo")
114
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"presence", :column=>"bar", :table=>"foo")
115
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), bar varchar(255), CHECK ((name IS NOT NULL) AND (bar IS NOT NULL) AND (trim(name) != '') AND (trim(bar) != '')))"]
116
116
  end
117
117
 
118
118
  it "should handle presence validation on non-String columns" do
119
119
  @db.create_table(:foo){Integer :name; validate{presence :name}}
120
120
  sqls = @db.sqls
121
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"presence", :column=>"name", :table=>"foo"}
122
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name integer, CHECK (name IS NOT NULL))"]
121
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"presence", :column=>"name", :table=>"foo")
122
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name integer, CHECK (name IS NOT NULL))"]
123
123
 
124
124
  @db.schema = [[:name, {:type=>:integer}]]
125
125
  @db.alter_table(:foo){validate{presence :name}}
126
126
  sqls = @db.sqls
127
- parse_insert(sqls.slice!(2)).should == {:validation_type=>"presence", :column=>"name", :table=>"foo"}
128
- sqls.should == ["parse schema for foo", "BEGIN", "COMMIT", "ALTER TABLE foo ADD CHECK (name IS NOT NULL)"]
127
+ parse_insert(sqls.slice!(2)).must_equal(:validation_type=>"presence", :column=>"name", :table=>"foo")
128
+ sqls.must_equal ["parse schema for foo", "BEGIN", "COMMIT", "ALTER TABLE foo ADD CHECK (name IS NOT NULL)"]
129
129
  end
130
130
 
131
131
  it "should handle presence validation on Oracle with IS NOT NULL instead of != ''" do
@@ -135,61 +135,61 @@ describe "constraint_validations extension" do
135
135
  sqls = @db.sqls
136
136
  s = sqls.slice!(1)
137
137
  m = /\AINSERT INTO sequel_constraint_validations \((.*)\) SELECT (.*) FROM DUAL\z/.match(s)
138
- Hash[*m[1].split(', ').map{|v| v.to_sym}.zip(m[2].split(', ').map{|v| parse_insert_value(v)}).reject{|k, v| v.nil?}.flatten].should == {:validation_type=>"presence", :column=>"name", :table=>"foo"}
139
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (trim(name) IS NOT NULL)))"]
138
+ Hash[*m[1].split(', ').map{|v| v.to_sym}.zip(m[2].split(', ').map{|v| parse_insert_value(v)}).reject{|k, v| v.nil?}.flatten].must_equal(:validation_type=>"presence", :column=>"name", :table=>"foo")
139
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (trim(name) IS NOT NULL)))"]
140
140
  end
141
141
 
142
142
  it "should assume column is not a String if it can't determine the type" do
143
143
  @db.create_table(:foo){Integer :name; validate{presence :bar}}
144
144
  sqls = @db.sqls
145
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"presence", :column=>"bar", :table=>"foo"}
146
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name integer, CHECK (bar IS NOT NULL))"]
145
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"presence", :column=>"bar", :table=>"foo")
146
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name integer, CHECK (bar IS NOT NULL))"]
147
147
 
148
148
  @db.schema = [[:name, {:type=>:integer}]]
149
149
  @db.alter_table(:foo){validate{presence :bar}}
150
150
  sqls = @db.sqls
151
- parse_insert(sqls.slice!(2)).should == {:validation_type=>"presence", :column=>"bar", :table=>"foo"}
152
- sqls.should == ["parse schema for foo", "BEGIN", "COMMIT", "ALTER TABLE foo ADD CHECK (bar IS NOT NULL)"]
151
+ parse_insert(sqls.slice!(2)).must_equal(:validation_type=>"presence", :column=>"bar", :table=>"foo")
152
+ sqls.must_equal ["parse schema for foo", "BEGIN", "COMMIT", "ALTER TABLE foo ADD CHECK (bar IS NOT NULL)"]
153
153
  end
154
154
 
155
155
  it "should handle presence validation on non-String columns with :allow_nil option" do
156
156
  @db.create_table(:foo){Integer :name; validate{presence :name, :allow_nil=>true}}
157
157
  sqls = @db.sqls
158
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"presence", :column=>"name", :table=>"foo", :allow_nil=>'t'}
159
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name integer)"]
158
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"presence", :column=>"name", :table=>"foo", :allow_nil=>'t')
159
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name integer)"]
160
160
  end
161
161
 
162
162
  it "should support :exact_length constraint validation" do
163
163
  @db.create_table(:foo){String :name; validate{exact_length 5, :name}}
164
164
  sqls = @db.sqls
165
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"exact_length", :column=>"name", :table=>"foo", :argument=>'5'}
166
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (char_length(name) = 5)))"]
165
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"exact_length", :column=>"name", :table=>"foo", :argument=>'5')
166
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (char_length(name) = 5)))"]
167
167
  end
168
168
 
169
169
  it "should support :min_length constraint validation" do
170
170
  @db.create_table(:foo){String :name; validate{min_length 5, :name}}
171
171
  sqls = @db.sqls
172
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"min_length", :column=>"name", :table=>"foo", :argument=>'5'}
173
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (char_length(name) >= 5)))"]
172
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"min_length", :column=>"name", :table=>"foo", :argument=>'5')
173
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (char_length(name) >= 5)))"]
174
174
  end
175
175
 
176
176
  it "should support :max_length constraint validation" do
177
177
  @db.create_table(:foo){String :name; validate{max_length 5, :name}}
178
178
  sqls = @db.sqls
179
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"max_length", :column=>"name", :table=>"foo", :argument=>'5'}
180
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (char_length(name) <= 5)))"]
179
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"max_length", :column=>"name", :table=>"foo", :argument=>'5')
180
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (char_length(name) <= 5)))"]
181
181
  end
182
182
 
183
183
  it "should support :length_range constraint validation" do
184
184
  @db.create_table(:foo){String :name; validate{length_range 3..5, :name}}
185
185
  sqls = @db.sqls
186
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"length_range", :column=>"name", :table=>"foo", :argument=>'3..5'}
187
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (char_length(name) >= 3) AND (char_length(name) <= 5)))"]
186
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"length_range", :column=>"name", :table=>"foo", :argument=>'3..5')
187
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (char_length(name) >= 3) AND (char_length(name) <= 5)))"]
188
188
 
189
189
  @db.create_table(:foo){String :name; validate{length_range 3...5, :name}}
190
190
  sqls = @db.sqls
191
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"length_range", :column=>"name", :table=>"foo", :argument=>'3...5'}
192
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (char_length(name) >= 3) AND (char_length(name) < 5)))"]
191
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"length_range", :column=>"name", :table=>"foo", :argument=>'3...5')
192
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (char_length(name) >= 3) AND (char_length(name) < 5)))"]
193
193
  end
194
194
 
195
195
  it "should support :format constraint validation" do
@@ -197,8 +197,8 @@ describe "constraint_validations extension" do
197
197
  @db.extension(:constraint_validations)
198
198
  @db.create_table(:foo){String :name; validate{format(/^foo.*/, :name)}}
199
199
  sqls = @db.sqls
200
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"format", :column=>"name", :table=>"foo", :argument=>'^foo.*'}
201
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name text, CHECK ((name IS NOT NULL) AND (name ~ '^foo.*')))"]
200
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"format", :column=>"name", :table=>"foo", :argument=>'^foo.*')
201
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name text, CHECK ((name IS NOT NULL) AND (name ~ '^foo.*')))"]
202
202
  end
203
203
 
204
204
  it "should support :format constraint validation with case insensitive format" do
@@ -206,120 +206,120 @@ describe "constraint_validations extension" do
206
206
  @db.extension(:constraint_validations)
207
207
  @db.create_table(:foo){String :name; validate{format(/^foo.*/i, :name)}}
208
208
  sqls = @db.sqls
209
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"iformat", :column=>"name", :table=>"foo", :argument=>'^foo.*'}
210
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name text, CHECK ((name IS NOT NULL) AND (name ~* '^foo.*')))"]
209
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"iformat", :column=>"name", :table=>"foo", :argument=>'^foo.*')
210
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name text, CHECK ((name IS NOT NULL) AND (name ~* '^foo.*')))"]
211
211
  end
212
212
 
213
213
  it "should support :includes constraint validation with an array of strings" do
214
214
  @db.create_table(:foo){String :name; validate{includes %w'a b c', :name}}
215
215
  sqls = @db.sqls
216
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"includes_str_array", :column=>"name", :table=>"foo", :argument=>'a,b,c'}
217
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (name IN ('a', 'b', 'c'))))"]
216
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"includes_str_array", :column=>"name", :table=>"foo", :argument=>'a,b,c')
217
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (name IN ('a', 'b', 'c'))))"]
218
218
  end
219
219
 
220
220
  it "should support :includes constraint validation with an array of integers" do
221
221
  @db.create_table(:foo){String :name; validate{includes [1, 2, 3], :name}}
222
222
  sqls = @db.sqls
223
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"includes_int_array", :column=>"name", :table=>"foo", :argument=>'1,2,3'}
224
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (name IN (1, 2, 3))))"]
223
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"includes_int_array", :column=>"name", :table=>"foo", :argument=>'1,2,3')
224
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (name IN (1, 2, 3))))"]
225
225
  end
226
226
 
227
227
  it "should support :includes constraint validation with a inclusive range of integers" do
228
228
  @db.create_table(:foo){String :name; validate{includes 3..5, :name}}
229
229
  sqls = @db.sqls
230
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"includes_int_range", :column=>"name", :table=>"foo", :argument=>'3..5'}
231
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (name >= 3) AND (name <= 5)))"]
230
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"includes_int_range", :column=>"name", :table=>"foo", :argument=>'3..5')
231
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (name >= 3) AND (name <= 5)))"]
232
232
  end
233
233
 
234
234
  it "should support :includes constraint validation with a exclusive range of integers" do
235
235
  @db.create_table(:foo){String :name; validate{includes 3...5, :name}}
236
236
  sqls = @db.sqls
237
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"includes_int_range", :column=>"name", :table=>"foo", :argument=>'3...5'}
238
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (name >= 3) AND (name < 5)))"]
237
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"includes_int_range", :column=>"name", :table=>"foo", :argument=>'3...5')
238
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (name >= 3) AND (name < 5)))"]
239
239
  end
240
240
 
241
241
  it "should support :like constraint validation" do
242
242
  @db.create_table(:foo){String :name; validate{like 'foo%', :name}}
243
243
  sqls = @db.sqls
244
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"like", :column=>"name", :table=>"foo", :argument=>'foo%'}
245
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (name LIKE 'foo%' ESCAPE '\\')))"]
244
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"like", :column=>"name", :table=>"foo", :argument=>'foo%')
245
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (name LIKE 'foo%' ESCAPE '\\')))"]
246
246
  end
247
247
 
248
248
  it "should support :ilike constraint validation" do
249
249
  @db.create_table(:foo){String :name; validate{ilike 'foo%', :name}}
250
250
  sqls = @db.sqls
251
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"ilike", :column=>"name", :table=>"foo", :argument=>'foo%'}
252
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (UPPER(name) LIKE UPPER('foo%') ESCAPE '\\')))"]
251
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"ilike", :column=>"name", :table=>"foo", :argument=>'foo%')
252
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), CHECK ((name IS NOT NULL) AND (UPPER(name) LIKE UPPER('foo%') ESCAPE '\\')))"]
253
253
  end
254
254
 
255
255
  it "should support :unique constraint validation" do
256
256
  @db.create_table(:foo){String :name; validate{unique :name}}
257
257
  sqls = @db.sqls
258
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"unique", :column=>"name", :table=>"foo"}
259
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), UNIQUE (name))"]
258
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"unique", :column=>"name", :table=>"foo")
259
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), UNIQUE (name))"]
260
260
  end
261
261
 
262
262
  it "should support :unique constraint validation with multiple columns" do
263
263
  @db.create_table(:foo){String :name; Integer :id; validate{unique [:name, :id]}}
264
264
  sqls = @db.sqls
265
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"unique", :column=>"name,id", :table=>"foo"}
266
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), id integer, UNIQUE (name, id))"]
265
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"unique", :column=>"name,id", :table=>"foo")
266
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE foo (name varchar(255), id integer, UNIQUE (name, id))"]
267
267
  end
268
268
 
269
269
  it "should support :unique constraint validation in alter_table" do
270
270
  @db.alter_table(:foo){validate{unique :name}}
271
271
  sqls = @db.sqls
272
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"unique", :column=>"name", :table=>"foo"}
273
- sqls.should == ["BEGIN", "COMMIT", "ALTER TABLE foo ADD UNIQUE (name)"]
272
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"unique", :column=>"name", :table=>"foo")
273
+ sqls.must_equal ["BEGIN", "COMMIT", "ALTER TABLE foo ADD UNIQUE (name)"]
274
274
  end
275
275
 
276
276
  it "should drop constraints and validations when dropping a constraint validation" do
277
277
  @db.alter_table(:foo){String :name; validate{drop :bar}}
278
- @db.sqls.should == ["DELETE FROM sequel_constraint_validations WHERE ((table, constraint_name) IN (('foo', 'bar')))", "ALTER TABLE foo DROP CONSTRAINT bar"]
278
+ @db.sqls.must_equal ["DELETE FROM sequel_constraint_validations WHERE ((table, constraint_name) IN (('foo', 'bar')))", "ALTER TABLE foo DROP CONSTRAINT bar"]
279
279
  end
280
280
 
281
281
  it "should drop constraints and validations before adding new ones" do
282
282
  @db.alter_table(:foo){String :name; validate{unique :name; drop :bar}}
283
283
  sqls = @db.sqls
284
- parse_insert(sqls.slice!(2)).should == {:validation_type=>"unique", :column=>"name", :table=>"foo"}
285
- sqls.should == ["DELETE FROM sequel_constraint_validations WHERE ((table, constraint_name) IN (('foo', 'bar')))", "BEGIN", "COMMIT", "ALTER TABLE foo ADD UNIQUE (name)", "ALTER TABLE foo DROP CONSTRAINT bar"]
284
+ parse_insert(sqls.slice!(2)).must_equal(:validation_type=>"unique", :column=>"name", :table=>"foo")
285
+ sqls.must_equal ["DELETE FROM sequel_constraint_validations WHERE ((table, constraint_name) IN (('foo', 'bar')))", "BEGIN", "COMMIT", "ALTER TABLE foo ADD UNIQUE (name)", "ALTER TABLE foo DROP CONSTRAINT bar"]
286
286
  end
287
287
 
288
288
  it "should raise an error if attempting to validate inclusion with a range of non-integers" do
289
- proc{@db.create_table(:foo){String :name; validate{includes 'a'..'z', :name}}}.should raise_error(Sequel::Error)
289
+ proc{@db.create_table(:foo){String :name; validate{includes 'a'..'z', :name}}}.must_raise(Sequel::Error)
290
290
  end
291
291
 
292
292
  it "should raise an error if attempting to validate inclusion with a range of non-integers or strings" do
293
- proc{@db.create_table(:foo){String :name; validate{includes [1.0, 2.0], :name}}}.should raise_error(Sequel::Error)
293
+ proc{@db.create_table(:foo){String :name; validate{includes [1.0, 2.0], :name}}}.must_raise(Sequel::Error)
294
294
  end
295
295
 
296
296
  it "should raise an error if attempting to validate inclusion with a unsupported object" do
297
- proc{@db.create_table(:foo){String :name; validate{includes 'a', :name}}}.should raise_error(Sequel::Error)
297
+ proc{@db.create_table(:foo){String :name; validate{includes 'a', :name}}}.must_raise(Sequel::Error)
298
298
  end
299
299
 
300
300
  it "should raise an error if attempting to drop a constraint validation in a create_table generator" do
301
- proc{@db.create_table(:foo){String :name; validate{drop :foo}}}.should raise_error(Sequel::Error)
301
+ proc{@db.create_table(:foo){String :name; validate{drop :foo}}}.must_raise(Sequel::Error)
302
302
  end
303
303
 
304
304
  it "should raise an error if attempting to drop a constraint validation without a name" do
305
- proc{@db.alter_table(:foo){String :name; validate{drop nil}}}.should raise_error(Sequel::Error)
305
+ proc{@db.alter_table(:foo){String :name; validate{drop nil}}}.must_raise(Sequel::Error)
306
306
  end
307
307
 
308
308
  it "should raise an error if attempting attempting to process a constraint validation with an unsupported type" do
309
- proc{@db.alter_table(:foo){String :name; validations << {:type=>:foo}}}.should raise_error(Sequel::Error)
309
+ proc{@db.alter_table(:foo){String :name; validations << {:type=>:foo}}}.must_raise(Sequel::Error)
310
310
  end
311
311
 
312
312
  it "should allow adding constraint validations for tables specified as a SQL::Identifier" do
313
313
  @db.create_table(Sequel.identifier(:sch__foo)){String :name; validate{presence :name}}
314
314
  sqls = @db.sqls
315
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"presence", :column=>"name", :table=>"sch__foo"}
316
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE sch__foo (name varchar(255), CHECK ((name IS NOT NULL) AND (trim(name) != '')))"]
315
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"presence", :column=>"name", :table=>"sch__foo")
316
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE sch__foo (name varchar(255), CHECK ((name IS NOT NULL) AND (trim(name) != '')))"]
317
317
  end
318
318
 
319
319
  it "should allow adding constraint validations for tables specified as a SQL::QualifiedIdentifier" do
320
320
  @db.create_table(Sequel.qualify(:sch, :foo)){String :name; validate{presence :name}}
321
321
  sqls = @db.sqls
322
- parse_insert(sqls.slice!(1)).should == {:validation_type=>"presence", :column=>"name", :table=>"sch.foo"}
323
- sqls.should == ["BEGIN", "COMMIT", "CREATE TABLE sch.foo (name varchar(255), CHECK ((name IS NOT NULL) AND (trim(name) != '')))"]
322
+ parse_insert(sqls.slice!(1)).must_equal(:validation_type=>"presence", :column=>"name", :table=>"sch.foo")
323
+ sqls.must_equal ["BEGIN", "COMMIT", "CREATE TABLE sch.foo (name varchar(255), CHECK ((name IS NOT NULL) AND (trim(name) != '')))"]
324
324
  end
325
325
  end
@@ -18,118 +18,118 @@ describe "Core refinements" do
18
18
  end
19
19
 
20
20
  it "should support NOT via Symbol#~" do
21
- @d.l(~:x).should == 'NOT x'
22
- @d.l(~:x__y).should == 'NOT x.y'
21
+ @d.l(~:x).must_equal 'NOT x'
22
+ @d.l(~:x__y).must_equal 'NOT x.y'
23
23
  end
24
24
 
25
25
  it "should support + - * / via Symbol#+,-,*,/" do
26
- @d.l(:x + 1 > 100).should == '((x + 1) > 100)'
27
- @d.l((:x * :y) < 100.01).should == '((x * y) < 100.01)'
28
- @d.l((:x - :y/2) >= 100000000000000000000000000000000000).should == '((x - (y / 2)) >= 100000000000000000000000000000000000)'
29
- @d.l((((:x - :y)/(:x + :y))*:z) <= 100).should == '((((x - y) / (x + y)) * z) <= 100)'
30
- @d.l(~((((:x - :y)/(:x + :y))*:z) <= 100)).should == '((((x - y) / (x + y)) * z) > 100)'
26
+ @d.l(:x + 1 > 100).must_equal '((x + 1) > 100)'
27
+ @d.l((:x * :y) < 100.01).must_equal '((x * y) < 100.01)'
28
+ @d.l((:x - :y/2) >= 100000000000000000000000000000000000).must_equal '((x - (y / 2)) >= 100000000000000000000000000000000000)'
29
+ @d.l((((:x - :y)/(:x + :y))*:z) <= 100).must_equal '((((x - y) / (x + y)) * z) <= 100)'
30
+ @d.l(~((((:x - :y)/(:x + :y))*:z) <= 100)).must_equal '((((x - y) / (x + y)) * z) > 100)'
31
31
  end
32
32
 
33
33
  it "should support LIKE via Symbol#like" do
34
- @d.l(:x.like('a')).should == '(x LIKE \'a\' ESCAPE \'\\\')'
35
- @d.l(:x.like(/a/)).should == '(x ~ \'a\')'
36
- @d.l(:x.like('a', 'b')).should == '((x LIKE \'a\' ESCAPE \'\\\') OR (x LIKE \'b\' ESCAPE \'\\\'))'
37
- @d.l(:x.like(/a/, /b/i)).should == '((x ~ \'a\') OR (x ~* \'b\'))'
38
- @d.l(:x.like('a', /b/)).should == '((x LIKE \'a\' ESCAPE \'\\\') OR (x ~ \'b\'))'
34
+ @d.l(:x.like('a')).must_equal '(x LIKE \'a\' ESCAPE \'\\\')'
35
+ @d.l(:x.like(/a/)).must_equal '(x ~ \'a\')'
36
+ @d.l(:x.like('a', 'b')).must_equal '((x LIKE \'a\' ESCAPE \'\\\') OR (x LIKE \'b\' ESCAPE \'\\\'))'
37
+ @d.l(:x.like(/a/, /b/i)).must_equal '((x ~ \'a\') OR (x ~* \'b\'))'
38
+ @d.l(:x.like('a', /b/)).must_equal '((x LIKE \'a\' ESCAPE \'\\\') OR (x ~ \'b\'))'
39
39
  end
40
40
 
41
41
  it "should support NOT LIKE via Symbol#like and Symbol#~" do
42
- @d.l(~:x.like('a')).should == '(x NOT LIKE \'a\' ESCAPE \'\\\')'
43
- @d.l(~:x.like(/a/)).should == '(x !~ \'a\')'
44
- @d.l(~:x.like('a', 'b')).should == '((x NOT LIKE \'a\' ESCAPE \'\\\') AND (x NOT LIKE \'b\' ESCAPE \'\\\'))'
45
- @d.l(~:x.like(/a/, /b/i)).should == '((x !~ \'a\') AND (x !~* \'b\'))'
46
- @d.l(~:x.like('a', /b/)).should == '((x NOT LIKE \'a\' ESCAPE \'\\\') AND (x !~ \'b\'))'
42
+ @d.l(~:x.like('a')).must_equal '(x NOT LIKE \'a\' ESCAPE \'\\\')'
43
+ @d.l(~:x.like(/a/)).must_equal '(x !~ \'a\')'
44
+ @d.l(~:x.like('a', 'b')).must_equal '((x NOT LIKE \'a\' ESCAPE \'\\\') AND (x NOT LIKE \'b\' ESCAPE \'\\\'))'
45
+ @d.l(~:x.like(/a/, /b/i)).must_equal '((x !~ \'a\') AND (x !~* \'b\'))'
46
+ @d.l(~:x.like('a', /b/)).must_equal '((x NOT LIKE \'a\' ESCAPE \'\\\') AND (x !~ \'b\'))'
47
47
  end
48
48
 
49
49
  it "should support ILIKE via Symbol#ilike" do
50
- @d.l(:x.ilike('a')).should == '(UPPER(x) LIKE UPPER(\'a\') ESCAPE \'\\\')'
51
- @d.l(:x.ilike(/a/)).should == '(x ~* \'a\')'
52
- @d.l(:x.ilike('a', 'b')).should == '((UPPER(x) LIKE UPPER(\'a\') ESCAPE \'\\\') OR (UPPER(x) LIKE UPPER(\'b\') ESCAPE \'\\\'))'
53
- @d.l(:x.ilike(/a/, /b/i)).should == '((x ~* \'a\') OR (x ~* \'b\'))'
54
- @d.l(:x.ilike('a', /b/)).should == '((UPPER(x) LIKE UPPER(\'a\') ESCAPE \'\\\') OR (x ~* \'b\'))'
50
+ @d.l(:x.ilike('a')).must_equal '(UPPER(x) LIKE UPPER(\'a\') ESCAPE \'\\\')'
51
+ @d.l(:x.ilike(/a/)).must_equal '(x ~* \'a\')'
52
+ @d.l(:x.ilike('a', 'b')).must_equal '((UPPER(x) LIKE UPPER(\'a\') ESCAPE \'\\\') OR (UPPER(x) LIKE UPPER(\'b\') ESCAPE \'\\\'))'
53
+ @d.l(:x.ilike(/a/, /b/i)).must_equal '((x ~* \'a\') OR (x ~* \'b\'))'
54
+ @d.l(:x.ilike('a', /b/)).must_equal '((UPPER(x) LIKE UPPER(\'a\') ESCAPE \'\\\') OR (x ~* \'b\'))'
55
55
  end
56
56
 
57
57
  it "should support NOT ILIKE via Symbol#ilike and Symbol#~" do
58
- @d.l(~:x.ilike('a')).should == '(UPPER(x) NOT LIKE UPPER(\'a\') ESCAPE \'\\\')'
59
- @d.l(~:x.ilike(/a/)).should == '(x !~* \'a\')'
60
- @d.l(~:x.ilike('a', 'b')).should == '((UPPER(x) NOT LIKE UPPER(\'a\') ESCAPE \'\\\') AND (UPPER(x) NOT LIKE UPPER(\'b\') ESCAPE \'\\\'))'
61
- @d.l(~:x.ilike(/a/, /b/i)).should == '((x !~* \'a\') AND (x !~* \'b\'))'
62
- @d.l(~:x.ilike('a', /b/)).should == '((UPPER(x) NOT LIKE UPPER(\'a\') ESCAPE \'\\\') AND (x !~* \'b\'))'
58
+ @d.l(~:x.ilike('a')).must_equal '(UPPER(x) NOT LIKE UPPER(\'a\') ESCAPE \'\\\')'
59
+ @d.l(~:x.ilike(/a/)).must_equal '(x !~* \'a\')'
60
+ @d.l(~:x.ilike('a', 'b')).must_equal '((UPPER(x) NOT LIKE UPPER(\'a\') ESCAPE \'\\\') AND (UPPER(x) NOT LIKE UPPER(\'b\') ESCAPE \'\\\'))'
61
+ @d.l(~:x.ilike(/a/, /b/i)).must_equal '((x !~* \'a\') AND (x !~* \'b\'))'
62
+ @d.l(~:x.ilike('a', /b/)).must_equal '((UPPER(x) NOT LIKE UPPER(\'a\') ESCAPE \'\\\') AND (x !~* \'b\'))'
63
63
  end
64
64
 
65
65
  it "should support sql_expr on arrays with all two pairs" do
66
- @d.l([[:x, 100],[:y, 'a']].sql_expr).should == '((x = 100) AND (y = \'a\'))'
67
- @d.l([[:x, true], [:y, false]].sql_expr).should == '((x IS TRUE) AND (y IS FALSE))'
68
- @d.l([[:x, nil], [:y, [1,2,3]]].sql_expr).should == '((x IS NULL) AND (y IN (1, 2, 3)))'
66
+ @d.l([[:x, 100],[:y, 'a']].sql_expr).must_equal '((x = 100) AND (y = \'a\'))'
67
+ @d.l([[:x, true], [:y, false]].sql_expr).must_equal '((x IS TRUE) AND (y IS FALSE))'
68
+ @d.l([[:x, nil], [:y, [1,2,3]]].sql_expr).must_equal '((x IS NULL) AND (y IN (1, 2, 3)))'
69
69
  end
70
70
 
71
71
  it "should support sql_negate on arrays with all two pairs" do
72
- @d.l([[:x, 100],[:y, 'a']].sql_negate).should == '((x != 100) AND (y != \'a\'))'
73
- @d.l([[:x, true], [:y, false]].sql_negate).should == '((x IS NOT TRUE) AND (y IS NOT FALSE))'
74
- @d.l([[:x, nil], [:y, [1,2,3]]].sql_negate).should == '((x IS NOT NULL) AND (y NOT IN (1, 2, 3)))'
72
+ @d.l([[:x, 100],[:y, 'a']].sql_negate).must_equal '((x != 100) AND (y != \'a\'))'
73
+ @d.l([[:x, true], [:y, false]].sql_negate).must_equal '((x IS NOT TRUE) AND (y IS NOT FALSE))'
74
+ @d.l([[:x, nil], [:y, [1,2,3]]].sql_negate).must_equal '((x IS NOT NULL) AND (y NOT IN (1, 2, 3)))'
75
75
  end
76
76
 
77
77
  it "should support ~ on arrays with all two pairs" do
78
- @d.l(~[[:x, 100],[:y, 'a']]).should == '((x != 100) OR (y != \'a\'))'
79
- @d.l(~[[:x, true], [:y, false]]).should == '((x IS NOT TRUE) OR (y IS NOT FALSE))'
80
- @d.l(~[[:x, nil], [:y, [1,2,3]]]).should == '((x IS NOT NULL) OR (y NOT IN (1, 2, 3)))'
78
+ @d.l(~[[:x, 100],[:y, 'a']]).must_equal '((x != 100) OR (y != \'a\'))'
79
+ @d.l(~[[:x, true], [:y, false]]).must_equal '((x IS NOT TRUE) OR (y IS NOT FALSE))'
80
+ @d.l(~[[:x, nil], [:y, [1,2,3]]]).must_equal '((x IS NOT NULL) OR (y NOT IN (1, 2, 3)))'
81
81
  end
82
82
 
83
83
  it "should support sql_or on arrays with all two pairs" do
84
- @d.l([[:x, 100],[:y, 'a']].sql_or).should == '((x = 100) OR (y = \'a\'))'
85
- @d.l([[:x, true], [:y, false]].sql_or).should == '((x IS TRUE) OR (y IS FALSE))'
86
- @d.l([[:x, nil], [:y, [1,2,3]]].sql_or).should == '((x IS NULL) OR (y IN (1, 2, 3)))'
84
+ @d.l([[:x, 100],[:y, 'a']].sql_or).must_equal '((x = 100) OR (y = \'a\'))'
85
+ @d.l([[:x, true], [:y, false]].sql_or).must_equal '((x IS TRUE) OR (y IS FALSE))'
86
+ @d.l([[:x, nil], [:y, [1,2,3]]].sql_or).must_equal '((x IS NULL) OR (y IN (1, 2, 3)))'
87
87
  end
88
88
 
89
89
  it "should support Array#sql_string_join for concatenation of SQL strings" do
90
- @d.lit([:x].sql_string_join).should == '(x)'
91
- @d.lit([:x].sql_string_join(', ')).should == '(x)'
92
- @d.lit([:x, :y].sql_string_join).should == '(x || y)'
93
- @d.lit([:x, :y].sql_string_join(', ')).should == "(x || ', ' || y)"
94
- @d.lit([:x.sql_function(1), :y.sql_subscript(1)].sql_string_join).should == '(x(1) || y[1])'
95
- @d.lit([:x.sql_function(1), 'y.z'.lit].sql_string_join(', ')).should == "(x(1) || ', ' || y.z)"
96
- @d.lit([:x, 1, :y].sql_string_join).should == "(x || '1' || y)"
97
- @d.lit([:x, 1, :y].sql_string_join(', ')).should == "(x || ', ' || '1' || ', ' || y)"
98
- @d.lit([:x, 1, :y].sql_string_join(:y__z)).should == "(x || y.z || '1' || y.z || y)"
99
- @d.lit([:x, 1, :y].sql_string_join(1)).should == "(x || '1' || '1' || '1' || y)"
100
- @d.lit([:x, :y].sql_string_join('y.x || x.y'.lit)).should == "(x || y.x || x.y || y)"
101
- @d.lit([[:x, :y].sql_string_join, [:a, :b].sql_string_join].sql_string_join).should == "(x || y || a || b)"
90
+ @d.lit([:x].sql_string_join).must_equal '(x)'
91
+ @d.lit([:x].sql_string_join(', ')).must_equal '(x)'
92
+ @d.lit([:x, :y].sql_string_join).must_equal '(x || y)'
93
+ @d.lit([:x, :y].sql_string_join(', ')).must_equal "(x || ', ' || y)"
94
+ @d.lit([:x.sql_function(1), :y.sql_subscript(1)].sql_string_join).must_equal '(x(1) || y[1])'
95
+ @d.lit([:x.sql_function(1), 'y.z'.lit].sql_string_join(', ')).must_equal "(x(1) || ', ' || y.z)"
96
+ @d.lit([:x, 1, :y].sql_string_join).must_equal "(x || '1' || y)"
97
+ @d.lit([:x, 1, :y].sql_string_join(', ')).must_equal "(x || ', ' || '1' || ', ' || y)"
98
+ @d.lit([:x, 1, :y].sql_string_join(:y__z)).must_equal "(x || y.z || '1' || y.z || y)"
99
+ @d.lit([:x, 1, :y].sql_string_join(1)).must_equal "(x || '1' || '1' || '1' || y)"
100
+ @d.lit([:x, :y].sql_string_join('y.x || x.y'.lit)).must_equal "(x || y.x || x.y || y)"
101
+ @d.lit([[:x, :y].sql_string_join, [:a, :b].sql_string_join].sql_string_join).must_equal "(x || y || a || b)"
102
102
  end
103
103
 
104
104
  it "should support sql_expr on hashes" do
105
- @d.l({:x => 100, :y => 'a'}.sql_expr)[1...-1].split(' AND ').sort.should == ['(x = 100)', '(y = \'a\')']
106
- @d.l({:x => true, :y => false}.sql_expr)[1...-1].split(' AND ').sort.should == ['(x IS TRUE)', '(y IS FALSE)']
107
- @d.l({:x => nil, :y => [1,2,3]}.sql_expr)[1...-1].split(' AND ').sort.should == ['(x IS NULL)', '(y IN (1, 2, 3))']
105
+ @d.l({:x => 100, :y => 'a'}.sql_expr)[1...-1].split(' AND ').sort.must_equal ['(x = 100)', '(y = \'a\')']
106
+ @d.l({:x => true, :y => false}.sql_expr)[1...-1].split(' AND ').sort.must_equal ['(x IS TRUE)', '(y IS FALSE)']
107
+ @d.l({:x => nil, :y => [1,2,3]}.sql_expr)[1...-1].split(' AND ').sort.must_equal ['(x IS NULL)', '(y IN (1, 2, 3))']
108
108
  end
109
109
 
110
110
  it "should support sql_negate on hashes" do
111
- @d.l({:x => 100, :y => 'a'}.sql_negate)[1...-1].split(' AND ').sort.should == ['(x != 100)', '(y != \'a\')']
112
- @d.l({:x => true, :y => false}.sql_negate)[1...-1].split(' AND ').sort.should == ['(x IS NOT TRUE)', '(y IS NOT FALSE)']
113
- @d.l({:x => nil, :y => [1,2,3]}.sql_negate)[1...-1].split(' AND ').sort.should == ['(x IS NOT NULL)', '(y NOT IN (1, 2, 3))']
111
+ @d.l({:x => 100, :y => 'a'}.sql_negate)[1...-1].split(' AND ').sort.must_equal ['(x != 100)', '(y != \'a\')']
112
+ @d.l({:x => true, :y => false}.sql_negate)[1...-1].split(' AND ').sort.must_equal ['(x IS NOT TRUE)', '(y IS NOT FALSE)']
113
+ @d.l({:x => nil, :y => [1,2,3]}.sql_negate)[1...-1].split(' AND ').sort.must_equal ['(x IS NOT NULL)', '(y NOT IN (1, 2, 3))']
114
114
  end
115
115
 
116
116
  it "should support ~ on hashes" do
117
- @d.l(~{:x => 100, :y => 'a'})[1...-1].split(' OR ').sort.should == ['(x != 100)', '(y != \'a\')']
118
- @d.l(~{:x => true, :y => false})[1...-1].split(' OR ').sort.should == ['(x IS NOT TRUE)', '(y IS NOT FALSE)']
119
- @d.l(~{:x => nil, :y => [1,2,3]})[1...-1].split(' OR ').sort.should == ['(x IS NOT NULL)', '(y NOT IN (1, 2, 3))']
117
+ @d.l(~{:x => 100, :y => 'a'})[1...-1].split(' OR ').sort.must_equal ['(x != 100)', '(y != \'a\')']
118
+ @d.l(~{:x => true, :y => false})[1...-1].split(' OR ').sort.must_equal ['(x IS NOT TRUE)', '(y IS NOT FALSE)']
119
+ @d.l(~{:x => nil, :y => [1,2,3]})[1...-1].split(' OR ').sort.must_equal ['(x IS NOT NULL)', '(y NOT IN (1, 2, 3))']
120
120
  end
121
121
 
122
122
  it "should support sql_or on hashes" do
123
- @d.l({:x => 100, :y => 'a'}.sql_or)[1...-1].split(' OR ').sort.should == ['(x = 100)', '(y = \'a\')']
124
- @d.l({:x => true, :y => false}.sql_or)[1...-1].split(' OR ').sort.should == ['(x IS TRUE)', '(y IS FALSE)']
125
- @d.l({:x => nil, :y => [1,2,3]}.sql_or)[1...-1].split(' OR ').sort.should == ['(x IS NULL)', '(y IN (1, 2, 3))']
123
+ @d.l({:x => 100, :y => 'a'}.sql_or)[1...-1].split(' OR ').sort.must_equal ['(x = 100)', '(y = \'a\')']
124
+ @d.l({:x => true, :y => false}.sql_or)[1...-1].split(' OR ').sort.must_equal ['(x IS TRUE)', '(y IS FALSE)']
125
+ @d.l({:x => nil, :y => [1,2,3]}.sql_or)[1...-1].split(' OR ').sort.must_equal ['(x IS NULL)', '(y IN (1, 2, 3))']
126
126
  end
127
127
 
128
128
  it "should Hash#& and Hash#|" do
129
- @d.l({:y => :z} & :x).should == '((y = z) AND x)'
130
- @d.l({:x => :a} & {:y => :z}).should == '((x = a) AND (y = z))'
131
- @d.l({:y => :z} | :x).should == '((y = z) OR x)'
132
- @d.l({:x => :a} | {:y => :z}).should == '((x = a) OR (y = z))'
129
+ @d.l({:y => :z} & :x).must_equal '((y = z) AND x)'
130
+ @d.l({:x => :a} & {:y => :z}).must_equal '((x = a) AND (y = z))'
131
+ @d.l({:y => :z} | :x).must_equal '((y = z) OR x)'
132
+ @d.l({:x => :a} | {:y => :z}).must_equal '((x = a) OR (y = z))'
133
133
  end
134
134
  end
135
135
 
@@ -138,30 +138,30 @@ describe "Array#case and Hash#case" do
138
138
  @d = Sequel.mock.dataset
139
139
  end
140
140
 
141
- specify "should return SQL CASE expression" do
142
- @d.literal({:x=>:y}.case(:z)).should == '(CASE WHEN x THEN y ELSE z END)'
143
- @d.literal({:x=>:y}.case(:z, :exp)).should == '(CASE exp WHEN x THEN y ELSE z END)'
141
+ it "should return SQL CASE expression" do
142
+ @d.literal({:x=>:y}.case(:z)).must_equal '(CASE WHEN x THEN y ELSE z END)'
143
+ @d.literal({:x=>:y}.case(:z, :exp)).must_equal '(CASE exp WHEN x THEN y ELSE z END)'
144
144
  ['(CASE WHEN x THEN y WHEN a THEN b ELSE z END)',
145
- '(CASE WHEN a THEN b WHEN x THEN y ELSE z END)'].should(include(@d.literal({:x=>:y, :a=>:b}.case(:z))))
146
- @d.literal([[:x, :y]].case(:z)).should == '(CASE WHEN x THEN y ELSE z END)'
147
- @d.literal([[:x, :y], [:a, :b]].case(:z)).should == '(CASE WHEN x THEN y WHEN a THEN b ELSE z END)'
148
- @d.literal([[:x, :y], [:a, :b]].case(:z, :exp)).should == '(CASE exp WHEN x THEN y WHEN a THEN b ELSE z END)'
149
- @d.literal([[:x, :y], [:a, :b]].case(:z, :exp__w)).should == '(CASE exp.w WHEN x THEN y WHEN a THEN b ELSE z END)'
145
+ '(CASE WHEN a THEN b WHEN x THEN y ELSE z END)'].must_include(@d.literal({:x=>:y, :a=>:b}.case(:z)))
146
+ @d.literal([[:x, :y]].case(:z)).must_equal '(CASE WHEN x THEN y ELSE z END)'
147
+ @d.literal([[:x, :y], [:a, :b]].case(:z)).must_equal '(CASE WHEN x THEN y WHEN a THEN b ELSE z END)'
148
+ @d.literal([[:x, :y], [:a, :b]].case(:z, :exp)).must_equal '(CASE exp WHEN x THEN y WHEN a THEN b ELSE z END)'
149
+ @d.literal([[:x, :y], [:a, :b]].case(:z, :exp__w)).must_equal '(CASE exp.w WHEN x THEN y WHEN a THEN b ELSE z END)'
150
150
  end
151
151
 
152
- specify "should return SQL CASE expression with expression even if nil" do
153
- @d.literal({:x=>:y}.case(:z, nil)).should == '(CASE NULL WHEN x THEN y ELSE z END)'
152
+ it "should return SQL CASE expression with expression even if nil" do
153
+ @d.literal({:x=>:y}.case(:z, nil)).must_equal '(CASE NULL WHEN x THEN y ELSE z END)'
154
154
  end
155
155
 
156
- specify "should raise an error if an array that isn't all two pairs is used" do
157
- proc{[:b].case(:a)}.should raise_error(Sequel::Error)
158
- proc{[:b, :c].case(:a)}.should raise_error(Sequel::Error)
159
- proc{[[:b, :c], :d].case(:a)}.should raise_error(Sequel::Error)
156
+ it "should raise an error if an array that isn't all two pairs is used" do
157
+ proc{[:b].case(:a)}.must_raise(Sequel::Error)
158
+ proc{[:b, :c].case(:a)}.must_raise(Sequel::Error)
159
+ proc{[[:b, :c], :d].case(:a)}.must_raise(Sequel::Error)
160
160
  end
161
161
 
162
- specify "should raise an error if an empty array/hash is used" do
163
- proc{[].case(:a)}.should raise_error(Sequel::Error)
164
- proc{{}.case(:a)}.should raise_error(Sequel::Error)
162
+ it "should raise an error if an empty array/hash is used" do
163
+ proc{[].case(:a)}.must_raise(Sequel::Error)
164
+ proc{{}.case(:a)}.must_raise(Sequel::Error)
165
165
  end
166
166
  end
167
167
 
@@ -170,14 +170,14 @@ describe "Array#sql_value_list and #sql_array" do
170
170
  @d = Sequel.mock.dataset
171
171
  end
172
172
 
173
- specify "should treat the array as an SQL value list instead of conditions when used as a placeholder value" do
174
- @d.filter("(a, b) IN ?", [[:x, 1], [:y, 2]]).sql.should == 'SELECT * WHERE ((a, b) IN ((x = 1) AND (y = 2)))'
175
- @d.filter("(a, b) IN ?", [[:x, 1], [:y, 2]].sql_value_list).sql.should == 'SELECT * WHERE ((a, b) IN ((x, 1), (y, 2)))'
173
+ it "should treat the array as an SQL value list instead of conditions when used as a placeholder value" do
174
+ @d.filter("(a, b) IN ?", [[:x, 1], [:y, 2]]).sql.must_equal 'SELECT * WHERE ((a, b) IN ((x = 1) AND (y = 2)))'
175
+ @d.filter("(a, b) IN ?", [[:x, 1], [:y, 2]].sql_value_list).sql.must_equal 'SELECT * WHERE ((a, b) IN ((x, 1), (y, 2)))'
176
176
  end
177
177
 
178
- specify "should be no difference when used as a hash value" do
179
- @d.filter([:a, :b]=>[[:x, 1], [:y, 2]]).sql.should == 'SELECT * WHERE ((a, b) IN ((x, 1), (y, 2)))'
180
- @d.filter([:a, :b]=>[[:x, 1], [:y, 2]].sql_value_list).sql.should == 'SELECT * WHERE ((a, b) IN ((x, 1), (y, 2)))'
178
+ it "should be no difference when used as a hash value" do
179
+ @d.filter([:a, :b]=>[[:x, 1], [:y, 2]]).sql.must_equal 'SELECT * WHERE ((a, b) IN ((x, 1), (y, 2)))'
180
+ @d.filter([:a, :b]=>[[:x, 1], [:y, 2]].sql_value_list).sql.must_equal 'SELECT * WHERE ((a, b) IN ((x, 1), (y, 2)))'
181
181
  end
182
182
  end
183
183
 
@@ -186,47 +186,47 @@ describe "String#lit" do
186
186
  @ds = Sequel::Database.new[:t]
187
187
  end
188
188
 
189
- specify "should return an LiteralString object" do
190
- 'xyz'.lit.should be_a_kind_of(Sequel::LiteralString)
191
- 'xyz'.lit.to_s.should == 'xyz'
189
+ it "should return an LiteralString object" do
190
+ 'xyz'.lit.must_be_kind_of(Sequel::LiteralString)
191
+ 'xyz'.lit.to_s.must_equal 'xyz'
192
192
  end
193
193
 
194
- specify "should inhibit string literalization" do
195
- @ds.update_sql(:stamp => "NOW()".lit).should == "UPDATE t SET stamp = NOW()"
194
+ it "should inhibit string literalization" do
195
+ @ds.update_sql(:stamp => "NOW()".lit).must_equal "UPDATE t SET stamp = NOW()"
196
196
  end
197
197
 
198
- specify "should return a PlaceholderLiteralString object if args are given" do
198
+ it "should return a PlaceholderLiteralString object if args are given" do
199
199
  a = 'DISTINCT ?'.lit(:a)
200
- a.should be_a_kind_of(Sequel::SQL::PlaceholderLiteralString)
201
- @ds.literal(a).should == 'DISTINCT a'
200
+ a.must_be_kind_of(Sequel::SQL::PlaceholderLiteralString)
201
+ @ds.literal(a).must_equal 'DISTINCT a'
202
202
  @ds.quote_identifiers = true
203
- @ds.literal(a).should == 'DISTINCT "a"'
203
+ @ds.literal(a).must_equal 'DISTINCT "a"'
204
204
  end
205
205
 
206
- specify "should handle named placeholders if given a single argument hash" do
206
+ it "should handle named placeholders if given a single argument hash" do
207
207
  a = 'DISTINCT :b'.lit(:b=>:a)
208
- a.should be_a_kind_of(Sequel::SQL::PlaceholderLiteralString)
209
- @ds.literal(a).should == 'DISTINCT a'
208
+ a.must_be_kind_of(Sequel::SQL::PlaceholderLiteralString)
209
+ @ds.literal(a).must_equal 'DISTINCT a'
210
210
  @ds.quote_identifiers = true
211
- @ds.literal(a).should == 'DISTINCT "a"'
211
+ @ds.literal(a).must_equal 'DISTINCT "a"'
212
212
  end
213
213
 
214
- specify "should treat placeholder literal strings as generic expressions" do
214
+ it "should treat placeholder literal strings as generic expressions" do
215
215
  a = ':b'.lit(:b=>:a)
216
- @ds.literal(a + 1).should == "(a + 1)"
217
- @ds.literal(a & :b).should == "(a AND b)"
218
- @ds.literal(a.sql_string + :b).should == "(a || b)"
216
+ @ds.literal(a + 1).must_equal "(a + 1)"
217
+ @ds.literal(a & :b).must_equal "(a AND b)"
218
+ @ds.literal(a.sql_string + :b).must_equal "(a || b)"
219
219
  end
220
220
  end
221
221
 
222
222
  describe "String#to_sequel_blob" do
223
- specify "should return a Blob object" do
224
- 'xyz'.to_sequel_blob.should be_a_kind_of(::Sequel::SQL::Blob)
225
- 'xyz'.to_sequel_blob.should == 'xyz'
223
+ it "should return a Blob object" do
224
+ 'xyz'.to_sequel_blob.must_be_kind_of(::Sequel::SQL::Blob)
225
+ 'xyz'.to_sequel_blob.must_equal 'xyz'
226
226
  end
227
227
 
228
- specify "should retain binary data" do
229
- "\1\2\3\4".to_sequel_blob.should == "\1\2\3\4"
228
+ it "should retain binary data" do
229
+ "\1\2\3\4".to_sequel_blob.must_equal "\1\2\3\4"
230
230
  end
231
231
  end
232
232
 
@@ -235,14 +235,14 @@ describe "#desc" do
235
235
  @ds = Sequel.mock.dataset
236
236
  end
237
237
 
238
- specify "should format a DESC clause for a column ref" do
239
- @ds.literal(:test.desc).should == 'test DESC'
238
+ it "should format a DESC clause for a column ref" do
239
+ @ds.literal(:test.desc).must_equal 'test DESC'
240
240
 
241
- @ds.literal(:items__price.desc).should == 'items.price DESC'
241
+ @ds.literal(:items__price.desc).must_equal 'items.price DESC'
242
242
  end
243
243
 
244
- specify "should format a DESC clause for a function" do
245
- @ds.literal(:avg.sql_function(:test).desc).should == 'avg(test) DESC'
244
+ it "should format a DESC clause for a function" do
245
+ @ds.literal(:avg.sql_function(:test).desc).must_equal 'avg(test) DESC'
246
246
  end
247
247
  end
248
248
 
@@ -251,14 +251,14 @@ describe "#asc" do
251
251
  @ds = Sequel.mock.dataset
252
252
  end
253
253
 
254
- specify "should format a ASC clause for a column ref" do
255
- @ds.literal(:test.asc).should == 'test ASC'
254
+ it "should format a ASC clause for a column ref" do
255
+ @ds.literal(:test.asc).must_equal 'test ASC'
256
256
 
257
- @ds.literal(:items__price.asc).should == 'items.price ASC'
257
+ @ds.literal(:items__price.asc).must_equal 'items.price ASC'
258
258
  end
259
259
 
260
- specify "should format a ASC clause for a function" do
261
- @ds.literal(:avg.sql_function(:test).asc).should == 'avg(test) ASC'
260
+ it "should format a ASC clause for a function" do
261
+ @ds.literal(:avg.sql_function(:test).asc).must_equal 'avg(test) ASC'
262
262
  end
263
263
  end
264
264
 
@@ -267,18 +267,18 @@ describe "#as" do
267
267
  @ds = Sequel.mock.dataset
268
268
  end
269
269
 
270
- specify "should format a AS clause for a column ref" do
271
- @ds.literal(:test.as(:t)).should == 'test AS t'
270
+ it "should format a AS clause for a column ref" do
271
+ @ds.literal(:test.as(:t)).must_equal 'test AS t'
272
272
 
273
- @ds.literal(:items__price.as(:p)).should == 'items.price AS p'
273
+ @ds.literal(:items__price.as(:p)).must_equal 'items.price AS p'
274
274
  end
275
275
 
276
- specify "should format a AS clause for a function" do
277
- @ds.literal(:avg.sql_function(:test).as(:avg)).should == 'avg(test) AS avg'
276
+ it "should format a AS clause for a function" do
277
+ @ds.literal(:avg.sql_function(:test).as(:avg)).must_equal 'avg(test) AS avg'
278
278
  end
279
279
 
280
- specify "should format a AS clause for a literal value" do
281
- @ds.literal('abc'.as(:abc)).should == "'abc' AS abc"
280
+ it "should format a AS clause for a literal value" do
281
+ @ds.literal('abc'.as(:abc)).must_equal "'abc' AS abc"
282
282
  end
283
283
  end
284
284
 
@@ -291,38 +291,38 @@ describe "Column references" do
291
291
  @ds.quote_identifiers = true
292
292
  end
293
293
 
294
- specify "should be quoted properly" do
295
- @ds.literal(:xyz).should == "`xyz`"
296
- @ds.literal(:xyz__abc).should == "`xyz`.`abc`"
294
+ it "should be quoted properly" do
295
+ @ds.literal(:xyz).must_equal "`xyz`"
296
+ @ds.literal(:xyz__abc).must_equal "`xyz`.`abc`"
297
297
 
298
- @ds.literal(:xyz.as(:x)).should == "`xyz` AS `x`"
299
- @ds.literal(:xyz__abc.as(:x)).should == "`xyz`.`abc` AS `x`"
298
+ @ds.literal(:xyz.as(:x)).must_equal "`xyz` AS `x`"
299
+ @ds.literal(:xyz__abc.as(:x)).must_equal "`xyz`.`abc` AS `x`"
300
300
 
301
- @ds.literal(:xyz___x).should == "`xyz` AS `x`"
302
- @ds.literal(:xyz__abc___x).should == "`xyz`.`abc` AS `x`"
301
+ @ds.literal(:xyz___x).must_equal "`xyz` AS `x`"
302
+ @ds.literal(:xyz__abc___x).must_equal "`xyz`.`abc` AS `x`"
303
303
  end
304
304
 
305
- specify "should be quoted properly in SQL functions" do
306
- @ds.literal(:avg.sql_function(:xyz)).should == "avg(`xyz`)"
307
- @ds.literal(:avg.sql_function(:xyz, 1)).should == "avg(`xyz`, 1)"
308
- @ds.literal(:avg.sql_function(:xyz).as(:a)).should == "avg(`xyz`) AS `a`"
305
+ it "should be quoted properly in SQL functions" do
306
+ @ds.literal(:avg.sql_function(:xyz)).must_equal "avg(`xyz`)"
307
+ @ds.literal(:avg.sql_function(:xyz, 1)).must_equal "avg(`xyz`, 1)"
308
+ @ds.literal(:avg.sql_function(:xyz).as(:a)).must_equal "avg(`xyz`) AS `a`"
309
309
  end
310
310
 
311
- specify "should be quoted properly in ASC/DESC clauses" do
312
- @ds.literal(:xyz.asc).should == "`xyz` ASC"
313
- @ds.literal(:avg.sql_function(:xyz, 1).desc).should == "avg(`xyz`, 1) DESC"
311
+ it "should be quoted properly in ASC/DESC clauses" do
312
+ @ds.literal(:xyz.asc).must_equal "`xyz` ASC"
313
+ @ds.literal(:avg.sql_function(:xyz, 1).desc).must_equal "avg(`xyz`, 1) DESC"
314
314
  end
315
315
 
316
- specify "should be quoted properly in a cast function" do
317
- @ds.literal(:x.cast(:integer)).should == "CAST(`x` AS integer)"
318
- @ds.literal(:x__y.cast('varchar(20)')).should == "CAST(`x`.`y` AS varchar(20))"
316
+ it "should be quoted properly in a cast function" do
317
+ @ds.literal(:x.cast(:integer)).must_equal "CAST(`x` AS integer)"
318
+ @ds.literal(:x__y.cast('varchar(20)')).must_equal "CAST(`x`.`y` AS varchar(20))"
319
319
  end
320
320
  end
321
321
 
322
322
  describe "Blob" do
323
- specify "#to_sequel_blob should return self" do
323
+ it "#to_sequel_blob should return self" do
324
324
  blob = "x".to_sequel_blob
325
- blob.to_sequel_blob.object_id.should == blob.object_id
325
+ blob.to_sequel_blob.object_id.must_equal blob.object_id
326
326
  end
327
327
  end
328
328
 
@@ -331,18 +331,18 @@ describe "Symbol#*" do
331
331
  @ds = Sequel.mock.dataset
332
332
  end
333
333
 
334
- specify "should format a qualified wildcard if no argument" do
335
- @ds.literal(:xyz.*).should == 'xyz.*'
336
- @ds.literal(:abc.*).should == 'abc.*'
334
+ it "should format a qualified wildcard if no argument" do
335
+ @ds.literal(:xyz.*).must_equal 'xyz.*'
336
+ @ds.literal(:abc.*).must_equal 'abc.*'
337
337
  end
338
338
 
339
- specify "should format a filter expression if an argument" do
340
- @ds.literal(:xyz.*(3)).should == '(xyz * 3)'
341
- @ds.literal(:abc.*(5)).should == '(abc * 5)'
339
+ it "should format a filter expression if an argument" do
340
+ @ds.literal(:xyz.*(3)).must_equal '(xyz * 3)'
341
+ @ds.literal(:abc.*(5)).must_equal '(abc * 5)'
342
342
  end
343
343
 
344
- specify "should support qualified symbols if no argument" do
345
- @ds.literal(:xyz__abc.*).should == 'xyz.abc.*'
344
+ it "should support qualified symbols if no argument" do
345
+ @ds.literal(:xyz__abc.*).must_equal 'xyz.abc.*'
346
346
  end
347
347
  end
348
348
 
@@ -353,40 +353,40 @@ describe "Symbol" do
353
353
  @ds.identifier_input_method = :upcase
354
354
  end
355
355
 
356
- specify "#identifier should format an identifier" do
357
- @ds.literal(:xyz__abc.identifier).should == '"XYZ__ABC"'
356
+ it "#identifier should format an identifier" do
357
+ @ds.literal(:xyz__abc.identifier).must_equal '"XYZ__ABC"'
358
358
  end
359
359
 
360
- specify "#qualify should format a qualified column" do
361
- @ds.literal(:xyz.qualify(:abc)).should == '"ABC"."XYZ"'
360
+ it "#qualify should format a qualified column" do
361
+ @ds.literal(:xyz.qualify(:abc)).must_equal '"ABC"."XYZ"'
362
362
  end
363
363
 
364
- specify "#qualify should work on QualifiedIdentifiers" do
365
- @ds.literal(:xyz.qualify(:abc).qualify(:def)).should == '"DEF"."ABC"."XYZ"'
364
+ it "#qualify should work on QualifiedIdentifiers" do
365
+ @ds.literal(:xyz.qualify(:abc).qualify(:def)).must_equal '"DEF"."ABC"."XYZ"'
366
366
  end
367
367
 
368
- specify "should be able to qualify an identifier" do
369
- @ds.literal(:xyz.identifier.qualify(:xyz__abc)).should == '"XYZ"."ABC"."XYZ"'
368
+ it "should be able to qualify an identifier" do
369
+ @ds.literal(:xyz.identifier.qualify(:xyz__abc)).must_equal '"XYZ"."ABC"."XYZ"'
370
370
  end
371
371
 
372
- specify "should be able to specify a schema.table.column" do
373
- @ds.literal(:column.qualify(:table.qualify(:schema))).should == '"SCHEMA"."TABLE"."COLUMN"'
374
- @ds.literal(:column.qualify(:table__name.identifier.qualify(:schema))).should == '"SCHEMA"."TABLE__NAME"."COLUMN"'
372
+ it "should be able to specify a schema.table.column" do
373
+ @ds.literal(:column.qualify(:table.qualify(:schema))).must_equal '"SCHEMA"."TABLE"."COLUMN"'
374
+ @ds.literal(:column.qualify(:table__name.identifier.qualify(:schema))).must_equal '"SCHEMA"."TABLE__NAME"."COLUMN"'
375
375
  end
376
376
 
377
- specify "should be able to specify order" do
377
+ it "should be able to specify order" do
378
378
  @oe = :xyz.desc
379
- @oe.class.should == Sequel::SQL::OrderedExpression
380
- @oe.descending.should == true
379
+ @oe.class.must_equal Sequel::SQL::OrderedExpression
380
+ @oe.descending.must_equal true
381
381
  @oe = :xyz.asc
382
- @oe.class.should == Sequel::SQL::OrderedExpression
383
- @oe.descending.should == false
382
+ @oe.class.must_equal Sequel::SQL::OrderedExpression
383
+ @oe.descending.must_equal false
384
384
  end
385
385
 
386
- specify "should work correctly with objects" do
386
+ it "should work correctly with objects" do
387
387
  o = Object.new
388
388
  def o.sql_literal(ds) "(foo)" end
389
- @ds.literal(:column.qualify(o)).should == '(foo)."COLUMN"'
389
+ @ds.literal(:column.qualify(o)).must_equal '(foo)."COLUMN"'
390
390
  end
391
391
  end
392
392
 
@@ -395,57 +395,57 @@ describe "Symbol" do
395
395
  @ds = Sequel::Database.new.dataset
396
396
  end
397
397
 
398
- specify "should support sql_function method" do
399
- @ds.literal(:COUNT.sql_function('1')).should == "COUNT('1')"
400
- @ds.select(:COUNT.sql_function('1')).sql.should == "SELECT COUNT('1')"
398
+ it "should support sql_function method" do
399
+ @ds.literal(:COUNT.sql_function('1')).must_equal "COUNT('1')"
400
+ @ds.select(:COUNT.sql_function('1')).sql.must_equal "SELECT COUNT('1')"
401
401
  end
402
402
 
403
- specify "should support cast method" do
404
- @ds.literal(:abc.cast(:integer)).should == "CAST(abc AS integer)"
403
+ it "should support cast method" do
404
+ @ds.literal(:abc.cast(:integer)).must_equal "CAST(abc AS integer)"
405
405
  end
406
406
 
407
- specify "should support sql array accesses via sql_subscript" do
408
- @ds.literal(:abc.sql_subscript(1)).should == "abc[1]"
409
- @ds.literal(:abc__def.sql_subscript(1)).should == "abc.def[1]"
410
- @ds.literal(:abc.sql_subscript(1)|2).should == "abc[1, 2]"
411
- @ds.literal(:abc.sql_subscript(1)[2]).should == "abc[1][2]"
407
+ it "should support sql array accesses via sql_subscript" do
408
+ @ds.literal(:abc.sql_subscript(1)).must_equal "abc[1]"
409
+ @ds.literal(:abc__def.sql_subscript(1)).must_equal "abc.def[1]"
410
+ @ds.literal(:abc.sql_subscript(1)|2).must_equal "abc[1, 2]"
411
+ @ds.literal(:abc.sql_subscript(1)[2]).must_equal "abc[1][2]"
412
412
  end
413
413
 
414
- specify "should support cast_numeric and cast_string" do
414
+ it "should support cast_numeric and cast_string" do
415
415
  x = :abc.cast_numeric
416
- x.should be_a_kind_of(Sequel::SQL::NumericExpression)
417
- @ds.literal(x).should == "CAST(abc AS integer)"
416
+ x.must_be_kind_of(Sequel::SQL::NumericExpression)
417
+ @ds.literal(x).must_equal "CAST(abc AS integer)"
418
418
 
419
419
  x = :abc.cast_numeric(:real)
420
- x.should be_a_kind_of(Sequel::SQL::NumericExpression)
421
- @ds.literal(x).should == "CAST(abc AS real)"
420
+ x.must_be_kind_of(Sequel::SQL::NumericExpression)
421
+ @ds.literal(x).must_equal "CAST(abc AS real)"
422
422
 
423
423
  x = :abc.cast_string
424
- x.should be_a_kind_of(Sequel::SQL::StringExpression)
425
- @ds.literal(x).should == "CAST(abc AS varchar(255))"
424
+ x.must_be_kind_of(Sequel::SQL::StringExpression)
425
+ @ds.literal(x).must_equal "CAST(abc AS varchar(255))"
426
426
 
427
427
  x = :abc.cast_string(:varchar)
428
- x.should be_a_kind_of(Sequel::SQL::StringExpression)
429
- @ds.literal(x).should == "CAST(abc AS varchar(255))"
428
+ x.must_be_kind_of(Sequel::SQL::StringExpression)
429
+ @ds.literal(x).must_equal "CAST(abc AS varchar(255))"
430
430
  end
431
431
 
432
- specify "should allow database independent types when casting" do
432
+ it "should allow database independent types when casting" do
433
433
  db = @ds.db
434
434
  def db.cast_type_literal(type)
435
435
  return :foo if type == Integer
436
436
  return :bar if type == String
437
437
  type
438
438
  end
439
- @ds.literal(:abc.cast(String)).should == "CAST(abc AS bar)"
440
- @ds.literal(:abc.cast(String)).should == "CAST(abc AS bar)"
441
- @ds.literal(:abc.cast_string).should == "CAST(abc AS bar)"
442
- @ds.literal(:abc.cast_string(Integer)).should == "CAST(abc AS foo)"
443
- @ds.literal(:abc.cast_numeric).should == "CAST(abc AS foo)"
444
- @ds.literal(:abc.cast_numeric(String)).should == "CAST(abc AS bar)"
439
+ @ds.literal(:abc.cast(String)).must_equal "CAST(abc AS bar)"
440
+ @ds.literal(:abc.cast(String)).must_equal "CAST(abc AS bar)"
441
+ @ds.literal(:abc.cast_string).must_equal "CAST(abc AS bar)"
442
+ @ds.literal(:abc.cast_string(Integer)).must_equal "CAST(abc AS foo)"
443
+ @ds.literal(:abc.cast_numeric).must_equal "CAST(abc AS foo)"
444
+ @ds.literal(:abc.cast_numeric(String)).must_equal "CAST(abc AS bar)"
445
445
  end
446
446
 
447
- specify "should support SQL EXTRACT function via #extract " do
448
- @ds.literal(:abc.extract(:year)).should == "extract(year FROM abc)"
447
+ it "should support SQL EXTRACT function via #extract " do
448
+ @ds.literal(:abc.extract(:year)).must_equal "extract(year FROM abc)"
449
449
  end
450
450
  end
451
451
 
@@ -455,63 +455,63 @@ describe "Postgres extensions integration" do
455
455
  end
456
456
 
457
457
  it "Symbol#pg_array should return an ArrayOp" do
458
- @db.literal(:a.pg_array.unnest).should == "unnest(a)"
458
+ @db.literal(:a.pg_array.unnest).must_equal "unnest(a)"
459
459
  end
460
460
 
461
461
  it "Symbol#pg_row should return a PGRowOp" do
462
- @db.literal(:a.pg_row[:a]).should == "(a).a"
462
+ @db.literal(:a.pg_row[:a]).must_equal "(a).a"
463
463
  end
464
464
 
465
465
  it "Symbol#hstore should return an HStoreOp" do
466
- @db.literal(:a.hstore['a']).should == "(a -> 'a')"
466
+ @db.literal(:a.hstore['a']).must_equal "(a -> 'a')"
467
467
  end
468
468
 
469
469
  it "Symbol#pg_json should return an JSONOp" do
470
- @db.literal(:a.pg_json[%w'a b']).should == "(a #> ARRAY['a','b'])"
471
- @db.literal(:a.pg_json.extract('a')).should == "json_extract_path(a, 'a')"
470
+ @db.literal(:a.pg_json[%w'a b']).must_equal "(a #> ARRAY['a','b'])"
471
+ @db.literal(:a.pg_json.extract('a')).must_equal "json_extract_path(a, 'a')"
472
472
  end
473
473
 
474
474
  it "Symbol#pg_jsonb should return an JSONBOp" do
475
- @db.literal(:a.pg_jsonb[%w'a b']).should == "(a #> ARRAY['a','b'])"
476
- @db.literal(:a.pg_jsonb.extract('a')).should == "jsonb_extract_path(a, 'a')"
475
+ @db.literal(:a.pg_jsonb[%w'a b']).must_equal "(a #> ARRAY['a','b'])"
476
+ @db.literal(:a.pg_jsonb.extract('a')).must_equal "jsonb_extract_path(a, 'a')"
477
477
  end
478
478
 
479
479
  it "Symbol#pg_range should return a RangeOp" do
480
- @db.literal(:a.pg_range.lower).should == "lower(a)"
480
+ @db.literal(:a.pg_range.lower).must_equal "lower(a)"
481
481
  end
482
482
 
483
483
  it "Array#pg_array should return a PGArray" do
484
- @db.literal([1].pg_array.op.unnest).should == "unnest(ARRAY[1])"
485
- @db.literal([1].pg_array(:int4).op.unnest).should == "unnest(ARRAY[1]::int4[])"
484
+ @db.literal([1].pg_array.op.unnest).must_equal "unnest(ARRAY[1])"
485
+ @db.literal([1].pg_array(:int4).op.unnest).must_equal "unnest(ARRAY[1]::int4[])"
486
486
  end
487
487
 
488
488
  it "Array#pg_json should return a JSONArray" do
489
- @db.literal([1].pg_json).should == "'[1]'::json"
489
+ @db.literal([1].pg_json).must_equal "'[1]'::json"
490
490
  end
491
491
 
492
492
  it "Array#pg_jsonb should return a JSONBArray" do
493
- @db.literal([1].pg_jsonb).should == "'[1]'::jsonb"
493
+ @db.literal([1].pg_jsonb).must_equal "'[1]'::jsonb"
494
494
  end
495
495
 
496
496
  it "Array#pg_row should return a ArrayRow" do
497
- @db.literal([1].pg_row).should == "ROW(1)"
497
+ @db.literal([1].pg_row).must_equal "ROW(1)"
498
498
  end
499
499
 
500
500
  it "Hash#hstore should return an HStore" do
501
- @db.literal({'a'=>1}.hstore.op['a']).should == '(\'"a"=>"1"\'::hstore -> \'a\')'
501
+ @db.literal({'a'=>1}.hstore.op['a']).must_equal '(\'"a"=>"1"\'::hstore -> \'a\')'
502
502
  end
503
503
 
504
504
  it "Hash#pg_json should return an JSONHash" do
505
- @db.literal({'a'=>'b'}.pg_json).should == "'{\"a\":\"b\"}'::json"
505
+ @db.literal({'a'=>'b'}.pg_json).must_equal "'{\"a\":\"b\"}'::json"
506
506
  end
507
507
 
508
508
  it "Hash#pg_jsonb should return an JSONBHash" do
509
- @db.literal({'a'=>'b'}.pg_jsonb).should == "'{\"a\":\"b\"}'::jsonb"
509
+ @db.literal({'a'=>'b'}.pg_jsonb).must_equal "'{\"a\":\"b\"}'::jsonb"
510
510
  end
511
511
 
512
512
  it "Range#pg_range should return an PGRange" do
513
- @db.literal((1..2).pg_range).should == "'[1,2]'"
514
- @db.literal((1..2).pg_range(:int4range)).should == "'[1,2]'::int4range"
513
+ @db.literal((1..2).pg_range).must_equal "'[1,2]'"
514
+ @db.literal((1..2).pg_range(:int4range)).must_equal "'[1,2]'::int4range"
515
515
  end
516
516
  end
517
517
  else