sequel 3.47.0 → 3.48.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 (243) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +230 -0
  3. data/README.rdoc +31 -40
  4. data/Rakefile +1 -14
  5. data/doc/active_record.rdoc +29 -29
  6. data/doc/association_basics.rdoc +4 -13
  7. data/doc/cheat_sheet.rdoc +8 -6
  8. data/doc/code_order.rdoc +89 -0
  9. data/doc/core_extensions.rdoc +3 -3
  10. data/doc/dataset_basics.rdoc +7 -8
  11. data/doc/dataset_filtering.rdoc +7 -2
  12. data/doc/mass_assignment.rdoc +2 -3
  13. data/doc/migration.rdoc +8 -8
  14. data/doc/model_hooks.rdoc +11 -7
  15. data/doc/object_model.rdoc +2 -2
  16. data/doc/opening_databases.rdoc +5 -14
  17. data/doc/prepared_statements.rdoc +5 -9
  18. data/doc/querying.rdoc +23 -28
  19. data/doc/reflection.rdoc +11 -0
  20. data/doc/release_notes/3.48.0.txt +477 -0
  21. data/doc/schema_modification.rdoc +12 -5
  22. data/doc/security.rdoc +2 -2
  23. data/doc/sharding.rdoc +1 -2
  24. data/doc/sql.rdoc +10 -13
  25. data/doc/testing.rdoc +8 -4
  26. data/doc/transactions.rdoc +2 -2
  27. data/doc/validations.rdoc +40 -17
  28. data/doc/virtual_rows.rdoc +2 -2
  29. data/lib/sequel/adapters/ado.rb +25 -20
  30. data/lib/sequel/adapters/ado/access.rb +1 -0
  31. data/lib/sequel/adapters/ado/mssql.rb +1 -0
  32. data/lib/sequel/adapters/db2.rb +9 -7
  33. data/lib/sequel/adapters/dbi.rb +16 -16
  34. data/lib/sequel/adapters/do.rb +17 -18
  35. data/lib/sequel/adapters/do/mysql.rb +1 -0
  36. data/lib/sequel/adapters/do/postgres.rb +2 -0
  37. data/lib/sequel/adapters/do/sqlite.rb +1 -0
  38. data/lib/sequel/adapters/firebird.rb +5 -7
  39. data/lib/sequel/adapters/ibmdb.rb +23 -20
  40. data/lib/sequel/adapters/informix.rb +8 -2
  41. data/lib/sequel/adapters/jdbc.rb +39 -35
  42. data/lib/sequel/adapters/jdbc/as400.rb +1 -0
  43. data/lib/sequel/adapters/jdbc/cubrid.rb +1 -0
  44. data/lib/sequel/adapters/jdbc/db2.rb +1 -0
  45. data/lib/sequel/adapters/jdbc/derby.rb +1 -0
  46. data/lib/sequel/adapters/jdbc/firebird.rb +1 -0
  47. data/lib/sequel/adapters/jdbc/h2.rb +1 -0
  48. data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -0
  49. data/lib/sequel/adapters/jdbc/informix.rb +1 -0
  50. data/lib/sequel/adapters/jdbc/jtds.rb +1 -0
  51. data/lib/sequel/adapters/jdbc/mssql.rb +1 -0
  52. data/lib/sequel/adapters/jdbc/mysql.rb +1 -0
  53. data/lib/sequel/adapters/jdbc/oracle.rb +1 -0
  54. data/lib/sequel/adapters/jdbc/postgresql.rb +2 -0
  55. data/lib/sequel/adapters/jdbc/progress.rb +1 -0
  56. data/lib/sequel/adapters/jdbc/sqlite.rb +1 -0
  57. data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -0
  58. data/lib/sequel/adapters/mock.rb +30 -31
  59. data/lib/sequel/adapters/mysql.rb +6 -7
  60. data/lib/sequel/adapters/mysql2.rb +5 -6
  61. data/lib/sequel/adapters/odbc.rb +22 -20
  62. data/lib/sequel/adapters/odbc/mssql.rb +1 -0
  63. data/lib/sequel/adapters/openbase.rb +4 -1
  64. data/lib/sequel/adapters/oracle.rb +10 -8
  65. data/lib/sequel/adapters/postgres.rb +12 -10
  66. data/lib/sequel/adapters/shared/access.rb +6 -0
  67. data/lib/sequel/adapters/shared/cubrid.rb +2 -0
  68. data/lib/sequel/adapters/shared/db2.rb +2 -0
  69. data/lib/sequel/adapters/shared/firebird.rb +2 -0
  70. data/lib/sequel/adapters/shared/informix.rb +2 -0
  71. data/lib/sequel/adapters/shared/mssql.rb +14 -8
  72. data/lib/sequel/adapters/shared/mysql.rb +6 -0
  73. data/lib/sequel/adapters/shared/oracle.rb +2 -0
  74. data/lib/sequel/adapters/shared/postgres.rb +14 -4
  75. data/lib/sequel/adapters/shared/progress.rb +1 -0
  76. data/lib/sequel/adapters/shared/sqlite.rb +4 -3
  77. data/lib/sequel/adapters/sqlite.rb +6 -7
  78. data/lib/sequel/adapters/swift.rb +20 -21
  79. data/lib/sequel/adapters/swift/mysql.rb +1 -0
  80. data/lib/sequel/adapters/swift/postgres.rb +2 -0
  81. data/lib/sequel/adapters/swift/sqlite.rb +1 -0
  82. data/lib/sequel/adapters/tinytds.rb +5 -6
  83. data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +68 -0
  84. data/lib/sequel/connection_pool.rb +1 -1
  85. data/lib/sequel/core.rb +57 -50
  86. data/lib/sequel/database/connecting.rb +9 -10
  87. data/lib/sequel/database/dataset.rb +11 -6
  88. data/lib/sequel/database/dataset_defaults.rb +61 -69
  89. data/lib/sequel/database/features.rb +21 -0
  90. data/lib/sequel/database/misc.rb +23 -3
  91. data/lib/sequel/database/query.rb +13 -7
  92. data/lib/sequel/database/schema_methods.rb +6 -6
  93. data/lib/sequel/database/transactions.rb +1 -0
  94. data/lib/sequel/dataset/actions.rb +51 -38
  95. data/lib/sequel/dataset/features.rb +1 -0
  96. data/lib/sequel/dataset/graph.rb +9 -33
  97. data/lib/sequel/dataset/misc.rb +30 -5
  98. data/lib/sequel/dataset/mutation.rb +2 -3
  99. data/lib/sequel/dataset/prepared_statements.rb +1 -1
  100. data/lib/sequel/dataset/query.rb +91 -27
  101. data/lib/sequel/dataset/sql.rb +40 -6
  102. data/lib/sequel/deprecated.rb +74 -0
  103. data/lib/sequel/deprecated_core_extensions.rb +135 -0
  104. data/lib/sequel/extensions/columns_introspection.rb +1 -5
  105. data/lib/sequel/extensions/core_extensions.rb +10 -3
  106. data/lib/sequel/extensions/date_arithmetic.rb +1 -0
  107. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +33 -0
  108. data/lib/sequel/extensions/filter_having.rb +58 -0
  109. data/lib/sequel/extensions/graph_each.rb +63 -0
  110. data/lib/sequel/extensions/hash_aliases.rb +44 -0
  111. data/lib/sequel/extensions/looser_typecasting.rb +14 -3
  112. data/lib/sequel/extensions/migration.rb +2 -3
  113. data/lib/sequel/extensions/named_timezones.rb +14 -1
  114. data/lib/sequel/extensions/null_dataset.rb +7 -1
  115. data/lib/sequel/extensions/pagination.rb +15 -5
  116. data/lib/sequel/extensions/pg_auto_parameterize.rb +1 -0
  117. data/lib/sequel/extensions/pg_hstore_ops.rb +48 -14
  118. data/lib/sequel/extensions/pg_json.rb +7 -7
  119. data/lib/sequel/extensions/pg_range_ops.rb +8 -2
  120. data/lib/sequel/extensions/pg_statement_cache.rb +1 -0
  121. data/lib/sequel/extensions/pretty_table.rb +13 -4
  122. data/lib/sequel/extensions/query.rb +21 -4
  123. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +22 -0
  124. data/lib/sequel/extensions/schema_caching.rb +10 -7
  125. data/lib/sequel/extensions/schema_dumper.rb +35 -48
  126. data/lib/sequel/extensions/select_remove.rb +13 -4
  127. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +117 -0
  128. data/lib/sequel/extensions/set_overrides.rb +43 -0
  129. data/lib/sequel/extensions/to_dot.rb +6 -0
  130. data/lib/sequel/model.rb +12 -6
  131. data/lib/sequel/model/associations.rb +80 -38
  132. data/lib/sequel/model/base.rb +137 -52
  133. data/lib/sequel/model/errors.rb +7 -2
  134. data/lib/sequel/plugins/active_model.rb +13 -0
  135. data/lib/sequel/plugins/after_initialize.rb +43 -0
  136. data/lib/sequel/plugins/association_proxies.rb +63 -7
  137. data/lib/sequel/plugins/auto_validations.rb +56 -16
  138. data/lib/sequel/plugins/blacklist_security.rb +63 -0
  139. data/lib/sequel/plugins/class_table_inheritance.rb +9 -0
  140. data/lib/sequel/plugins/constraint_validations.rb +50 -8
  141. data/lib/sequel/plugins/dataset_associations.rb +2 -0
  142. data/lib/sequel/plugins/hook_class_methods.rb +7 -1
  143. data/lib/sequel/plugins/identity_map.rb +4 -0
  144. data/lib/sequel/plugins/json_serializer.rb +32 -13
  145. data/lib/sequel/plugins/optimistic_locking.rb +1 -1
  146. data/lib/sequel/plugins/rcte_tree.rb +4 -4
  147. data/lib/sequel/plugins/scissors.rb +33 -0
  148. data/lib/sequel/plugins/serialization.rb +1 -1
  149. data/lib/sequel/plugins/single_table_inheritance.rb +6 -0
  150. data/lib/sequel/plugins/tree.rb +5 -1
  151. data/lib/sequel/plugins/validation_class_methods.rb +2 -1
  152. data/lib/sequel/plugins/validation_helpers.rb +15 -11
  153. data/lib/sequel/plugins/xml_serializer.rb +12 -3
  154. data/lib/sequel/sql.rb +12 -2
  155. data/lib/sequel/timezones.rb +1 -1
  156. data/lib/sequel/version.rb +1 -1
  157. data/lib/sequel_core.rb +1 -0
  158. data/lib/sequel_model.rb +1 -0
  159. data/spec/adapters/mssql_spec.rb +24 -57
  160. data/spec/adapters/postgres_spec.rb +27 -55
  161. data/spec/adapters/spec_helper.rb +1 -1
  162. data/spec/adapters/sqlite_spec.rb +1 -1
  163. data/spec/bin_spec.rb +251 -0
  164. data/spec/core/database_spec.rb +46 -32
  165. data/spec/core/dataset_spec.rb +233 -181
  166. data/spec/core/deprecated_spec.rb +78 -0
  167. data/spec/core/expression_filters_spec.rb +3 -4
  168. data/spec/core/mock_adapter_spec.rb +9 -9
  169. data/spec/core/object_graph_spec.rb +9 -19
  170. data/spec/core/schema_spec.rb +3 -1
  171. data/spec/core/spec_helper.rb +19 -0
  172. data/spec/core_extensions_spec.rb +80 -30
  173. data/spec/extensions/after_initialize_spec.rb +24 -0
  174. data/spec/extensions/association_proxies_spec.rb +37 -1
  175. data/spec/extensions/auto_validations_spec.rb +20 -4
  176. data/spec/extensions/blacklist_security_spec.rb +87 -0
  177. data/spec/extensions/boolean_readers_spec.rb +2 -1
  178. data/spec/extensions/class_table_inheritance_spec.rb +7 -0
  179. data/spec/extensions/columns_introspection_spec.rb +3 -3
  180. data/spec/extensions/constraint_validations_plugin_spec.rb +83 -5
  181. data/spec/extensions/core_refinements_spec.rb +7 -7
  182. data/spec/extensions/dataset_associations_spec.rb +2 -2
  183. data/spec/extensions/date_arithmetic_spec.rb +1 -1
  184. data/spec/extensions/defaults_setter_spec.rb +2 -1
  185. data/spec/extensions/empty_array_ignore_nulls_spec.rb +24 -0
  186. data/spec/extensions/filter_having_spec.rb +40 -0
  187. data/spec/extensions/graph_each_spec.rb +109 -0
  188. data/spec/extensions/hash_aliases_spec.rb +16 -0
  189. data/spec/extensions/hook_class_methods_spec.rb +2 -2
  190. data/spec/extensions/identity_map_spec.rb +3 -3
  191. data/spec/extensions/json_serializer_spec.rb +19 -19
  192. data/spec/extensions/lazy_attributes_spec.rb +1 -0
  193. data/spec/extensions/list_spec.rb +13 -13
  194. data/spec/extensions/looser_typecasting_spec.rb +10 -3
  195. data/spec/extensions/many_through_many_spec.rb +1 -1
  196. data/spec/extensions/migration_spec.rb +7 -7
  197. data/spec/extensions/named_timezones_spec.rb +6 -0
  198. data/spec/extensions/nested_attributes_spec.rb +2 -2
  199. data/spec/extensions/null_dataset_spec.rb +1 -1
  200. data/spec/extensions/pagination_spec.rb +2 -2
  201. data/spec/extensions/pg_hstore_ops_spec.rb +75 -0
  202. data/spec/extensions/pg_range_ops_spec.rb +4 -2
  203. data/spec/extensions/pg_row_plugin_spec.rb +1 -1
  204. data/spec/extensions/pretty_table_spec.rb +1 -1
  205. data/spec/extensions/query_literals_spec.rb +1 -1
  206. data/spec/extensions/query_spec.rb +3 -3
  207. data/spec/extensions/schema_caching_spec.rb +3 -3
  208. data/spec/extensions/schema_dumper_spec.rb +27 -2
  209. data/spec/extensions/schema_spec.rb +2 -2
  210. data/spec/extensions/scissors_spec.rb +26 -0
  211. data/spec/extensions/select_remove_spec.rb +1 -1
  212. data/spec/extensions/sequel_3_dataset_methods_spec.rb +102 -0
  213. data/spec/extensions/set_overrides_spec.rb +45 -0
  214. data/spec/extensions/single_table_inheritance_spec.rb +10 -0
  215. data/spec/extensions/spec_helper.rb +24 -1
  216. data/spec/extensions/static_cache_spec.rb +1 -1
  217. data/spec/extensions/string_stripper_spec.rb +2 -1
  218. data/spec/extensions/to_dot_spec.rb +1 -1
  219. data/spec/extensions/typecast_on_load_spec.rb +3 -2
  220. data/spec/extensions/update_primary_key_spec.rb +2 -2
  221. data/spec/extensions/validation_class_methods_spec.rb +19 -19
  222. data/spec/extensions/validation_helpers_spec.rb +30 -21
  223. data/spec/extensions/xml_serializer_spec.rb +5 -5
  224. data/spec/integration/associations_test.rb +10 -30
  225. data/spec/integration/dataset_test.rb +20 -24
  226. data/spec/integration/eager_loader_test.rb +5 -5
  227. data/spec/integration/model_test.rb +3 -3
  228. data/spec/integration/plugin_test.rb +7 -39
  229. data/spec/integration/schema_test.rb +4 -38
  230. data/spec/integration/spec_helper.rb +2 -1
  231. data/spec/model/association_reflection_spec.rb +70 -5
  232. data/spec/model/associations_spec.rb +11 -11
  233. data/spec/model/base_spec.rb +25 -8
  234. data/spec/model/class_dataset_methods_spec.rb +143 -0
  235. data/spec/model/dataset_methods_spec.rb +1 -1
  236. data/spec/model/eager_loading_spec.rb +25 -25
  237. data/spec/model/hooks_spec.rb +1 -1
  238. data/spec/model/model_spec.rb +22 -7
  239. data/spec/model/plugins_spec.rb +1 -6
  240. data/spec/model/record_spec.rb +37 -29
  241. data/spec/model/spec_helper.rb +23 -1
  242. data/spec/model/validations_spec.rb +15 -17
  243. metadata +32 -3
@@ -168,26 +168,22 @@ describe Sequel::Model, ".plugin" do
168
168
  it "should extend the class's dataset with a DatasetMethods module if the plugin includes it" do
169
169
  @c.plugin @t
170
170
  @c.dataset.ghi.should == 345
171
- @c.ghi.should == 345
172
171
  end
173
172
 
174
173
  it "should save the DatasetMethods module and apply it later if the class doesn't have a dataset" do
175
174
  c = Class.new(Sequel::Model)
176
175
  c.plugin @t
177
- proc{c.ghi}.should raise_error(Sequel::Error)
178
176
  c.dataset = MODEL_DB[:i]
179
177
  c.dataset.ghi.should == 345
180
- c.ghi.should == 345
181
178
  end
182
179
 
183
180
  it "should save the DatasetMethods module and apply it later if the class has a dataset" do
184
181
  @c.plugin @t
185
182
  @c.dataset = MODEL_DB[:i]
186
183
  @c.dataset.ghi.should == 345
187
- @c.ghi.should == 345
188
184
  end
189
185
 
190
- it "should define class methods for all public instance methods in DatasetMethod" do
186
+ qspecify "should define class methods for all public instance methods in DatasetMethod" do
191
187
  m = Module.new do
192
188
  self::DatasetMethods = Module.new do
193
189
  def a; 1; end
@@ -213,7 +209,6 @@ describe Sequel::Model, ".plugin" do
213
209
  @c.dataset.b.should == 2
214
210
  lambda{@c.dataset.a}.should raise_error(NoMethodError)
215
211
  @c.dataset.send(:a).should == 1
216
- @c.b.should == 2
217
212
  lambda{@c.a}.should raise_error(NoMethodError)
218
213
  lambda{@c.send(:a)}.should raise_error(NoMethodError)
219
214
  end
@@ -127,19 +127,25 @@ describe "Model#save" do
127
127
  proc{o.save}.should_not raise_error
128
128
  end
129
129
 
130
- it "should update only the given columns if given" do
130
+ qspecify "should update only the given columns if given" do
131
131
  o = @c.load(:id => 3, :x => 1, :y => nil)
132
132
  o.save(:y)
133
133
  MODEL_DB.sqls.first.should == "UPDATE items SET y = NULL WHERE (id = 3)"
134
134
  end
135
135
 
136
+ it "should respect the :columns option to specify the columns to save" do
137
+ o = @c.load(:id => 3, :x => 1, :y => nil)
138
+ o.save(:columns=>:y)
139
+ MODEL_DB.sqls.first.should == "UPDATE items SET y = NULL WHERE (id = 3)"
140
+ end
141
+
136
142
  it "should mark saved columns as not changed" do
137
143
  o = @c.load(:id => 3, :x => 1, :y => nil)
138
144
  o[:y] = 4
139
145
  o.changed_columns.should == [:y]
140
- o.save(:x)
146
+ o.save(:columns=>:x)
141
147
  o.changed_columns.should == [:y]
142
- o.save(:y)
148
+ o.save(:columns=>:y)
143
149
  o.changed_columns.should == []
144
150
  end
145
151
 
@@ -182,7 +188,7 @@ describe "Model#save" do
182
188
  o = @c.load(:id => 23,:x => 2, :y => nil)
183
189
  o[:x] = 2
184
190
  o[:y] = 22
185
- o.save(:x)
191
+ o.save(:columns=>:x)
186
192
  res.should == [{:x=>2},nil]
187
193
  o.after_save
188
194
  res.should == [nil, nil]
@@ -190,19 +196,19 @@ describe "Model#save" do
190
196
 
191
197
  it "should use Model's use_transactions setting by default" do
192
198
  @c.use_transactions = true
193
- @c.load(:id => 3, :x => 1, :y => nil).save(:y)
199
+ @c.load(:id => 3, :x => 1, :y => nil).save(:columns=>:y)
194
200
  MODEL_DB.sqls.should == ["BEGIN", "UPDATE items SET y = NULL WHERE (id = 3)", "COMMIT"]
195
201
  @c.use_transactions = false
196
- @c.load(:id => 3, :x => 1, :y => nil).save(:y)
202
+ @c.load(:id => 3, :x => 1, :y => nil).save(:columns=>:y)
197
203
  MODEL_DB.sqls.should == ["UPDATE items SET y = NULL WHERE (id = 3)"]
198
204
  end
199
205
 
200
206
  it "should inherit Model's use_transactions setting" do
201
207
  @c.use_transactions = true
202
- Class.new(@c).load(:id => 3, :x => 1, :y => nil).save(:y)
208
+ Class.new(@c).load(:id => 3, :x => 1, :y => nil).save(:columns=>:y)
203
209
  MODEL_DB.sqls.should == ["BEGIN", "UPDATE items SET y = NULL WHERE (id = 3)", "COMMIT"]
204
210
  @c.use_transactions = false
205
- Class.new(@c).load(:id => 3, :x => 1, :y => nil).save(:y)
211
+ Class.new(@c).load(:id => 3, :x => 1, :y => nil).save(:columns=>:y)
206
212
  MODEL_DB.sqls.should == ["UPDATE items SET y = NULL WHERE (id = 3)"]
207
213
  end
208
214
 
@@ -210,23 +216,23 @@ describe "Model#save" do
210
216
  o = @c.load(:id => 3, :x => 1, :y => nil)
211
217
  o.use_transactions = false
212
218
  @c.use_transactions = true
213
- o.save(:y)
219
+ o.save(:columns=>:y)
214
220
  MODEL_DB.sqls.should == ["UPDATE items SET y = NULL WHERE (id = 3)"]
215
221
  o = @c.load(:id => 3, :x => 1, :y => nil)
216
222
  o.use_transactions = true
217
223
  @c.use_transactions = false
218
- o.save(:y)
224
+ o.save(:columns=>:y)
219
225
  MODEL_DB.sqls.should == ["BEGIN", "UPDATE items SET y = NULL WHERE (id = 3)", "COMMIT"]
220
226
  end
221
227
 
222
228
  it "should use :transaction option if given" do
223
229
  o = @c.load(:id => 3, :x => 1, :y => nil)
224
230
  o.use_transactions = true
225
- o.save(:y, :transaction=>false)
231
+ o.save(:columns=>:y, :transaction=>false)
226
232
  MODEL_DB.sqls.should == ["UPDATE items SET y = NULL WHERE (id = 3)"]
227
233
  o = @c.load(:id => 3, :x => 1, :y => nil)
228
234
  o.use_transactions = false
229
- o.save(:y, :transaction=>true)
235
+ o.save(:columns=>:y, :transaction=>true)
230
236
  MODEL_DB.sqls.should == ["BEGIN", "UPDATE items SET y = NULL WHERE (id = 3)", "COMMIT"]
231
237
  end
232
238
 
@@ -237,7 +243,7 @@ describe "Model#save" do
237
243
  def o.before_save
238
244
  false
239
245
  end
240
- proc { o.save(:y) }.should raise_error(Sequel::BeforeHookFailed)
246
+ proc { o.save(:columns=>:y) }.should raise_error(Sequel::BeforeHookFailed)
241
247
  MODEL_DB.sqls.should == ["BEGIN", "ROLLBACK"]
242
248
  end
243
249
 
@@ -248,7 +254,7 @@ describe "Model#save" do
248
254
  def o.before_save
249
255
  false
250
256
  end
251
- proc { o.save(:y, :raise_on_failure => true) }.should raise_error(Sequel::BeforeHookFailed)
257
+ proc { o.save(:columns=>:y, :raise_on_failure => true) }.should raise_error(Sequel::BeforeHookFailed)
252
258
  MODEL_DB.sqls.should == ["BEGIN", "ROLLBACK"]
253
259
  end
254
260
 
@@ -260,7 +266,7 @@ describe "Model#save" do
260
266
  false
261
267
  end
262
268
  MODEL_DB.transaction do
263
- o.save(:y).should == nil
269
+ o.save(:columns=>:y).should == nil
264
270
  MODEL_DB.run "BLAH"
265
271
  end
266
272
  MODEL_DB.sqls.should == ["BEGIN", "BLAH", "COMMIT"]
@@ -273,7 +279,7 @@ describe "Model#save" do
273
279
  def o.before_save
274
280
  false
275
281
  end
276
- o.save(:y).should == nil
282
+ o.save(:columns=>:y).should == nil
277
283
  MODEL_DB.sqls.should == ["BEGIN", "ROLLBACK"]
278
284
  end
279
285
 
@@ -283,7 +289,7 @@ describe "Model#save" do
283
289
  def o.before_save
284
290
  raise Sequel::Rollback
285
291
  end
286
- proc { o.save(:y) }.should raise_error(Sequel::Rollback)
292
+ proc { o.save(:columns=>:y) }.should raise_error(Sequel::Rollback)
287
293
  MODEL_DB.sqls.should == []
288
294
  end
289
295
 
@@ -674,7 +680,7 @@ describe Sequel::Model, "with a primary key" do
674
680
  model_a.primary_key.should == :a
675
681
  end
676
682
 
677
- it "should support multi argument composite keys" do
683
+ qspecify "should support multi argument composite keys" do
678
684
  model_a = Class.new(Sequel::Model){ set_primary_key :a, :b }
679
685
  model_a.primary_key.should == [:a, :b]
680
686
  end
@@ -715,7 +721,7 @@ describe Sequel::Model, "#this" do
715
721
  end
716
722
 
717
723
  it "should support composite primary keys" do
718
- @example.set_primary_key :x, :y
724
+ @example.set_primary_key [:x, :y]
719
725
  instance = @example.load(:x => 4, :y => 5)
720
726
  instance.this.sql.should =~ /SELECT \* FROM examples WHERE \(\([xy] = [45]\) AND \([xy] = [45]\)\) LIMIT 1/
721
727
  end
@@ -858,7 +864,7 @@ describe Sequel::Model, "#set" do
858
864
 
859
865
  it "should raise error if strict_param_setting is true and column is restricted" do
860
866
  @o1.strict_param_setting = true
861
- @c.set_restricted_columns :x
867
+ @c.set_allowed_columns
862
868
  proc{@o1.set('x' => 1)}.should raise_error(Sequel::Error)
863
869
  end
864
870
 
@@ -1087,7 +1093,6 @@ describe Sequel::Model, "#(set|update)_(all|except|only)" do
1087
1093
  set_primary_key :id
1088
1094
  columns :x, :y, :z, :id
1089
1095
  set_allowed_columns :x
1090
- set_restricted_columns :y
1091
1096
  end
1092
1097
  @c.strict_param_setting = false
1093
1098
  @o1 = @c.new
@@ -1105,7 +1110,10 @@ describe Sequel::Model, "#(set|update)_(all|except|only)" do
1105
1110
  proc{@c.new.set_only({:x => 1, :y => 2, :z=>3}, :x, :y)}.should raise_error(Sequel::Error)
1106
1111
  (o = @c.new).set_only({:x => 1, :y => 2}, :x, :y)
1107
1112
  o.values.should == {:x => 1, :y => 2}
1113
+ end
1108
1114
 
1115
+ qspecify "should raise errors for set_except if not all hash fields can be set and strict_param_setting is true" do
1116
+ @c.strict_param_setting = true
1109
1117
  proc{@c.new.set_except({:x => 1, :y => 2, :z=>3, :id=>4}, :x, :y)}.should raise_error(Sequel::Error)
1110
1118
  proc{@c.new.set_except({:x => 1, :y => 2, :z=>3}, :x, :y)}.should raise_error(Sequel::Error)
1111
1119
  (o = @c.new).set_except({:z => 3}, :x, :y)
@@ -1126,7 +1134,7 @@ describe Sequel::Model, "#(set|update)_(all|except|only)" do
1126
1134
  @o1.values.should == {:x => 9, :y => 8, :id=>7}
1127
1135
  end
1128
1136
 
1129
- it "#set_except should not set given attributes or the primary key" do
1137
+ qspecify "#set_except should not set given attributes or the primary key" do
1130
1138
  @o1.set_except({:x => 1, :y => 2, :z=>3, :id=>4}, [:y, :z])
1131
1139
  @o1.values.should == {:x => 1}
1132
1140
  @o1.set_except({:x => 4, :y => 2, :z=>3, :id=>4}, :y, :z)
@@ -1149,7 +1157,7 @@ describe Sequel::Model, "#(set|update)_(all|except|only)" do
1149
1157
  MODEL_DB.sqls.should == ["INSERT INTO items (x) VALUES (1)", "SELECT * FROM items WHERE (id = 10) LIMIT 1"]
1150
1158
  end
1151
1159
 
1152
- it "#update_except should not update given attributes" do
1160
+ qspecify "#update_except should not update given attributes" do
1153
1161
  @o1.update_except({:x => 1, :y => 2, :z=>3, :id=>4}, [:y, :z])
1154
1162
  MODEL_DB.sqls.should == ["INSERT INTO items (x) VALUES (1)", "SELECT * FROM items WHERE (id = 10) LIMIT 1"]
1155
1163
  @c.new.update_except({:x => 1, :y => 2, :z=>3, :id=>4}, :y, :z)
@@ -1255,12 +1263,12 @@ describe Sequel::Model, "#exists?" do
1255
1263
 
1256
1264
  it "should do a query to check if the record exists" do
1257
1265
  @model.load(:id=>1).exists?.should be_true
1258
- MODEL_DB.sqls.should == ['SELECT 1 FROM items WHERE (id = 1) LIMIT 1']
1266
+ MODEL_DB.sqls.should == ['SELECT 1 AS one FROM items WHERE (id = 1) LIMIT 1']
1259
1267
  end
1260
1268
 
1261
1269
  it "should return false when #this.count == 0" do
1262
1270
  @model.load(:id=>2).exists?.should be_false
1263
- MODEL_DB.sqls.should == ['SELECT 1 FROM items WHERE (id = 2) LIMIT 1']
1271
+ MODEL_DB.sqls.should == ['SELECT 1 AS one FROM items WHERE (id = 2) LIMIT 1']
1264
1272
  end
1265
1273
 
1266
1274
  it "should return false without issuing a query if the model object is new" do
@@ -1382,10 +1390,10 @@ describe Sequel::Model, "#hash" do
1382
1390
  specify "should be the same only for objects with the same class and pk if pk is composite and all values are non-NULL" do
1383
1391
  z = Class.new(Sequel::Model)
1384
1392
  z.columns :id, :id2, :x
1385
- z.set_primary_key(:id, :id2)
1393
+ z.set_primary_key([:id, :id2])
1386
1394
  y = Class.new(Sequel::Model)
1387
1395
  y.columns :id, :id2, :x
1388
- y.set_primary_key(:id, :id2)
1396
+ y.set_primary_key([:id, :id2])
1389
1397
  a = z.load(:id => 1, :id2=>2, :x => 3)
1390
1398
 
1391
1399
  a.hash.should == z.load(:id => 1, :id2=>2, :x => 4).hash
@@ -1396,10 +1404,10 @@ describe Sequel::Model, "#hash" do
1396
1404
  specify "should be the same only for objects with the same class and value if pk is composite and one values is NULL" do
1397
1405
  z = Class.new(Sequel::Model)
1398
1406
  z.columns :id, :id2, :x
1399
- z.set_primary_key(:id, :id2)
1407
+ z.set_primary_key([:id, :id2])
1400
1408
  y = Class.new(Sequel::Model)
1401
1409
  y.columns :id, :id2, :x
1402
- y.set_primary_key(:id, :id2)
1410
+ y.set_primary_key([:id, :id2])
1403
1411
 
1404
1412
  a = z.load(:id => 1, :id2 => nil, :x => 3)
1405
1413
  a.hash.should == z.load(:id => 1, :id2=>nil, :x => 3).hash
@@ -3,12 +3,33 @@ unless Object.const_defined?('Sequel') && Sequel.const_defined?('Model')
3
3
  $:.unshift(File.join(File.dirname(File.expand_path(__FILE__)), "../../lib/"))
4
4
  require 'sequel/no_core_ext'
5
5
  end
6
+ Sequel::Deprecation.backtrace_filter = lambda{|line, lineno| lineno < 4 || line =~ /_spec\.rb/}
6
7
 
7
8
  if ENV['SEQUEL_COLUMNS_INTROSPECTION']
8
9
  Sequel.extension :columns_introspection
9
10
  Sequel::Dataset.introspect_all_columns
10
11
  end
11
12
 
13
+ (defined?(RSpec) ? RSpec::Core::ExampleGroup : Spec::Example::ExampleGroup).class_eval do
14
+ if ENV['SEQUEL_DEPRECATION_WARNINGS']
15
+ class << self
16
+ alias qspecify specify
17
+ end
18
+ else
19
+ def self.qspecify(*a, &block)
20
+ specify(*a) do
21
+ begin
22
+ output = Sequel::Deprecation.output
23
+ Sequel::Deprecation.output = false
24
+ instance_exec(&block)
25
+ ensure
26
+ Sequel::Deprecation.output = output
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+
12
33
  Sequel.quote_identifiers = false
13
34
  Sequel.identifier_input_method = nil
14
35
  Sequel.identifier_output_method = nil
@@ -28,9 +49,10 @@ class << Sequel::Model
28
49
  end
29
50
 
30
51
  Sequel::Model.use_transactions = false
31
- Sequel::Model.cache_anonymous_models = false
52
+ Sequel.cache_anonymous_models = false
32
53
 
33
54
  db = Sequel.mock(:fetch=>{:id => 1, :x => 1}, :numrows=>1, :autoid=>proc{|sql| 10})
34
55
  def db.schema(*) [[:id, {:primary_key=>true}]] end
35
56
  def db.reset() sqls end
57
+ def db.supports_schema_parsing?() true end
36
58
  Sequel::Model.db = MODEL_DB = db
@@ -14,16 +14,14 @@ describe Sequel::Model::Errors do
14
14
 
15
15
  specify "should be empty if there are no errors" do
16
16
  @errors.should be_empty
17
- @errors[:blah]
18
- @errors.should be_empty
19
17
  end
20
18
 
21
19
  specify "should not be empty if there are errors" do
22
- @errors[:blah] << "blah"
20
+ @errors.add(:blah, "blah")
23
21
  @errors.should_not be_empty
24
22
  end
25
23
 
26
- specify "should return errors for a specific attribute using #[]" do
24
+ qspecify "should return errors for a specific attribute using #[]" do
27
25
  @errors[:blah].should == []
28
26
  @errors[:blah] << 'blah'
29
27
  @errors[:blah].should == ['blah']
@@ -32,30 +30,30 @@ describe Sequel::Model::Errors do
32
30
  end
33
31
 
34
32
  specify "should return an array of errors for a specific attribute using #on if there are errors" do
35
- @errors[:blah] << 'blah'
33
+ @errors.add(:blah, 'blah')
36
34
  @errors.on(:blah).should == ['blah']
37
35
  end
38
36
 
39
37
  specify "should return nil using #on if there are no errors for that attribute" do
40
38
  @errors.on(:blah).should == nil
41
- @errors[:blah]
42
- @errors.on(:blah).should == nil
43
39
  end
44
40
 
45
- specify "should accept errors using #[] << or #add" do
41
+ qspecify "should accept errors using #[] <<" do
46
42
  @errors[:blah] << 'blah'
47
43
  @errors[:blah].should == ['blah']
44
+ end
48
45
 
46
+ specify "should accept errors using #add" do
49
47
  @errors.add :blah, 'zzzz'
50
- @errors[:blah].should == ['blah', 'zzzz']
48
+ @errors[:blah].should == ['zzzz']
51
49
  end
52
50
 
53
51
  specify "should return full messages using #full_messages" do
54
52
  @errors.full_messages.should == []
55
53
 
56
- @errors[:blow] << 'blieuh'
57
- @errors[:blow] << 'blich'
58
- @errors[:blay] << 'bliu'
54
+ @errors.add(:blow, 'blieuh')
55
+ @errors.add(:blow, 'blich')
56
+ @errors.add(:blay, 'bliu')
59
57
  msgs = @errors.full_messages
60
58
  msgs.size.should == 3
61
59
  msgs.should include('blow blieuh', 'blow blich', 'blay bliu')
@@ -64,9 +62,9 @@ describe Sequel::Model::Errors do
64
62
  specify "should not add column names for LiteralStrings" do
65
63
  @errors.full_messages.should == []
66
64
 
67
- @errors[:blow] << 'blieuh'
68
- @errors[:blow] << Sequel.lit('blich')
69
- @errors[:blay] << 'bliu'
65
+ @errors.add(:blow, 'blieuh')
66
+ @errors.add(:blow, Sequel.lit('blich'))
67
+ @errors.add(:blay, 'bliu')
70
68
  msgs = @errors.full_messages
71
69
  msgs.size.should == 3
72
70
  msgs.should include('blow blieuh', 'blich', 'blay bliu')
@@ -103,7 +101,7 @@ describe Sequel::Model do
103
101
  @c = Class.new(Sequel::Model) do
104
102
  columns :score
105
103
  def validate
106
- errors[:score] << 'too low' if score < 87
104
+ errors.add(:score, 'too low') if score < 87
107
105
  end
108
106
  end
109
107
 
@@ -125,7 +123,7 @@ describe Sequel::Model do
125
123
  @o.score = 86
126
124
  @o.should_not be_valid
127
125
  @o.errors[:score].should == ['too low']
128
- @o.errors[:blah].should be_empty
126
+ @o.errors.on(:blah).should be_nil
129
127
  end
130
128
 
131
129
  specify "should allow raising of ValidationFailed with a Model instance with errors" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.47.0
4
+ version: 3.48.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-01 00:00:00.000000000 Z
11
+ date: 2013-06-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: The Database Toolkit for Ruby
14
14
  email: code@jeremyevans.net
@@ -45,6 +45,7 @@ extra_rdoc_files:
45
45
  - doc/bin_sequel.rdoc
46
46
  - doc/security.rdoc
47
47
  - doc/postgresql.rdoc
48
+ - doc/code_order.rdoc
48
49
  - doc/release_notes/1.0.txt
49
50
  - doc/release_notes/1.1.txt
50
51
  - doc/release_notes/1.3.txt
@@ -111,6 +112,7 @@ extra_rdoc_files:
111
112
  - doc/release_notes/3.45.0.txt
112
113
  - doc/release_notes/3.46.0.txt
113
114
  - doc/release_notes/3.47.0.txt
115
+ - doc/release_notes/3.48.0.txt
114
116
  files:
115
117
  - MIT-LICENSE
116
118
  - CHANGELOG
@@ -195,6 +197,7 @@ files:
195
197
  - doc/release_notes/3.45.0.txt
196
198
  - doc/release_notes/3.46.0.txt
197
199
  - doc/release_notes/3.47.0.txt
200
+ - doc/release_notes/3.48.0.txt
198
201
  - doc/sharding.rdoc
199
202
  - doc/sql.rdoc
200
203
  - doc/validations.rdoc
@@ -209,6 +212,7 @@ files:
209
212
  - doc/bin_sequel.rdoc
210
213
  - doc/security.rdoc
211
214
  - doc/postgresql.rdoc
215
+ - doc/code_order.rdoc
212
216
  - spec/adapters/firebird_spec.rb
213
217
  - spec/adapters/informix_spec.rb
214
218
  - spec/adapters/mssql_spec.rb
@@ -226,6 +230,7 @@ files:
226
230
  - spec/core/object_graph_spec.rb
227
231
  - spec/core/schema_generator_spec.rb
228
232
  - spec/core/spec_helper.rb
233
+ - spec/core/deprecated_spec.rb
229
234
  - spec/core/version_spec.rb
230
235
  - spec/core/mock_adapter_spec.rb
231
236
  - spec/extensions/active_model_spec.rb
@@ -324,6 +329,15 @@ files:
324
329
  - spec/extensions/unlimited_update_spec.rb
325
330
  - spec/extensions/error_splitter_spec.rb
326
331
  - spec/extensions/input_transformer_spec.rb
332
+ - spec/extensions/filter_having_spec.rb
333
+ - spec/extensions/hash_aliases_spec.rb
334
+ - spec/extensions/after_initialize_spec.rb
335
+ - spec/extensions/set_overrides_spec.rb
336
+ - spec/extensions/graph_each_spec.rb
337
+ - spec/extensions/blacklist_security_spec.rb
338
+ - spec/extensions/sequel_3_dataset_methods_spec.rb
339
+ - spec/extensions/empty_array_ignore_nulls_spec.rb
340
+ - spec/extensions/scissors_spec.rb
327
341
  - spec/integration/associations_test.rb
328
342
  - spec/integration/database_test.rb
329
343
  - spec/integration/dataset_test.rb
@@ -349,6 +363,7 @@ files:
349
363
  - spec/model/record_spec.rb
350
364
  - spec/model/spec_helper.rb
351
365
  - spec/model/validations_spec.rb
366
+ - spec/model/class_dataset_methods_spec.rb
352
367
  - spec/rcov.opts
353
368
  - spec/spec_config.rb.example
354
369
  - spec/spec_config.rb
@@ -398,6 +413,7 @@ files:
398
413
  - spec/files/transaction_unspecified_migrations/002_create_basic.rb
399
414
  - spec/core_extensions_spec.rb
400
415
  - spec/sequel_coverage.rb
416
+ - spec/bin_spec.rb
401
417
  - lib/sequel.rb
402
418
  - lib/sequel/adapters/ado.rb
403
419
  - lib/sequel/adapters/ado/mssql.rb
@@ -452,6 +468,7 @@ files:
452
468
  - lib/sequel/adapters/utils/emulate_offset_with_row_number.rb
453
469
  - lib/sequel/adapters/utils/pg_types.rb
454
470
  - lib/sequel/adapters/utils/split_alter_table.rb
471
+ - lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb
455
472
  - lib/sequel/adapters/mysql2.rb
456
473
  - lib/sequel/adapters/swift.rb
457
474
  - lib/sequel/adapters/swift/mysql.rb
@@ -531,6 +548,13 @@ files:
531
548
  - lib/sequel/extensions/date_arithmetic.rb
532
549
  - lib/sequel/extensions/core_refinements.rb
533
550
  - lib/sequel/extensions/meta_def.rb
551
+ - lib/sequel/extensions/filter_having.rb
552
+ - lib/sequel/extensions/hash_aliases.rb
553
+ - lib/sequel/extensions/ruby18_symbol_extensions.rb
554
+ - lib/sequel/extensions/set_overrides.rb
555
+ - lib/sequel/extensions/graph_each.rb
556
+ - lib/sequel/extensions/sequel_3_dataset_methods.rb
557
+ - lib/sequel/extensions/empty_array_ignore_nulls.rb
534
558
  - lib/sequel/version.rb
535
559
  - lib/sequel/model.rb
536
560
  - lib/sequel/model/associations.rb
@@ -595,10 +619,15 @@ files:
595
619
  - lib/sequel/plugins/unlimited_update.rb
596
620
  - lib/sequel/plugins/auto_validations.rb
597
621
  - lib/sequel/plugins/error_splitter.rb
622
+ - lib/sequel/plugins/scissors.rb
598
623
  - lib/sequel/plugins/input_transformer.rb
624
+ - lib/sequel/plugins/after_initialize.rb
625
+ - lib/sequel/plugins/blacklist_security.rb
599
626
  - lib/sequel/timezones.rb
627
+ - lib/sequel/deprecated.rb
600
628
  - lib/sequel/ast_transformer.rb
601
629
  - lib/sequel/no_core_ext.rb
630
+ - lib/sequel/deprecated_core_extensions.rb
602
631
  - lib/sequel_core.rb
603
632
  - lib/sequel_model.rb
604
633
  homepage: http://sequel.rubyforge.org
@@ -627,7 +656,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
627
656
  version: '0'
628
657
  requirements: []
629
658
  rubyforge_project: sequel
630
- rubygems_version: 2.0.0
659
+ rubygems_version: 2.0.2
631
660
  signing_key:
632
661
  specification_version: 4
633
662
  summary: The Database Toolkit for Ruby