sequel_model 0.5.0.2 → 3.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,48 +0,0 @@
1
- module Sequel
2
- class Model
3
- # Defines a table schema (see Schema::Generator for more information).
4
- #
5
- # This is only needed if you want to use the create_table or drop_table
6
- # methods.
7
- def self.set_schema(name = nil, &block)
8
- if name
9
- set_dataset(db[name])
10
- end
11
- @schema = Schema::Generator.new(db, &block)
12
- if @schema.primary_key_name
13
- set_primary_key @schema.primary_key_name
14
- end
15
- end
16
-
17
- # Returns table schema for direct descendant of Model.
18
- def self.schema
19
- @schema || ((superclass != Model) && (superclass.schema))
20
- end
21
-
22
- # Returns name of table.
23
- def self.table_name
24
- dataset.opts[:from].first
25
- end
26
-
27
- # Returns true if table exists, false otherwise.
28
- def self.table_exists?
29
- db.table_exists?(table_name)
30
- end
31
-
32
- # Creates table.
33
- def self.create_table
34
- db.create_table_sql_list(table_name, *schema.create_info).each {|s| db << s}
35
- end
36
-
37
- # Drops table.
38
- def self.drop_table
39
- db.execute db.drop_table_sql(table_name)
40
- end
41
-
42
- # Like create_table but invokes drop_table when table_exists? is true.
43
- def self.create_table!
44
- drop_table if table_exists?
45
- create_table
46
- end
47
- end
48
- end
@@ -1,15 +0,0 @@
1
- gem "assistance", ">= 0.1.2" # because we need Validations
2
-
3
- require "assistance"
4
-
5
- module Sequel
6
- class Model
7
- include Validation
8
-
9
- alias_method :save!, :save
10
- def save(*args)
11
- return false unless valid?
12
- save!(*args)
13
- end
14
- end
15
- end
@@ -1,627 +0,0 @@
1
- require File.join(File.dirname(__FILE__), "spec_helper")
2
-
3
- describe Sequel::Model, "associate" do
4
- it "should use explicit class if given a class, symbol, or string" do
5
- MODEL_DB.reset
6
- klass = Class.new(Sequel::Model(:nodes))
7
- class ParParent < Sequel::Model
8
- end
9
-
10
- klass.associate :many_to_one, :par_parent0, :class=>ParParent
11
- klass.associate :one_to_many, :par_parent1s, :class=>'ParParent'
12
- klass.associate :many_to_many, :par_parent2s, :class=>:ParParent
13
-
14
- klass.send(:associated_class, klass.association_reflection(:"par_parent0")).should == ParParent
15
- klass.send(:associated_class, klass.association_reflection(:"par_parent1s")).should == ParParent
16
- klass.send(:associated_class, klass.association_reflection(:"par_parent2s")).should == ParParent
17
- end
18
- end
19
-
20
- describe Sequel::Model, "many_to_one" do
21
-
22
- before(:each) do
23
- MODEL_DB.reset
24
-
25
- @c2 = Class.new(Sequel::Model(:nodes)) do
26
- def columns; [:id, :parent_id]; end
27
- end
28
-
29
- @dataset = @c2.dataset
30
- end
31
-
32
- it "should use implicit key if omitted" do
33
- @c2.many_to_one :parent, :class => @c2
34
-
35
- d = @c2.new(:id => 1, :parent_id => 234)
36
- p = d.parent
37
- p.class.should == @c2
38
- p.values.should == {:x => 1, :id => 1}
39
-
40
- MODEL_DB.sqls.should == ["SELECT * FROM nodes WHERE (id = 234) LIMIT 1"]
41
- end
42
-
43
- it "should use implicit class if omitted" do
44
- class ParParent < Sequel::Model
45
- end
46
-
47
- @c2.many_to_one :par_parent
48
-
49
- d = @c2.new(:id => 1, :par_parent_id => 234)
50
- p = d.par_parent
51
- p.class.should == ParParent
52
-
53
- MODEL_DB.sqls.should == ["SELECT * FROM par_parents WHERE (id = 234) LIMIT 1"]
54
- end
55
-
56
- it "should use explicit key if given" do
57
- @c2.many_to_one :parent, :class => @c2, :key => :blah
58
-
59
- d = @c2.new(:id => 1, :blah => 567)
60
- p = d.parent
61
- p.class.should == @c2
62
- p.values.should == {:x => 1, :id => 1}
63
-
64
- MODEL_DB.sqls.should == ["SELECT * FROM nodes WHERE (id = 567) LIMIT 1"]
65
- end
66
-
67
- it "should return nil if key value is nil" do
68
- @c2.many_to_one :parent, :class => @c2
69
-
70
- d = @c2.new(:id => 1)
71
- d.parent.should == nil
72
- end
73
-
74
- it "should define a setter method" do
75
- @c2.many_to_one :parent, :class => @c2
76
-
77
- d = @c2.new(:id => 1)
78
- d.parent = @c2.new(:id => 4321)
79
- d.values.should == {:id => 1, :parent_id => 4321}
80
-
81
- d.parent = nil
82
- d.values.should == {:id => 1, :parent_id => nil}
83
-
84
- e = @c2.new(:id => 6677)
85
- d.parent = e
86
- d.values.should == {:id => 1, :parent_id => 6677}
87
- end
88
-
89
- it "should not persist changes until saved" do
90
- @c2.many_to_one :parent, :class => @c2
91
-
92
- d = @c2.create(:id => 1)
93
- MODEL_DB.reset
94
- d.parent = @c2.new(:id => 345)
95
- MODEL_DB.sqls.should == []
96
- d.save_changes
97
- MODEL_DB.sqls.should == ['UPDATE nodes SET parent_id = 345 WHERE (id = 1)']
98
- end
99
-
100
- it "should set cached instance variable when accessed" do
101
- @c2.many_to_one :parent, :class => @c2
102
-
103
- d = @c2.create(:id => 1)
104
- MODEL_DB.reset
105
- d.parent_id = 234
106
- d.instance_variables.include?("@parent").should == false
107
- e = d.parent
108
- MODEL_DB.sqls.should == ["SELECT * FROM nodes WHERE (id = 234) LIMIT 1"]
109
- d.instance_variable_get("@parent").should == e
110
- end
111
-
112
- it "should set cached instance variable when assigned" do
113
- @c2.many_to_one :parent, :class => @c2
114
-
115
- d = @c2.create(:id => 1)
116
- MODEL_DB.reset
117
- d.instance_variables.include?("@parent").should == false
118
- d.parent = @c2.new(:id => 234)
119
- e = d.parent
120
- d.instance_variable_get("@parent").should == e
121
- MODEL_DB.sqls.should == []
122
- end
123
-
124
- it "should use cached instance variable if available" do
125
- @c2.many_to_one :parent, :class => @c2
126
-
127
- d = @c2.create(:id => 1, :parent_id => 234)
128
- MODEL_DB.reset
129
- d.instance_variable_set(:@parent, 42)
130
- d.parent.should == 42
131
- MODEL_DB.sqls.should == []
132
- end
133
-
134
- it "should not use cached instance variable if asked to reload" do
135
- @c2.many_to_one :parent, :class => @c2
136
-
137
- d = @c2.create(:id => 1)
138
- MODEL_DB.reset
139
- d.parent_id = 234
140
- d.instance_variable_set(:@parent, 42)
141
- d.parent(true).should_not == 42
142
- MODEL_DB.sqls.should == ["SELECT * FROM nodes WHERE (id = 234) LIMIT 1"]
143
- end
144
-
145
- it "should have belongs_to alias" do
146
- @c2.belongs_to :parent, :class => @c2
147
-
148
- d = @c2.create(:id => 1)
149
- MODEL_DB.reset
150
- d.parent_id = 234
151
- d.instance_variables.include?("@parent").should == false
152
- e = d.parent
153
- MODEL_DB.sqls.should == ["SELECT * FROM nodes WHERE (id = 234) LIMIT 1"]
154
- d.instance_variable_get("@parent").should == e
155
- end
156
- end
157
-
158
- describe Sequel::Model, "one_to_many" do
159
-
160
- before(:each) do
161
- MODEL_DB.reset
162
-
163
- @c1 = Class.new(Sequel::Model(:attributes)) do
164
- def columns; [:id, :node_id]; end
165
- end
166
-
167
- @c2 = Class.new(Sequel::Model(:nodes)) do
168
- attr_accessor :xxx
169
-
170
- def self.name; 'Node'; end
171
- def self.to_s; 'Node'; end
172
- end
173
- @dataset = @c2.dataset
174
-
175
- @c2.dataset.extend(Module.new {
176
- def fetch_rows(sql)
177
- @db << sql
178
- yield Hash.new
179
- end
180
- })
181
-
182
- @c1.dataset.extend(Module.new {
183
- def fetch_rows(sql)
184
- @db << sql
185
- yield Hash.new
186
- end
187
- })
188
- end
189
-
190
- it "should use implicit key if omitted" do
191
- @c2.one_to_many :attributes, :class => @c1
192
-
193
- n = @c2.new(:id => 1234)
194
- a = n.attributes
195
- a.should be_a_kind_of(Sequel::Dataset)
196
- a.sql.should == 'SELECT * FROM attributes WHERE (node_id = 1234)'
197
- end
198
-
199
- it "should use implicit class if omitted" do
200
- class HistoricalValue < Sequel::Model
201
- end
202
-
203
- @c2.one_to_many :historical_values
204
-
205
- n = @c2.new(:id => 1234)
206
- v = n.historical_values
207
- v.should be_a_kind_of(Sequel::Dataset)
208
- v.sql.should == 'SELECT * FROM historical_values WHERE (node_id = 1234)'
209
- v.model_classes.should == {nil => HistoricalValue}
210
- end
211
-
212
- it "should use explicit key if given" do
213
- @c2.one_to_many :attributes, :class => @c1, :key => :nodeid
214
-
215
- n = @c2.new(:id => 1234)
216
- a = n.attributes
217
- a.should be_a_kind_of(Sequel::Dataset)
218
- a.sql.should == 'SELECT * FROM attributes WHERE (nodeid = 1234)'
219
- end
220
-
221
- it "should define an add_ method" do
222
- @c2.one_to_many :attributes, :class => @c1
223
-
224
- n = @c2.new(:id => 1234)
225
- a = @c1.new(:id => 2345)
226
- a.save!
227
- MODEL_DB.reset
228
- a.should == n.add_attribute(a)
229
- MODEL_DB.sqls.should == ['UPDATE attributes SET node_id = 1234 WHERE (id = 2345)']
230
- end
231
-
232
- it "should define a remove_ method" do
233
- @c2.one_to_many :attributes, :class => @c1
234
-
235
- n = @c2.new(:id => 1234)
236
- a = @c1.new(:id => 2345)
237
- a.save!
238
- MODEL_DB.reset
239
- a.should == n.remove_attribute(a)
240
- MODEL_DB.sqls.should == ['UPDATE attributes SET node_id = NULL WHERE (id = 2345)']
241
- end
242
-
243
- it "should accept a block" do
244
- @c2.one_to_many :attributes, :class => @c1 do |ds|
245
- ds.filter(:xxx => @xxx)
246
- end
247
-
248
- n = @c2.new(:id => 1234)
249
- n.xxx = 'blah'
250
- n.attributes.sql.should == "SELECT * FROM attributes WHERE (node_id = 1234) AND (xxx = 'blah')"
251
- end
252
-
253
- it "should support an order option" do
254
- @c2.one_to_many :attributes, :class => @c1, :order => :kind
255
-
256
- n = @c2.new(:id => 1234)
257
- n.attributes.sql.should == "SELECT * FROM attributes WHERE (node_id = 1234) ORDER BY kind"
258
- end
259
-
260
- it "should support order option with block" do
261
- @c2.one_to_many :attributes, :class => @c1, :order => :kind do |ds|
262
- ds.filter(:xxx => @xxx)
263
- end
264
-
265
- n = @c2.new(:id => 1234)
266
- n.attributes.sql.should == "SELECT * FROM attributes WHERE (node_id = 1234) AND (xxx IS NULL) ORDER BY kind"
267
- end
268
-
269
- it "should support :cache option for returning array with all members of the association" do
270
- @c2.one_to_many :attributes, :class => @c1, :cache => true
271
-
272
- n = @c2.new(:id => 1234)
273
- atts = n.attributes
274
- atts.should be_a_kind_of(Array)
275
- atts.size.should == 1
276
- atts.first.should be_a_kind_of(@c1)
277
- atts.first.values.should == {}
278
-
279
- MODEL_DB.sqls.should == ['SELECT * FROM attributes WHERE (node_id = 1234)']
280
- end
281
-
282
- it "should support :cache option with a block" do
283
- @c2.one_to_many :attributes, :class => @c1, :cache => true do |ds|
284
- ds.filter(:xxx => @xxx)
285
- end
286
-
287
- n = @c2.new(:id => 1234)
288
- atts = n.attributes
289
- atts.should be_a_kind_of(Array)
290
- atts.size.should == 1
291
- atts.first.should be_a_kind_of(@c1)
292
- atts.first.values.should == {}
293
-
294
- MODEL_DB.sqls.should == ['SELECT * FROM attributes WHERE (node_id = 1234) AND (xxx IS NULL)']
295
- end
296
-
297
- it "should set cached instance variable when accessed" do
298
- @c2.one_to_many :attributes, :class => @c1, :cache => true
299
-
300
- n = @c2.new(:id => 1234)
301
- MODEL_DB.reset
302
- n.instance_variables.include?("@attributes").should == false
303
- atts = n.attributes
304
- atts.should == n.instance_variable_get("@attributes")
305
- MODEL_DB.sqls.should == ['SELECT * FROM attributes WHERE (node_id = 1234)']
306
- end
307
-
308
- it "should use cached instance variable if available" do
309
- @c2.one_to_many :attributes, :class => @c1, :cache => true
310
-
311
- n = @c2.new(:id => 1234)
312
- MODEL_DB.reset
313
- n.instance_variable_set(:@attributes, 42)
314
- n.attributes.should == 42
315
- MODEL_DB.sqls.should == []
316
- end
317
-
318
- it "should not use cached instance variable if asked to reload" do
319
- @c2.one_to_many :attributes, :class => @c1, :cache => true
320
-
321
- n = @c2.new(:id => 1234)
322
- MODEL_DB.reset
323
- n.instance_variable_set(:@attributes, 42)
324
- n.attributes(true).should_not == 42
325
- MODEL_DB.sqls.should == ['SELECT * FROM attributes WHERE (node_id = 1234)']
326
- end
327
-
328
- it "should add item to cached instance variable if it exists when calling add_" do
329
- @c2.one_to_many :attributes, :class => @c1, :cache => true
330
-
331
- n = @c2.new(:id => 1234)
332
- att = @c1.new(:id => 345)
333
- MODEL_DB.reset
334
- a = []
335
- n.instance_variable_set(:@attributes, a)
336
- n.add_attribute(att)
337
- a.should == [att]
338
- end
339
-
340
- it "should remove item from cached instance variable if it exists when calling remove_" do
341
- @c2.one_to_many :attributes, :class => @c1, :cache => true
342
-
343
- n = @c2.new(:id => 1234)
344
- att = @c1.new(:id => 345)
345
- MODEL_DB.reset
346
- a = [att]
347
- n.instance_variable_set(:@attributes, a)
348
- n.remove_attribute(att)
349
- a.should == []
350
- end
351
-
352
- it "should have has_many alias" do
353
- @c2.has_many :attributes, :class => @c1, :cache => true
354
-
355
- n = @c2.new(:id => 1234)
356
- atts = n.attributes
357
- atts.should be_a_kind_of(Array)
358
- atts.size.should == 1
359
- atts.first.should be_a_kind_of(@c1)
360
- atts.first.values.should == {}
361
-
362
- MODEL_DB.sqls.should == ['SELECT * FROM attributes WHERE (node_id = 1234)']
363
- end
364
- end
365
-
366
- describe Sequel::Model, "many_to_many" do
367
-
368
- before(:each) do
369
- MODEL_DB.reset
370
-
371
- @c1 = Class.new(Sequel::Model(:attributes)) do
372
- def self.name; 'Attribute'; end
373
- def self.to_s; 'Attribute'; end
374
- end
375
-
376
- @c2 = Class.new(Sequel::Model(:nodes)) do
377
- attr_accessor :xxx
378
-
379
- def self.name; 'Node'; end
380
- def self.to_s; 'Node'; end
381
- end
382
- @dataset = @c2.dataset
383
-
384
- [@c1, @c2].each do |c|
385
- c.dataset.extend(Module.new {
386
- def fetch_rows(sql)
387
- @db << sql
388
- yield Hash.new
389
- end
390
- })
391
- end
392
- end
393
-
394
- it "should use implicit key values and join table if omitted" do
395
- @c2.many_to_many :attributes, :class => @c1
396
-
397
- n = @c2.new(:id => 1234)
398
- a = n.attributes
399
- a.should be_a_kind_of(Sequel::Dataset)
400
- ['SELECT * FROM attributes INNER JOIN attributes_nodes ON (attributes_nodes.attribute_id = attributes.id) AND (attributes_nodes.node_id = 1234)',
401
- 'SELECT * FROM attributes INNER JOIN attributes_nodes ON (attributes_nodes.node_id = 1234) AND (attributes_nodes.attribute_id = attributes.id)'
402
- ].should(include(a.sql))
403
- end
404
-
405
- it "should use implicit class if omitted" do
406
- class Tag < Sequel::Model
407
- end
408
-
409
- @c2.many_to_many :tags
410
-
411
- n = @c2.new(:id => 1234)
412
- a = n.tags
413
- a.should be_a_kind_of(Sequel::Dataset)
414
- ['SELECT * FROM tags INNER JOIN nodes_tags ON (nodes_tags.tag_id = tags.id) AND (nodes_tags.node_id = 1234)',
415
- 'SELECT * FROM tags INNER JOIN nodes_tags ON (nodes_tags.node_id = 1234) AND (nodes_tags.tag_id = tags.id)'
416
- ].should(include(a.sql))
417
- end
418
-
419
- it "should use explicit key values and join table if given" do
420
- @c2.many_to_many :attributes, :class => @c1, :left_key => :nodeid, :right_key => :attributeid, :join_table => :attribute2node
421
-
422
- n = @c2.new(:id => 1234)
423
- a = n.attributes
424
- a.should be_a_kind_of(Sequel::Dataset)
425
- ['SELECT * FROM attributes INNER JOIN attribute2node ON (attribute2node.nodeid = 1234) AND (attribute2node.attributeid = attributes.id)',
426
- 'SELECT * FROM attributes INNER JOIN attribute2node ON (attribute2node.attributeid = attributes.id) AND (attribute2node.nodeid = 1234)'
427
- ].should(include(a.sql))
428
- end
429
-
430
- it "should support order option" do
431
- @c2.many_to_many :attributes, :class => @c1, :order => :blah
432
-
433
- n = @c2.new(:id => 1234)
434
- a = n.attributes
435
- a.should be_a_kind_of(Sequel::Dataset)
436
- ['SELECT * FROM attributes INNER JOIN attributes_nodes ON (attributes_nodes.attribute_id = attributes.id) AND (attributes_nodes.node_id = 1234) ORDER BY blah',
437
- 'SELECT * FROM attributes INNER JOIN attributes_nodes ON (attributes_nodes.node_id = 1234) AND (attributes_nodes.attribute_id = attributes.id) ORDER BY blah'
438
- ].should(include(a.sql))
439
- end
440
-
441
- it "should support optional dataset block" do
442
- @c2.many_to_many :attributes, :class => @c1 do |ds|
443
- ds.filter(:xxx => @xxx)
444
- end
445
-
446
- n = @c2.new(:id => 1234)
447
- n.xxx = 555
448
- a = n.attributes
449
- a.should be_a_kind_of(Sequel::Dataset)
450
- ['SELECT * FROM attributes INNER JOIN attributes_nodes ON (attributes_nodes.attribute_id = attributes.id) AND (attributes_nodes.node_id = 1234) WHERE (xxx = 555)',
451
- 'SELECT * FROM attributes INNER JOIN attributes_nodes ON (attributes_nodes.node_id = 1234) AND (attributes_nodes.attribute_id = attributes.id) WHERE (xxx = 555)'
452
- ].should(include(a.sql))
453
- end
454
-
455
- it "should define an add_ method" do
456
- @c2.many_to_many :attributes, :class => @c1
457
-
458
- n = @c2.new(:id => 1234)
459
- a = @c1.new(:id => 2345)
460
- a.should == n.add_attribute(a)
461
- ['INSERT INTO attributes_nodes (node_id, attribute_id) VALUES (1234, 2345)',
462
- 'INSERT INTO attributes_nodes (attribute_id, node_id) VALUES (2345, 1234)'
463
- ].should(include(MODEL_DB.sqls.first))
464
- end
465
-
466
- it "should define a remove_ method" do
467
- @c2.many_to_many :attributes, :class => @c1
468
-
469
- n = @c2.new(:id => 1234)
470
- a = @c1.new(:id => 2345)
471
- a.should == n.remove_attribute(a)
472
- ['DELETE FROM attributes_nodes WHERE (node_id = 1234) AND (attribute_id = 2345)',
473
- 'DELETE FROM attributes_nodes WHERE (attribute_id = 2345) AND (node_id = 1234)'
474
- ].should(include(MODEL_DB.sqls.first))
475
- end
476
-
477
- it "should provide an array with all members of the association (if cache option is specified)" do
478
- @c2.many_to_many :attributes, :class => @c1, :cache => true
479
-
480
- n = @c2.new(:id => 1234)
481
- atts = n.attributes
482
- atts.should be_a_kind_of(Array)
483
- atts.size.should == 1
484
- atts.first.should be_a_kind_of(@c1)
485
-
486
- ['SELECT * FROM attributes INNER JOIN attributes_nodes ON (attributes_nodes.attribute_id = attributes.id) AND (attributes_nodes.node_id = 1234)',
487
- 'SELECT * FROM attributes INNER JOIN attributes_nodes ON (attributes_nodes.node_id = 1234) AND (attributes_nodes.attribute_id = attributes.id)'
488
- ].should(include(MODEL_DB.sqls.first))
489
- end
490
-
491
- it "should set cached instance variable when accessed" do
492
- @c2.many_to_many :attributes, :class => @c1, :cache => true
493
-
494
- n = @c2.new(:id => 1234)
495
- MODEL_DB.reset
496
- n.instance_variables.include?("@attributes").should == false
497
- atts = n.attributes
498
- atts.should == n.instance_variable_get("@attributes")
499
- MODEL_DB.sqls.length.should == 1
500
- end
501
-
502
- it "should use cached instance variable if available" do
503
- @c2.many_to_many :attributes, :class => @c1, :cache => true
504
-
505
- n = @c2.new(:id => 1234)
506
- MODEL_DB.reset
507
- n.instance_variable_set(:@attributes, 42)
508
- n.attributes.should == 42
509
- MODEL_DB.sqls.should == []
510
- end
511
-
512
- it "should not use cached instance variable if asked to reload" do
513
- @c2.many_to_many :attributes, :class => @c1, :cache => true
514
-
515
- n = @c2.new(:id => 1234)
516
- MODEL_DB.reset
517
- n.instance_variable_set(:@attributes, 42)
518
- n.attributes(true).should_not == 42
519
- MODEL_DB.sqls.length.should == 1
520
- end
521
-
522
- it "should add item to cached instance variable if it exists when calling add_" do
523
- @c2.many_to_many :attributes, :class => @c1, :cache => true
524
-
525
- n = @c2.new(:id => 1234)
526
- att = @c1.new(:id => 345)
527
- MODEL_DB.reset
528
- a = []
529
- n.instance_variable_set(:@attributes, a)
530
- n.add_attribute(att)
531
- a.should == [att]
532
- end
533
-
534
- it "should remove item from cached instance variable if it exists when calling remove_" do
535
- @c2.many_to_many :attributes, :class => @c1, :cache => true
536
-
537
- n = @c2.new(:id => 1234)
538
- att = @c1.new(:id => 345)
539
- MODEL_DB.reset
540
- a = [att]
541
- n.instance_variable_set(:@attributes, a)
542
- n.remove_attribute(att)
543
- a.should == []
544
- end
545
-
546
- it "should have has_and_belongs_to_many alias" do
547
- @c2.has_and_belongs_to_many :attributes, :class => @c1
548
-
549
- n = @c2.new(:id => 1234)
550
- a = n.attributes
551
- a.should be_a_kind_of(Sequel::Dataset)
552
- ['SELECT * FROM attributes INNER JOIN attributes_nodes ON (attributes_nodes.attribute_id = attributes.id) AND (attributes_nodes.node_id = 1234)',
553
- 'SELECT * FROM attributes INNER JOIN attributes_nodes ON (attributes_nodes.node_id = 1234) AND (attributes_nodes.attribute_id = attributes.id)'
554
- ].should(include(a.sql))
555
- end
556
-
557
- end
558
-
559
- describe Sequel::Model, "all_association_reflections" do
560
- before(:each) do
561
- MODEL_DB.reset
562
- @c1 = Class.new(Sequel::Model(:nodes)) do
563
- def self.name; 'Node'; end
564
- def self.to_s; 'Node'; end
565
- end
566
- end
567
-
568
- it "should include all association reflection hashes" do
569
- @c1.all_association_reflections.should == []
570
- @c1.associate :many_to_one, :parent, :class => @c1
571
- @c1.all_association_reflections.should == [{
572
- :type => :many_to_one, :name => :parent, :class_name => 'Node',
573
- :class => @c1, :key => :parent_id, :block => nil
574
- }]
575
- @c1.associate :one_to_many, :children, :class => @c1
576
- @c1.all_association_reflections.sort_by{|x|x[:name].to_s}.should == [{
577
- :type => :one_to_many, :name => :children, :class_name => 'Node',
578
- :class => @c1, :key => :node_id, :block => nil}, {
579
- :type => :many_to_one, :name => :parent, :class_name => 'Node',
580
- :class => @c1, :key => :parent_id, :block => nil}]
581
- end
582
- end
583
-
584
- describe Sequel::Model, "association_reflection" do
585
- before(:each) do
586
- MODEL_DB.reset
587
- @c1 = Class.new(Sequel::Model(:nodes)) do
588
- def self.name; 'Node'; end
589
- def self.to_s; 'Node'; end
590
- end
591
- end
592
-
593
- it "should return nil for nonexistent association" do
594
- @c1.association_reflection(:blah).should == nil
595
- end
596
-
597
- it "should return association reflection hash if association exists" do
598
- @c1.associate :many_to_one, :parent, :class => @c1
599
- @c1.association_reflection(:parent).should == {
600
- :type => :many_to_one, :name => :parent, :class_name => 'Node',
601
- :class => @c1, :key => :parent_id, :block => nil
602
- }
603
- @c1.associate :one_to_many, :children, :class => @c1
604
- @c1.association_reflection(:children).should == {
605
- :type => :one_to_many, :name => :children, :class_name => 'Node',
606
- :class => @c1, :key => :node_id, :block => nil
607
- }
608
- end
609
- end
610
-
611
- describe Sequel::Model, "associations" do
612
- before(:each) do
613
- MODEL_DB.reset
614
- @c1 = Class.new(Sequel::Model(:nodes)) do
615
- def self.name; 'Node'; end
616
- def self.to_s; 'Node'; end
617
- end
618
- end
619
-
620
- it "should include all association names" do
621
- @c1.associations.should == []
622
- @c1.associate :many_to_one, :parent, :class => @c1
623
- @c1.associations.should == [:parent]
624
- @c1.associate :one_to_many, :children, :class => @c1
625
- @c1.associations.sort_by{|x|x.to_s}.should == [:children, :parent]
626
- end
627
- end