sequel_model 0.5.0.2 → 3.8.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.
- metadata +22 -69
- data/CHANGELOG +0 -111
- data/COPYING +0 -18
- data/README +0 -251
- data/Rakefile +0 -152
- data/lib/sequel_model.rb +0 -323
- data/lib/sequel_model/associations.rb +0 -325
- data/lib/sequel_model/base.rb +0 -119
- data/lib/sequel_model/caching.rb +0 -42
- data/lib/sequel_model/hooks.rb +0 -55
- data/lib/sequel_model/plugins.rb +0 -47
- data/lib/sequel_model/pretty_table.rb +0 -73
- data/lib/sequel_model/record.rb +0 -330
- data/lib/sequel_model/schema.rb +0 -48
- data/lib/sequel_model/validations.rb +0 -15
- data/spec/associations_spec.rb +0 -627
- data/spec/base_spec.rb +0 -239
- data/spec/caching_spec.rb +0 -150
- data/spec/deprecated_relations_spec.rb +0 -153
- data/spec/hooks_spec.rb +0 -269
- data/spec/model_spec.rb +0 -543
- data/spec/plugins_spec.rb +0 -74
- data/spec/rcov.opts +0 -4
- data/spec/record_spec.rb +0 -575
- data/spec/schema_spec.rb +0 -69
- data/spec/spec.opts +0 -5
- data/spec/spec_helper.rb +0 -43
- data/spec/validations_spec.rb +0 -246
data/spec/base_spec.rb
DELETED
@@ -1,239 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
-
|
3
|
-
describe "Model attribute setters" do
|
4
|
-
|
5
|
-
before(:each) do
|
6
|
-
MODEL_DB.reset
|
7
|
-
|
8
|
-
@c = Class.new(Sequel::Model(:items)) do
|
9
|
-
def columns
|
10
|
-
[:id, :x, :y]
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
it "should mark the column value as changed" do
|
16
|
-
o = @c.new
|
17
|
-
o.changed_columns.should == []
|
18
|
-
|
19
|
-
o.x = 2
|
20
|
-
o.changed_columns.should == [:x]
|
21
|
-
|
22
|
-
o.y = 3
|
23
|
-
o.changed_columns.should == [:x, :y]
|
24
|
-
|
25
|
-
o.changed_columns.clear
|
26
|
-
|
27
|
-
o[:x] = 2
|
28
|
-
o.changed_columns.should == [:x]
|
29
|
-
|
30
|
-
o[:y] = 3
|
31
|
-
o.changed_columns.should == [:x, :y]
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
describe "Model#serialize" do
|
37
|
-
|
38
|
-
before(:each) do
|
39
|
-
MODEL_DB.reset
|
40
|
-
end
|
41
|
-
|
42
|
-
it "should translate values to YAML when creating records" do
|
43
|
-
@c = Class.new(Sequel::Model(:items)) do
|
44
|
-
no_primary_key
|
45
|
-
serialize :abc
|
46
|
-
end
|
47
|
-
|
48
|
-
@c.create(:abc => 1)
|
49
|
-
@c.create(:abc => "hello")
|
50
|
-
|
51
|
-
MODEL_DB.sqls.should == [ \
|
52
|
-
"INSERT INTO items (abc) VALUES ('--- 1\n')", \
|
53
|
-
"INSERT INTO items (abc) VALUES ('--- hello\n')", \
|
54
|
-
]
|
55
|
-
end
|
56
|
-
|
57
|
-
it "should support calling after the class is defined" do
|
58
|
-
@c = Class.new(Sequel::Model(:items)) do
|
59
|
-
no_primary_key
|
60
|
-
end
|
61
|
-
|
62
|
-
@c.serialize :def
|
63
|
-
|
64
|
-
@c.create(:def => 1)
|
65
|
-
@c.create(:def => "hello")
|
66
|
-
|
67
|
-
MODEL_DB.sqls.should == [ \
|
68
|
-
"INSERT INTO items (def) VALUES ('--- 1\n')", \
|
69
|
-
"INSERT INTO items (def) VALUES ('--- hello\n')", \
|
70
|
-
]
|
71
|
-
end
|
72
|
-
|
73
|
-
it "should support using the Marshal format" do
|
74
|
-
@c = Class.new(Sequel::Model(:items)) do
|
75
|
-
no_primary_key
|
76
|
-
serialize :abc, :format => :marshal
|
77
|
-
end
|
78
|
-
|
79
|
-
@c.create(:abc => 1)
|
80
|
-
@c.create(:abc => "hello")
|
81
|
-
|
82
|
-
MODEL_DB.sqls.should == [ \
|
83
|
-
"INSERT INTO items (abc) VALUES ('BAhpBg==\n')", \
|
84
|
-
"INSERT INTO items (abc) VALUES ('BAgiCmhlbGxv\n')", \
|
85
|
-
]
|
86
|
-
end
|
87
|
-
|
88
|
-
it "should translate values to and from YAML using accessor methods" do
|
89
|
-
@c = Class.new(Sequel::Model(:items)) do
|
90
|
-
serialize :abc, :def
|
91
|
-
end
|
92
|
-
|
93
|
-
ds = @c.dataset
|
94
|
-
ds.extend(Module.new {
|
95
|
-
attr_accessor :raw
|
96
|
-
|
97
|
-
def fetch_rows(sql, &block)
|
98
|
-
block.call(@raw)
|
99
|
-
end
|
100
|
-
|
101
|
-
@@sqls = nil
|
102
|
-
|
103
|
-
def insert(*args)
|
104
|
-
@@sqls = insert_sql(*args)
|
105
|
-
end
|
106
|
-
|
107
|
-
def update(*args)
|
108
|
-
@@sqls = update_sql(*args)
|
109
|
-
end
|
110
|
-
|
111
|
-
def sqls
|
112
|
-
@@sqls
|
113
|
-
end
|
114
|
-
|
115
|
-
def columns
|
116
|
-
[:id, :abc, :def]
|
117
|
-
end
|
118
|
-
}
|
119
|
-
)
|
120
|
-
|
121
|
-
ds.raw = {:id => 1, :abc => "--- 1\n", :def => "--- hello\n"}
|
122
|
-
o = @c.first
|
123
|
-
o.id.should == 1
|
124
|
-
o.abc.should == 1
|
125
|
-
o.def.should == "hello"
|
126
|
-
|
127
|
-
o.set(:abc => 23)
|
128
|
-
ds.sqls.should == "UPDATE items SET abc = '#{23.to_yaml}' WHERE (id = 1)"
|
129
|
-
|
130
|
-
ds.raw = {:id => 1, :abc => "--- 1\n", :def => "--- hello\n"}
|
131
|
-
o = @c.create(:abc => [1, 2, 3])
|
132
|
-
ds.sqls.should == "INSERT INTO items (abc) VALUES ('#{[1, 2, 3].to_yaml}')"
|
133
|
-
end
|
134
|
-
|
135
|
-
end
|
136
|
-
|
137
|
-
describe Sequel::Model, "super_dataset" do
|
138
|
-
setup do
|
139
|
-
MODEL_DB.reset
|
140
|
-
class SubClass < Sequel::Model(:items) ; end
|
141
|
-
end
|
142
|
-
|
143
|
-
it "should call the superclass's dataset" do
|
144
|
-
SubClass.should_receive(:superclass).exactly(3).times.and_return(Sequel::Model(:items))
|
145
|
-
Sequel::Model(:items).should_receive(:dataset)
|
146
|
-
SubClass.super_dataset
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
describe Sequel::Model, "dataset" do
|
151
|
-
setup do
|
152
|
-
@a = Class.new(Sequel::Model(:items))
|
153
|
-
@b = Class.new(Sequel::Model)
|
154
|
-
|
155
|
-
class Elephant < Sequel::Model(:ele1)
|
156
|
-
end
|
157
|
-
|
158
|
-
class Maggot < Sequel::Model
|
159
|
-
end
|
160
|
-
|
161
|
-
class ShoeSize < Sequel::Model
|
162
|
-
end
|
163
|
-
|
164
|
-
class BootSize < ShoeSize
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
specify "should default to the plural of the class name" do
|
169
|
-
Maggot.dataset.sql.should == 'SELECT * FROM maggots'
|
170
|
-
ShoeSize.dataset.sql.should == 'SELECT * FROM shoe_sizes'
|
171
|
-
end
|
172
|
-
|
173
|
-
specify "should return the dataset for the superclass if available" do
|
174
|
-
BootSize.dataset.sql.should == 'SELECT * FROM shoe_sizes'
|
175
|
-
end
|
176
|
-
|
177
|
-
specify "should return the correct dataset if set explicitly" do
|
178
|
-
Elephant.dataset.sql.should == 'SELECT * FROM ele1'
|
179
|
-
@a.dataset.sql.should == 'SELECT * FROM items'
|
180
|
-
end
|
181
|
-
|
182
|
-
specify "should raise if no dataset is explicitly set and the class is anonymous" do
|
183
|
-
proc {@b.dataset}.should raise_error(Sequel::Error)
|
184
|
-
end
|
185
|
-
|
186
|
-
specify "should disregard namespaces for the table name" do
|
187
|
-
module BlahBlah
|
188
|
-
class MwaHaHa < Sequel::Model
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
BlahBlah::MwaHaHa.dataset.sql.should == 'SELECT * FROM mwa_ha_has'
|
193
|
-
end
|
194
|
-
end
|
195
|
-
|
196
|
-
describe "A model class with implicit table name" do
|
197
|
-
setup do
|
198
|
-
class Donkey < Sequel::Model
|
199
|
-
end
|
200
|
-
end
|
201
|
-
|
202
|
-
specify "should have a dataset associated with the model class" do
|
203
|
-
Donkey.dataset.model_classes.should == {nil => Donkey}
|
204
|
-
end
|
205
|
-
end
|
206
|
-
|
207
|
-
describe "A model inheriting from a model" do
|
208
|
-
setup do
|
209
|
-
class Feline < Sequel::Model
|
210
|
-
end
|
211
|
-
|
212
|
-
class Leopard < Feline
|
213
|
-
end
|
214
|
-
end
|
215
|
-
|
216
|
-
specify "should have a dataset associated with itself" do
|
217
|
-
Feline.dataset.model_classes.should == {nil => Feline}
|
218
|
-
Leopard.dataset.model_classes.should == {nil => Leopard}
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|
222
|
-
describe "Model.db=" do
|
223
|
-
setup do
|
224
|
-
$db1 = Sequel::Database.new
|
225
|
-
$db2 = Sequel::Database.new
|
226
|
-
|
227
|
-
class BlueBlue < Sequel::Model
|
228
|
-
set_dataset $db1[:blue]
|
229
|
-
end
|
230
|
-
end
|
231
|
-
|
232
|
-
specify "should affect the underlying dataset" do
|
233
|
-
BlueBlue.db = $db2
|
234
|
-
|
235
|
-
BlueBlue.dataset.db.should === $db2
|
236
|
-
BlueBlue.dataset.db.should_not === $db1
|
237
|
-
end
|
238
|
-
end
|
239
|
-
|
data/spec/caching_spec.rb
DELETED
@@ -1,150 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
-
|
3
|
-
describe Sequel::Model, "caching" do
|
4
|
-
|
5
|
-
before(:each) do
|
6
|
-
MODEL_DB.reset
|
7
|
-
|
8
|
-
@cache_class = Class.new(Hash) do
|
9
|
-
attr_accessor :ttl
|
10
|
-
def set(k, v, ttl); self[k] = v; @ttl = ttl; end
|
11
|
-
def get(k); self[k]; end
|
12
|
-
end
|
13
|
-
cache = @cache_class.new
|
14
|
-
@cache = cache
|
15
|
-
|
16
|
-
@c = Class.new(Sequel::Model(:items)) do
|
17
|
-
set_cache cache
|
18
|
-
|
19
|
-
def self.columns
|
20
|
-
[:name, :id]
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
$cache_dataset_row = {:name => 'sharon', :id => 1}
|
25
|
-
@dataset = @c.dataset
|
26
|
-
$sqls = []
|
27
|
-
@dataset.extend(Module.new {
|
28
|
-
def fetch_rows(sql)
|
29
|
-
$sqls << sql
|
30
|
-
yield $cache_dataset_row
|
31
|
-
end
|
32
|
-
|
33
|
-
def update(values)
|
34
|
-
$sqls << update_sql(values)
|
35
|
-
$cache_dataset_row.merge!(values)
|
36
|
-
end
|
37
|
-
|
38
|
-
def delete
|
39
|
-
$sqls << delete_sql
|
40
|
-
end
|
41
|
-
})
|
42
|
-
end
|
43
|
-
|
44
|
-
it "should set the model's cache store" do
|
45
|
-
@c.cache_store.should be(@cache)
|
46
|
-
end
|
47
|
-
|
48
|
-
it "should have a default ttl of 3600" do
|
49
|
-
@c.cache_ttl.should == 3600
|
50
|
-
end
|
51
|
-
|
52
|
-
it "should take a ttl option" do
|
53
|
-
@c.set_cache @cache, :ttl => 1234
|
54
|
-
@c.cache_ttl.should == 1234
|
55
|
-
end
|
56
|
-
|
57
|
-
it "should offer a set_cache_ttl method for setting the ttl" do
|
58
|
-
@c.cache_ttl.should == 3600
|
59
|
-
@c.set_cache_ttl 1234
|
60
|
-
@c.cache_ttl.should == 1234
|
61
|
-
end
|
62
|
-
|
63
|
-
it "should generate a cache key appropriate to the class" do
|
64
|
-
m = @c.new
|
65
|
-
m.values[:id] = 1
|
66
|
-
m.cache_key.should == "#{m.class}:1"
|
67
|
-
|
68
|
-
# custom primary key
|
69
|
-
@c.set_primary_key :ttt
|
70
|
-
m = @c.new
|
71
|
-
m.values[:ttt] = 333
|
72
|
-
m.cache_key.should == "#{m.class}:333"
|
73
|
-
|
74
|
-
# composite primary key
|
75
|
-
@c.set_primary_key [:a, :b, :c]
|
76
|
-
m = @c.new
|
77
|
-
m.values[:a] = 123
|
78
|
-
m.values[:c] = 456
|
79
|
-
m.values[:b] = 789
|
80
|
-
m.cache_key.should == "#{m.class}:123,789,456"
|
81
|
-
end
|
82
|
-
|
83
|
-
it "should raise error if attempting to generate cache_key and primary key value is null" do
|
84
|
-
m = @c.new
|
85
|
-
proc {m.cache_key}.should raise_error(Sequel::Error)
|
86
|
-
|
87
|
-
m.values[:id] = 1
|
88
|
-
proc {m.cache_key}.should_not raise_error(Sequel::Error)
|
89
|
-
end
|
90
|
-
|
91
|
-
it "should set the cache when reading from the database" do
|
92
|
-
$sqls.should == []
|
93
|
-
@cache.should be_empty
|
94
|
-
|
95
|
-
m = @c[1]
|
96
|
-
$sqls.should == ['SELECT * FROM items WHERE (id = 1) LIMIT 1']
|
97
|
-
m.values.should == $cache_dataset_row
|
98
|
-
@cache[m.cache_key].should == m
|
99
|
-
|
100
|
-
# read from cache
|
101
|
-
m2 = @c[1]
|
102
|
-
$sqls.should == ['SELECT * FROM items WHERE (id = 1) LIMIT 1']
|
103
|
-
m2.should == m
|
104
|
-
m2.values.should == $cache_dataset_row
|
105
|
-
end
|
106
|
-
|
107
|
-
it "should delete the cache when writing to the database" do
|
108
|
-
# fill the cache
|
109
|
-
m = @c[1]
|
110
|
-
@cache[m.cache_key].should == m
|
111
|
-
|
112
|
-
m.set(:name => 'tutu')
|
113
|
-
@cache.has_key?(m.cache_key).should be_false
|
114
|
-
$sqls.last.should == "UPDATE items SET name = 'tutu' WHERE (id = 1)"
|
115
|
-
|
116
|
-
m = @c[1]
|
117
|
-
@cache[m.cache_key].should == m
|
118
|
-
m.name = 'hey'
|
119
|
-
m.save
|
120
|
-
@cache.has_key?(m.cache_key).should be_false
|
121
|
-
$sqls.last.should == "UPDATE items SET name = 'hey', id = 1 WHERE (id = 1)"
|
122
|
-
end
|
123
|
-
|
124
|
-
it "should delete the cache when deleting the record" do
|
125
|
-
# fill the cache
|
126
|
-
m = @c[1]
|
127
|
-
@cache[m.cache_key].should == m
|
128
|
-
|
129
|
-
m.delete
|
130
|
-
@cache.has_key?(m.cache_key).should be_false
|
131
|
-
$sqls.last.should == "DELETE FROM items WHERE (id = 1)"
|
132
|
-
end
|
133
|
-
|
134
|
-
it "should support #[] as a shortcut to #find with hash" do
|
135
|
-
m = @c[:id => 3]
|
136
|
-
@cache[m.cache_key].should be_nil
|
137
|
-
$sqls.last.should == "SELECT * FROM items WHERE (id = 3) LIMIT 1"
|
138
|
-
|
139
|
-
m = @c[1]
|
140
|
-
@cache[m.cache_key].should == m
|
141
|
-
$sqls.should == ["SELECT * FROM items WHERE (id = 3) LIMIT 1", \
|
142
|
-
"SELECT * FROM items WHERE (id = 1) LIMIT 1"]
|
143
|
-
|
144
|
-
@c[:id => 4]
|
145
|
-
$sqls.should == ["SELECT * FROM items WHERE (id = 3) LIMIT 1", \
|
146
|
-
"SELECT * FROM items WHERE (id = 1) LIMIT 1", \
|
147
|
-
"SELECT * FROM items WHERE (id = 4) LIMIT 1"]
|
148
|
-
end
|
149
|
-
|
150
|
-
end
|
@@ -1,153 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
-
|
3
|
-
describe Sequel::Model, "one_to_one" do
|
4
|
-
|
5
|
-
before(:each) do
|
6
|
-
MODEL_DB.reset
|
7
|
-
|
8
|
-
@c1 = Class.new(Sequel::Model(:attributes)) do
|
9
|
-
end
|
10
|
-
|
11
|
-
@c2 = Class.new(Sequel::Model(:nodes)) do
|
12
|
-
def columns; [:id, :parent_id]; end
|
13
|
-
end
|
14
|
-
|
15
|
-
@dataset = @c2.dataset
|
16
|
-
|
17
|
-
@dataset.extend(Module.new {
|
18
|
-
def fetch_rows(sql)
|
19
|
-
@db << sql
|
20
|
-
yield({:hey => 1})
|
21
|
-
end
|
22
|
-
})
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should use implicit key if omitted" do
|
26
|
-
@c2.one_to_one :parent, :from => @c2
|
27
|
-
|
28
|
-
d = @c2.new(:id => 1, :parent_id => 234)
|
29
|
-
p = d.parent
|
30
|
-
p.class.should == @c2
|
31
|
-
p.values.should == {:hey => 1}
|
32
|
-
|
33
|
-
MODEL_DB.sqls.should == ["SELECT * FROM nodes WHERE (id = 234) LIMIT 1"]
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should use explicit key if given" do
|
37
|
-
@c2.one_to_one :parent, :from => @c2, :key => :blah
|
38
|
-
|
39
|
-
d = @c2.new(:id => 1, :blah => 567)
|
40
|
-
p = d.parent
|
41
|
-
p.class.should == @c2
|
42
|
-
p.values.should == {:hey => 1}
|
43
|
-
|
44
|
-
MODEL_DB.sqls.should == ["SELECT * FROM nodes WHERE (id = 567) LIMIT 1"]
|
45
|
-
end
|
46
|
-
|
47
|
-
# the new implementation doesn't support plain datasets as associations
|
48
|
-
# it "should support plain dataset in the from option" do
|
49
|
-
# @c2.one_to_one :parent, :from => MODEL_DB[:xyz]
|
50
|
-
#
|
51
|
-
# d = @c2.new(:id => 1, :parent_id => 789)
|
52
|
-
# p = d.parent
|
53
|
-
# p.class.should == Hash
|
54
|
-
#
|
55
|
-
# MODEL_DB.sqls.should == ["SELECT * FROM xyz WHERE (id = 789) LIMIT 1"]
|
56
|
-
# end
|
57
|
-
|
58
|
-
# the new implementation doesn't support plain datasets as associations
|
59
|
-
# it "should support table name in the from option" do
|
60
|
-
# @c2.one_to_one :parent, :from => :abc
|
61
|
-
#
|
62
|
-
# d = @c2.new(:id => 1, :parent_id => 789)
|
63
|
-
# p = d.parent
|
64
|
-
# p.class.should == Hash
|
65
|
-
#
|
66
|
-
# MODEL_DB.sqls.should == ["SELECT * FROM abc WHERE (id = 789) LIMIT 1"]
|
67
|
-
# end
|
68
|
-
|
69
|
-
it "should return nil if key value is nil" do
|
70
|
-
@c2.one_to_one :parent, :from => @c2
|
71
|
-
|
72
|
-
d = @c2.new(:id => 1)
|
73
|
-
d.parent.should == nil
|
74
|
-
end
|
75
|
-
|
76
|
-
it "should define a setter method" do
|
77
|
-
@c2.one_to_one :parent, :from => @c2
|
78
|
-
|
79
|
-
d = @c2.load(:id => 1)
|
80
|
-
d.parent = @c2.new(:id => 4321)
|
81
|
-
d.values.should == {:id => 1, :parent_id => 4321}
|
82
|
-
d.save_changes
|
83
|
-
MODEL_DB.sqls.last.should == "UPDATE nodes SET parent_id = 4321 WHERE (id = 1)"
|
84
|
-
|
85
|
-
d.parent = nil
|
86
|
-
d.values.should == {:id => 1, :parent_id => nil}
|
87
|
-
d.save_changes
|
88
|
-
MODEL_DB.sqls.last.should == "UPDATE nodes SET parent_id = NULL WHERE (id = 1)"
|
89
|
-
|
90
|
-
e = @c2.new(:id => 6677)
|
91
|
-
d.parent = e
|
92
|
-
d.values.should == {:id => 1, :parent_id => 6677}
|
93
|
-
d.save_changes
|
94
|
-
MODEL_DB.sqls.last.should == "UPDATE nodes SET parent_id = 6677 WHERE (id = 1)"
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
describe Sequel::Model, "one_to_many" do
|
99
|
-
|
100
|
-
before(:each) do
|
101
|
-
MODEL_DB.reset
|
102
|
-
|
103
|
-
@c1 = Class.new(Sequel::Model(:attributes)) do
|
104
|
-
end
|
105
|
-
|
106
|
-
@c2 = Class.new(Sequel::Model(:nodes)) do
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
it "should define a getter method" do
|
111
|
-
@c2.one_to_many :attributes, :from => @c1, :key => :node_id
|
112
|
-
|
113
|
-
n = @c2.new(:id => 1234)
|
114
|
-
a = n.attributes
|
115
|
-
a.should be_a_kind_of(Sequel::Dataset)
|
116
|
-
a.sql.should == 'SELECT * FROM attributes WHERE (node_id = 1234)'
|
117
|
-
end
|
118
|
-
|
119
|
-
# the new implementation doesn't support plain datasets as associations
|
120
|
-
# it "should support plain dataset in the from option" do
|
121
|
-
# @c2.one_to_many :attributes, :from => MODEL_DB[:xyz], :key => :node_id
|
122
|
-
#
|
123
|
-
# n = @c2.new(:id => 1234)
|
124
|
-
# a = n.attributes
|
125
|
-
# a.should be_a_kind_of(Sequel::Dataset)
|
126
|
-
# a.sql.should == 'SELECT * FROM xyz WHERE (node_id = 1234)'
|
127
|
-
# end
|
128
|
-
|
129
|
-
# the new implementation doesn't support plain datasets as associations
|
130
|
-
# it "should support table name in the from option" do
|
131
|
-
# @c2.one_to_many :attributes, :from => :abc, :key => :node_id
|
132
|
-
#
|
133
|
-
# n = @c2.new(:id => 1234)
|
134
|
-
# a = n.attributes
|
135
|
-
# a.should be_a_kind_of(Sequel::Dataset)
|
136
|
-
# a.sql.should == 'SELECT * FROM abc WHERE (node_id = 1234)'
|
137
|
-
# end
|
138
|
-
|
139
|
-
it "should support implicit key names" do
|
140
|
-
$c1 = @c1
|
141
|
-
|
142
|
-
module Music
|
143
|
-
class BlueNote < Sequel::Model
|
144
|
-
one_to_many :attributes, :from => $c1
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
n = Music::BlueNote.new(:id => 1234)
|
149
|
-
a = n.attributes
|
150
|
-
a.should be_a_kind_of(Sequel::Dataset)
|
151
|
-
a.sql.should == 'SELECT * FROM attributes WHERE (blue_note_id = 1234)'
|
152
|
-
end
|
153
|
-
end
|