sequel_core 1.4.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/CHANGELOG +74 -0
  2. data/COPYING +1 -0
  3. data/README +17 -6
  4. data/Rakefile +16 -21
  5. data/lib/sequel_core.rb +18 -28
  6. data/lib/sequel_core/adapters/ado.rb +3 -15
  7. data/lib/sequel_core/adapters/dbi.rb +1 -14
  8. data/lib/sequel_core/adapters/informix.rb +3 -3
  9. data/lib/sequel_core/adapters/jdbc.rb +2 -2
  10. data/lib/sequel_core/adapters/mysql.rb +39 -59
  11. data/lib/sequel_core/adapters/odbc.rb +18 -38
  12. data/lib/sequel_core/adapters/openbase.rb +1 -17
  13. data/lib/sequel_core/adapters/oracle.rb +1 -19
  14. data/lib/sequel_core/adapters/postgres.rb +20 -60
  15. data/lib/sequel_core/adapters/sqlite.rb +4 -8
  16. data/lib/sequel_core/connection_pool.rb +150 -0
  17. data/lib/sequel_core/core_ext.rb +41 -0
  18. data/lib/sequel_core/core_sql.rb +35 -38
  19. data/lib/sequel_core/database.rb +20 -17
  20. data/lib/sequel_core/dataset.rb +49 -80
  21. data/lib/sequel_core/dataset/callback.rb +11 -13
  22. data/lib/sequel_core/dataset/convenience.rb +18 -136
  23. data/lib/sequel_core/dataset/pagination.rb +81 -0
  24. data/lib/sequel_core/dataset/sequelizer.rb +5 -4
  25. data/lib/sequel_core/dataset/sql.rb +43 -33
  26. data/lib/sequel_core/deprecated.rb +200 -0
  27. data/lib/sequel_core/exceptions.rb +0 -14
  28. data/lib/sequel_core/object_graph.rb +199 -0
  29. data/lib/sequel_core/pretty_table.rb +27 -24
  30. data/lib/sequel_core/schema/generator.rb +16 -4
  31. data/lib/sequel_core/schema/sql.rb +5 -3
  32. data/lib/sequel_core/worker.rb +1 -1
  33. data/spec/adapters/informix_spec.rb +1 -47
  34. data/spec/adapters/mysql_spec.rb +85 -54
  35. data/spec/adapters/oracle_spec.rb +1 -57
  36. data/spec/adapters/postgres_spec.rb +66 -49
  37. data/spec/adapters/sqlite_spec.rb +4 -29
  38. data/spec/connection_pool_spec.rb +358 -0
  39. data/spec/core_sql_spec.rb +24 -19
  40. data/spec/database_spec.rb +13 -9
  41. data/spec/dataset_spec.rb +59 -78
  42. data/spec/object_graph_spec.rb +202 -0
  43. data/spec/pretty_table_spec.rb +1 -9
  44. data/spec/schema_generator_spec.rb +7 -1
  45. data/spec/schema_spec.rb +27 -0
  46. data/spec/sequelizer_spec.rb +2 -2
  47. data/spec/spec_helper.rb +4 -2
  48. metadata +16 -57
  49. data/lib/sequel_core/array_keys.rb +0 -322
  50. data/lib/sequel_core/model.rb +0 -8
  51. data/spec/array_keys_spec.rb +0 -682
@@ -1,8 +0,0 @@
1
- module Sequel
2
- class Model
3
- def self.database_opened(db)
4
- @db ||= db if (self == Model)
5
- end
6
- end
7
- end
8
-
@@ -1,682 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'spec_helper')
2
-
3
- context "An array with symbol keys" do
4
- setup do
5
- @a = [1, 2, 3]
6
- @a.keys = [:a, :b, :c]
7
- end
8
-
9
- specify "should provide subscript access" do
10
- @a[0].should == 1
11
- @a[0..1].should == [1, 2]
12
-
13
- @a[1] = 4
14
- @a.should == [1, 4, 3]
15
- end
16
-
17
- specify "should provide key access using symbols" do
18
- @a[:a].should == 1
19
- @a[:b].should == 2
20
- @a[:B].should == nil
21
-
22
- @a[:a] = 11
23
- @a.should == [11, 2, 3]
24
- @a[:a].should == 11
25
-
26
- @a[:d] = 4
27
- @a.should == [11, 2, 3, 4]
28
- @a.keys.should == [:a, :b, :c, :d]
29
- end
30
-
31
- specify "should provide key access using strings" do
32
- @a['a'].should == 1
33
- @a['A'].should be_nil
34
-
35
- @a['d'] = 4
36
- @a.should == [1, 2, 3, 4]
37
- @a.keys.should == [:a, :b, :c, :d]
38
- end
39
-
40
- specify "should provide #store functionality" do
41
- @a.store(:a, 11)
42
- @a.should == [11, 2, 3]
43
-
44
- @a.store(:d, 4)
45
- @a.should == [11, 2, 3, 4]
46
-
47
- @a.store('d', 44)
48
- @a.should == [11, 2, 3, 44]
49
- end
50
-
51
- specify "should provide #to_hash/#to_h functionality" do
52
- @a.to_hash.should == {:a => 1, :b => 2, :c => 3}
53
- @a.to_h.should == {:a => 1, :b => 2, :c => 3}
54
- end
55
-
56
- specify "should provide #columns as alias to #keys" do
57
- @a.columns.should == [:a, :b, :c]
58
- @a.columns = [:x, :y, :z]
59
-
60
- @a[:x].should == 1
61
- end
62
-
63
- specify "should provide #slice functionality with keys" do
64
- s = @a.slice(0, 2)
65
- s.should == [1, 2]
66
- s.keys.should == [:a, :b]
67
-
68
- s = @a.slice(1..2)
69
- s.should == [2, 3]
70
- s.keys.should == [:b, :c]
71
- end
72
-
73
- specify "should provide #each_pair iterator" do
74
- pairs = []
75
- @a.each_pair {|k, v| pairs << [k, v]}
76
- pairs.should == [[:a, 1], [:b, 2], [:c, 3]]
77
- end
78
-
79
- specify "should provide stock #delete functionality for arrays without keys" do
80
- a = [1, 2, 3]
81
- a.delete(2)
82
- a.should == [1, 3]
83
- end
84
-
85
- specify "should provide key-based #delete functionality" do
86
- @a.delete(:b)
87
- @a.should == [1, 3]
88
- @a.keys.should == [:a, :c]
89
- @a[:a].should == 1
90
- @a[:c].should == 3
91
- end
92
-
93
- specify "should separate array keys after #delete/#delete_at" do
94
- b = @a.dup
95
-
96
- b.delete(:b)
97
-
98
- @a.keys.should == [:a, :b, :c]
99
- b.keys.should == [:a, :c]
100
- @a.should == [1, 2, 3]
101
- b.should == [1, 3]
102
- @a[:b].should == 2
103
- b[:b].should == nil
104
- end
105
-
106
- specify "should provide #each_key functionality" do
107
- keys = []
108
- @a.each_key {|k| keys << k}
109
- keys.should == [:a, :b, :c]
110
- end
111
-
112
- specify "should provide #each_value functionality" do
113
- values = []
114
- @a.each_value {|v| values << v}
115
- values.should == [1, 2, 3]
116
- end
117
-
118
- specify "should provide stock #include? functionality for arrays without keys" do
119
- [1, 2, 3].include?(2).should be_true
120
- [1, 2, 3].include?(4).should be_false
121
- end
122
-
123
- specify "should provide #has_key?/#member?/#key?/#include? functionality" do
124
- @a.has_key?(:a).should be_true
125
- @a.has_key?(:b).should be_true
126
- @a.has_key?(:c).should be_true
127
- @a.has_key?(:B).should be_false
128
- @a.has_key?(:d).should be_false
129
-
130
- @a.has_key?('a').should be_true
131
- @a.has_key?('b').should be_true
132
- @a.has_key?('c').should be_true
133
- @a.has_key?('A').should be_false
134
- @a.has_key?('d').should be_false
135
-
136
- @a.key?(:a).should be_true
137
- @a.key?(:b).should be_true
138
- @a.key?(:c).should be_true
139
- @a.key?(:B).should be_false
140
- @a.key?(:d).should be_false
141
-
142
- @a.key?('a').should be_true
143
- @a.key?('b').should be_true
144
- @a.key?('c').should be_true
145
- @a.key?('A').should be_false
146
- @a.key?('d').should be_false
147
-
148
- @a.member?(:a).should be_true
149
- @a.member?(:b).should be_true
150
- @a.member?(:c).should be_true
151
- @a.member?(:B).should be_false
152
- @a.member?(:d).should be_false
153
-
154
- @a.member?('a').should be_true
155
- @a.member?('b').should be_true
156
- @a.member?('c').should be_true
157
- @a.member?('A').should be_false
158
- @a.member?('d').should be_false
159
-
160
- @a.include?(:a).should be_true
161
- @a.include?(:b).should be_true
162
- @a.include?(:c).should be_true
163
- @a.include?(:B).should be_false
164
- @a.include?(:d).should be_false
165
-
166
- @a.include?('a').should be_true
167
- @a.include?('b').should be_true
168
- @a.include?('c').should be_true
169
- @a.include?('A').should be_false
170
- @a.include?('d').should be_false
171
- end
172
-
173
- specify "should provide original #include? functionality for arrays without keys" do
174
- [1, 2, 3].include?(:a).should be_false
175
- [1, 2, 3].include?(1).should be_true
176
- end
177
-
178
- specify "should provide #has_value?/#value? functionality" do
179
- @a.has_value?(1).should be_true
180
- @a.has_value?(2).should be_true
181
- @a.has_value?(3).should be_true
182
- @a.has_value?(4).should be_false
183
-
184
- @a.value?(1).should be_true
185
- @a.value?(2).should be_true
186
- @a.value?(3).should be_true
187
- @a.value?(4).should be_false
188
- end
189
-
190
- specify "should provide #fetch functionality" do
191
- @a.fetch(:a).should == 1
192
- @a.fetch(:b).should == 2
193
- @a.fetch(:c).should == 3
194
- proc {@a.fetch(:d)}.should raise_error(IndexError)
195
- @a.fetch(:d, 4).should == 4
196
- @a.fetch(:d, nil).should == nil
197
-
198
- @a.fetch(:a) {|v| v.to_s}.should == '1'
199
- @a.fetch(:d, 4) {|v| v.to_s}.should == '4'
200
- end
201
-
202
- specify "should provide #values functionality" do
203
- @a.values.should == [1, 2, 3]
204
- end
205
-
206
- specify "should provide #dup functionality" do
207
- b = @a.dup
208
- b.should == [1, 2, 3]
209
- b.keys.should == @a.keys
210
-
211
- b[:a].should == 1
212
- b[:b].should == 2
213
- b[:c].should == 3
214
- b[:d].should be_nil
215
-
216
- @a.keys << :e
217
- @a.keys.should == [:a, :b, :c, :e]
218
- b.keys.should == @a.keys
219
- end
220
-
221
- specify "should provide #clone functionality" do
222
- b = @a.clone
223
- b.should == [1, 2, 3]
224
- b.keys.should == @a.keys
225
-
226
- b[:a].should == 1
227
- b[:b].should == 2
228
- b[:c].should == 3
229
- b[:d].should be_nil
230
-
231
- @a.keys << :e
232
- @a.keys.should == [:a, :b, :c, :e]
233
- b.keys.should_not == @a.keys
234
- end
235
-
236
- specify "should provide #merge functionality" do
237
- @a.merge(@a).to_hash.should == {:a => 1, :b => 2, :c => 3}
238
-
239
- @a.merge({:b => 22, :d => 4}).to_hash.should == {:a => 1, :b => 22, :c => 3, :d => 4}
240
-
241
- b = [1, 2, 3]
242
- b.keys = [:b, :c, :d]
243
- @a.merge(b).to_hash.should == {:a => 1, :b => 1, :c => 2, :d => 3}
244
-
245
- # call with a block. The block returns the old value passed to it
246
- @a.merge(b) {|k, o, n| o}.to_hash.should == {:a => 1, :b => 2, :c => 3, :d => 3}
247
- end
248
-
249
- specify "should provide #merge!/#update!/#update functionality" do
250
- @a.merge!(@a)
251
- @a.to_hash.should == {:a => 1, :b => 2, :c => 3}
252
-
253
- @a.update(:b => 22)
254
- @a.to_hash.should == {:a => 1, :b => 22, :c => 3}
255
-
256
- b = [1, 2, 3]
257
- b.keys = [:b, :c, :d]
258
- @a.update!(b)
259
- @a.to_hash.should == {:a => 1, :b => 1, :c => 2, :d => 3}
260
- end
261
- end
262
-
263
- context "An array with string keys" do
264
- setup do
265
- @a = [1, 2, 3]
266
- @a.keys = ['a', 'b', 'c']
267
- end
268
-
269
- specify "should provide key access using symbols" do
270
- @a[:a].should == 1
271
- @a[:b].should == 2
272
- @a[:B].should == nil
273
-
274
- @a[:a] = 11
275
- @a.should == [11, 2, 3]
276
- @a[:a].should == 11
277
-
278
- @a[:d] = 4
279
- @a.should == [11, 2, 3, 4]
280
- @a.keys.should == ['a', 'b', 'c', :d]
281
- end
282
-
283
- specify "should provide key access using strings" do
284
- @a['a'].should == 1
285
- @a['A'].should be_nil
286
-
287
- @a['d'] = 4
288
- @a.should == [1, 2, 3, 4]
289
- @a.keys.should == ['a', 'b', 'c', :d]
290
- end
291
-
292
- specify "should provide #store functionality" do
293
- @a.store(:a, 11)
294
- @a.should == [11, 2, 3]
295
-
296
- @a.store(:d, 4)
297
- @a.should == [11, 2, 3, 4]
298
-
299
- @a.store('d', 44)
300
- @a.should == [11, 2, 3, 44]
301
- end
302
-
303
- specify "should provide #to_hash/#to_h functionality" do
304
- @a.to_hash.should == {:a => 1, :b => 2, :c => 3}
305
- @a.to_h.should == {:a => 1, :b => 2, :c => 3}
306
- end
307
-
308
- specify "should provide #columns as alias to #keys" do
309
- @a.columns.should == ['a', 'b', 'c']
310
- @a.columns = [:x, :y, :z]
311
-
312
- @a[:x].should == 1
313
- end
314
-
315
- specify "should provide #slice functionality with keys" do
316
- s = @a.slice(0, 2)
317
- s.should == [1, 2]
318
- s.keys.should == ['a', 'b']
319
-
320
- s = @a.slice(1..2)
321
- s.should == [2, 3]
322
- s.keys.should == ['b', 'c']
323
- end
324
-
325
- specify "should provide #each_pair iterator" do
326
- pairs = []
327
- @a.each_pair {|k, v| pairs << [k, v]}
328
- pairs.should == [['a', 1], ['b', 2], ['c', 3]]
329
- end
330
-
331
- specify "should provide key-based #delete functionality" do
332
- @a.delete(:b)
333
- @a.should == [1, 3]
334
- @a.keys.should == ['a', 'c']
335
- @a[:a].should == 1
336
- @a[:c].should == 3
337
- end
338
-
339
- specify "should provide #each_key functionality" do
340
- keys = []
341
- @a.each_key {|k| keys << k}
342
- keys.should == ['a', 'b', 'c']
343
- end
344
-
345
- specify "should provide #each_value functionality" do
346
- values = []
347
- @a.each_value {|v| values << v}
348
- values.should == [1, 2, 3]
349
- end
350
-
351
- specify "should provide #has_key?/#member?/#key?/#include? functionality" do
352
- @a.has_key?(:a).should be_true
353
- @a.has_key?(:b).should be_true
354
- @a.has_key?(:c).should be_true
355
- @a.has_key?(:B).should be_false
356
- @a.has_key?(:d).should be_false
357
-
358
- @a.has_key?('a').should be_true
359
- @a.has_key?('b').should be_true
360
- @a.has_key?('c').should be_true
361
- @a.has_key?('A').should be_false
362
- @a.has_key?('d').should be_false
363
-
364
- @a.key?(:a).should be_true
365
- @a.key?(:b).should be_true
366
- @a.key?(:c).should be_true
367
- @a.key?(:B).should be_false
368
- @a.key?(:d).should be_false
369
-
370
- @a.key?('a').should be_true
371
- @a.key?('b').should be_true
372
- @a.key?('c').should be_true
373
- @a.key?('A').should be_false
374
- @a.key?('d').should be_false
375
-
376
- @a.member?(:a).should be_true
377
- @a.member?(:b).should be_true
378
- @a.member?(:c).should be_true
379
- @a.member?(:B).should be_false
380
- @a.member?(:d).should be_false
381
-
382
- @a.member?('a').should be_true
383
- @a.member?('b').should be_true
384
- @a.member?('c').should be_true
385
- @a.member?('A').should be_false
386
- @a.member?('d').should be_false
387
-
388
- @a.include?(:a).should be_true
389
- @a.include?(:b).should be_true
390
- @a.include?(:c).should be_true
391
- @a.include?(:B).should be_false
392
- @a.include?(:d).should be_false
393
-
394
- @a.include?('a').should be_true
395
- @a.include?('b').should be_true
396
- @a.include?('c').should be_true
397
- @a.include?('A').should be_false
398
- @a.include?('d').should be_false
399
- end
400
-
401
- specify "should provide original #include? functionality for arrays without keys" do
402
- [1, 2, 3].include?(:a).should be_false
403
- [1, 2, 3].include?(1).should be_true
404
- end
405
-
406
- specify "should provide #has_value?/#value? functionality" do
407
- @a.has_value?(1).should be_true
408
- @a.has_value?(2).should be_true
409
- @a.has_value?(3).should be_true
410
- @a.has_value?(4).should be_false
411
-
412
- @a.value?(1).should be_true
413
- @a.value?(2).should be_true
414
- @a.value?(3).should be_true
415
- @a.value?(4).should be_false
416
- end
417
-
418
- specify "should provide #fetch functionality" do
419
- @a.fetch(:a).should == 1
420
- @a.fetch(:b).should == 2
421
- @a.fetch(:c).should == 3
422
- proc {@a.fetch(:d)}.should raise_error(IndexError)
423
- @a.fetch(:d, 4).should == 4
424
- @a.fetch(:d, nil).should == nil
425
-
426
- @a.fetch(:a) {|v| v.to_s}.should == '1'
427
- @a.fetch(:d, 4) {|v| v.to_s}.should == '4'
428
- end
429
-
430
- specify "should provide #values functionality" do
431
- @a.values.should == [1, 2, 3]
432
- end
433
-
434
- specify "should provide #dup functionality" do
435
- b = @a.dup
436
- b.should == [1, 2, 3]
437
- b.keys.should == @a.keys
438
-
439
- b[:a].should == 1
440
- b[:b].should == 2
441
- b[:c].should == 3
442
- b[:d].should be_nil
443
-
444
- @a.keys << :e
445
- @a.keys.should == ['a', 'b', 'c', :e]
446
- b.keys.should == @a.keys
447
- end
448
-
449
- specify "should provide #clone functionality" do
450
- b = @a.clone
451
- b.should == [1, 2, 3]
452
- b.keys.should == @a.keys
453
-
454
- b[:a].should == 1
455
- b[:b].should == 2
456
- b[:c].should == 3
457
- b[:d].should be_nil
458
-
459
- @a.keys << :e
460
- @a.keys.should == ['a', 'b', 'c', :e]
461
- b.keys.should_not == @a.keys
462
- end
463
-
464
- specify "should provide #merge functionality" do
465
- @a.merge(@a).to_hash.should == {:a => 1, :b => 2, :c => 3}
466
-
467
- @a.merge({:b => 22, :d => 4}).to_hash.should == {:a => 1, :b => 22, :c => 3, :d => 4}
468
-
469
- b = [1, 2, 3]
470
- b.keys = [:b, :c, :d]
471
- @a.merge(b).to_hash.should == {:a => 1, :b => 1, :c => 2, :d => 3}
472
-
473
- # call with a block. The block returns the old value passed to it
474
- @a.merge(b) {|k, o, n| o}.to_hash.should == {:a => 1, :b => 2, :c => 3, :d => 3}
475
- end
476
-
477
- specify "should provide #merge!/#update!/#update functionality" do
478
- @a.merge!(@a)
479
- @a.to_hash.should == {:a => 1, :b => 2, :c => 3}
480
-
481
- @a.update(:b => 22)
482
- @a.to_hash.should == {:a => 1, :b => 22, :c => 3}
483
-
484
- b = [1, 2, 3]
485
- b.keys = [:b, :c, :d]
486
- @a.update!(b)
487
- @a.to_hash.should == {:a => 1, :b => 1, :c => 2, :d => 3}
488
- end
489
- end
490
-
491
- context "Array.from_hash" do
492
- specify "should construct an array with keys from a hash" do
493
- h = {:x => 1, :y => 2, :z => 3}
494
- a = Array.from_hash(h)
495
- a.to_hash.should == h
496
- end
497
- end
498
-
499
- context "Sequel.use_array_tuples" do
500
- setup do
501
- @c = Class.new(Sequel::Dataset) do
502
- def fetch_rows(sql, &block)
503
- block[{:a => 1, :b => 2, :c => 3}]
504
- end
505
- end
506
-
507
- @ds = @c.new(nil).from(:items)
508
- end
509
-
510
- teardown do
511
- Sequel.use_hash_tuples
512
- end
513
-
514
- specify "should cause the dataset to return array tuples instead of hashes" do
515
- @ds.first.should == {:a => 1, :b => 2, :c => 3}
516
- Sequel.use_array_tuples
517
- a = @ds.first
518
- a.class.should == Array
519
- a.values.sort.should == [1, 2, 3]
520
- a.keys.map {|k| k.to_s}.sort.should == ['a', 'b', 'c']
521
- a[:a].should == 1
522
- a[:b].should == 2
523
- a[:c].should == 3
524
- a[:d].should == nil
525
-
526
- @ds.transform(:a => [proc {|v| v.to_s}, proc {|v| v.to_i}])
527
- a = @ds.first
528
- a[:a].should == '1'
529
-
530
- @ds.transform({})
531
- a = @ds.first
532
- a[:a].should == 1
533
-
534
- @ds.set_model(Hash)
535
- end
536
-
537
- specify "should work correctly with dataset with transforms" do
538
- @ds.first.should == {:a => 1, :b => 2, :c => 3}
539
- Sequel.use_array_tuples
540
-
541
- @ds.transform(:a => [proc {|x| x + 10}, proc {|x| x - 10}])
542
- a = @ds.first
543
- a.class.should == Array
544
- a[:a].should == 11
545
- a[:b].should == 2
546
- a[:c].should == 3
547
- a[:d].should == nil
548
-
549
- a = @ds.all[0]
550
- a.class.should == Array
551
- a[:a].should == 11
552
- a[:b].should == 2
553
- a[:c].should == 3
554
- a[:d].should == nil
555
-
556
- b = [12]; b.keys = [:a]
557
- @ds.insert_sql(b).should == "INSERT INTO items (a) VALUES (2)"
558
- end
559
-
560
- specify "should work correctly with dataset with model" do
561
- ccc = Class.new do
562
- attr_reader :values
563
- def initialize(v)
564
- @values = v
565
- end
566
- end
567
-
568
- @ds.first.should == {:a => 1, :b => 2, :c => 3}
569
- Sequel.use_array_tuples
570
-
571
- @ds.set_model(ccc)
572
- a = @ds.first
573
- a.class.should == ccc
574
- a.values.class.should == Array
575
- a.values[:a].should == 1
576
- a.values[:b].should == 2
577
- a.values[:c].should == 3
578
- a.values[:d].should == nil
579
-
580
- a = @ds.all[0]
581
- a.class.should == ccc
582
- a.values.class.should == Array
583
- a.values[:a].should == 1
584
- a.values[:b].should == 2
585
- a.values[:c].should == 3
586
- a.values[:d].should == nil
587
-
588
- @ds.each(:naked => true) do |a|
589
- a.class.should == Array
590
- a[:a].should == 1
591
- a[:b].should == 2
592
- a[:c].should == 3
593
- a[:d].should == nil
594
- end
595
- end
596
-
597
- specify "should work correctly with dataset with model and transform" do
598
- ccc = Class.new do
599
- attr_reader :values
600
- def initialize(v)
601
- @values = v
602
- end
603
- end
604
-
605
- @ds.first.should == {:a => 1, :b => 2, :c => 3}
606
- Sequel.use_array_tuples
607
-
608
- @ds.transform(:a => [proc {|x| x + 10}, proc {|x| x - 10}])
609
- @ds.set_model(ccc)
610
- a = @ds.first
611
- a.class.should == ccc
612
- a.values.class.should == Array
613
- a.values[:a].should == 11
614
- a.values[:b].should == 2
615
- a.values[:c].should == 3
616
- a.values[:d].should == nil
617
-
618
- a = @ds.all[0]
619
- a.class.should == ccc
620
- a.values.class.should == Array
621
- a.values[:a].should == 11
622
- a.values[:b].should == 2
623
- a.values[:c].should == 3
624
- a.values[:d].should == nil
625
-
626
- @ds.each(:naked => true) do |a|
627
- a.class.should == Array
628
- a[:a].should == 11
629
- a[:b].should == 2
630
- a[:c].should == 3
631
- a[:d].should == nil
632
- end
633
- end
634
-
635
- specify "should work correctly with denuded dataset" do
636
- ccc = Class.new do
637
- attr_reader :values
638
- def initialize(v)
639
- @values = v
640
- end
641
- end
642
-
643
- @ds.first.should == {:a => 1, :b => 2, :c => 3}
644
- Sequel.use_array_tuples
645
-
646
- @ds.set_model(ccc)
647
- @ds.set_model(nil)
648
-
649
- a = @ds.first
650
- a.class.should == Array
651
- a[:a].should == 1
652
- a[:b].should == 2
653
- a[:c].should == 3
654
- a[:d].should == nil
655
-
656
- a = @ds.all[0]
657
- a.class.should == Array
658
- a[:a].should == 1
659
- a[:b].should == 2
660
- a[:c].should == 3
661
- a[:d].should == nil
662
- end
663
-
664
- specify "should be reversible using Sequel.use_hash_tuples" do
665
- Sequel.use_array_tuples
666
- @ds.first.class.should == Array
667
-
668
- Sequel.use_hash_tuples
669
- @ds.first.should == {:a => 1, :b => 2, :c => 3}
670
- end
671
-
672
- specify "should apply and unapply correctly to dataset with array_tuples_fetch_rows" do
673
- @c.class_def(:fetch_rows) {'yo hash'}
674
- @c.class_def(:array_tuples_fetch_rows) {'yo array'}
675
- Sequel.use_array_tuples
676
-
677
- @ds.fetch_rows.should == 'yo array'
678
-
679
- Sequel.use_hash_tuples
680
- @ds.fetch_rows.should == 'yo hash'
681
- end
682
- end