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/schema_spec.rb
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
-
|
3
|
-
describe Sequel::Model, "table_exists?" do
|
4
|
-
|
5
|
-
before(:each) do
|
6
|
-
MODEL_DB.reset
|
7
|
-
@model = Class.new(Sequel::Model(:items))
|
8
|
-
end
|
9
|
-
|
10
|
-
it "should get the table name and question the model's db if table_exists?" do
|
11
|
-
@model.should_receive(:table_name).and_return(:items)
|
12
|
-
@model.db.should_receive(:table_exists?)
|
13
|
-
@model.table_exists?
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
|
18
|
-
describe Sequel::Model, "create_table" do
|
19
|
-
|
20
|
-
before(:each) do
|
21
|
-
MODEL_DB.reset
|
22
|
-
@model = Class.new(Sequel::Model) do
|
23
|
-
set_dataset MODEL_DB[:items]
|
24
|
-
set_schema do
|
25
|
-
text :name
|
26
|
-
float :price, :null => false
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should get the create table SQL list from the db and execute it line by line" do
|
32
|
-
@model.create_table
|
33
|
-
MODEL_DB.sqls.should == ['CREATE TABLE items (name text, price float NOT NULL)']
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
describe Sequel::Model, "drop_table" do
|
39
|
-
|
40
|
-
before(:each) do
|
41
|
-
MODEL_DB.reset
|
42
|
-
@model = Class.new(Sequel::Model(:items))
|
43
|
-
end
|
44
|
-
|
45
|
-
it "should get the drop table SQL for the associated table and then execute the SQL." do
|
46
|
-
@model.should_receive(:table_name).and_return(:items)
|
47
|
-
@model.db.should_receive(:drop_table_sql).with(:items)
|
48
|
-
@model.db.should_receive(:execute).and_return(:true)
|
49
|
-
@model.drop_table
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
|
-
describe Sequel::Model, "create_table!" do
|
55
|
-
|
56
|
-
before(:each) do
|
57
|
-
MODEL_DB.reset
|
58
|
-
@model = Class.new(Sequel::Model(:items))
|
59
|
-
end
|
60
|
-
|
61
|
-
it "should drop table if it exists and then create the table" do
|
62
|
-
@model.should_receive(:table_exists?).and_return(true)
|
63
|
-
@model.should_receive(:drop_table).and_return(true)
|
64
|
-
@model.should_receive(:create_table).and_return(true)
|
65
|
-
|
66
|
-
@model.create_table!
|
67
|
-
end
|
68
|
-
|
69
|
-
end
|
data/spec/spec.opts
DELETED
data/spec/spec_helper.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
unless Object.const_defined?('Sequel')
|
3
|
-
require 'sequel_core'
|
4
|
-
end
|
5
|
-
require File.join(File.dirname(__FILE__), "../lib/sequel_model")
|
6
|
-
|
7
|
-
class MockDataset < Sequel::Dataset
|
8
|
-
def insert(*args)
|
9
|
-
@db.execute insert_sql(*args)
|
10
|
-
end
|
11
|
-
|
12
|
-
def update(*args)
|
13
|
-
@db.execute update_sql(*args)
|
14
|
-
end
|
15
|
-
|
16
|
-
def delete(*args)
|
17
|
-
@db.execute delete_sql(*args)
|
18
|
-
end
|
19
|
-
|
20
|
-
def fetch_rows(sql)
|
21
|
-
@db.execute(sql)
|
22
|
-
yield({:id => 1, :x => 1})
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
class MockDatabase < Sequel::Database
|
27
|
-
attr_reader :sqls
|
28
|
-
|
29
|
-
def execute(sql)
|
30
|
-
@sqls ||= []
|
31
|
-
@sqls << sql
|
32
|
-
end
|
33
|
-
|
34
|
-
def reset
|
35
|
-
@sqls = []
|
36
|
-
end
|
37
|
-
|
38
|
-
def transaction; yield; end
|
39
|
-
|
40
|
-
def dataset; MockDataset.new(self); end
|
41
|
-
end
|
42
|
-
|
43
|
-
Sequel::Model.db = MODEL_DB = MockDatabase.new
|
data/spec/validations_spec.rb
DELETED
@@ -1,246 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
-
|
3
|
-
describe Sequel::Model, "Validations" do
|
4
|
-
|
5
|
-
before(:all) do
|
6
|
-
class Person < Sequel::Model
|
7
|
-
def columns
|
8
|
-
[:id,:name,:first_name,:last_name,:middle_name,:initials,:age, :terms]
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
class Smurf < Person
|
13
|
-
end
|
14
|
-
|
15
|
-
class Cow < Sequel::Model
|
16
|
-
def columns
|
17
|
-
[:id, :name, :got_milk]
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
class User < Sequel::Model
|
22
|
-
def columns
|
23
|
-
[:id, :username, :password]
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class Address < Sequel::Model
|
28
|
-
def columns
|
29
|
-
[:id, :zip_code]
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
it "should validate the acceptance of a column" do
|
35
|
-
class Cow < Sequel::Model
|
36
|
-
validations.clear
|
37
|
-
validates_acceptance_of :got_milk, :accept => 'blah', :allow_nil => false
|
38
|
-
end
|
39
|
-
|
40
|
-
@cow = Cow.new
|
41
|
-
@cow.should_not be_valid
|
42
|
-
@cow.errors.full_messages.should == ["got_milk is not accepted"]
|
43
|
-
|
44
|
-
@cow.got_milk = "blah"
|
45
|
-
@cow.should be_valid
|
46
|
-
end
|
47
|
-
|
48
|
-
it "should validate the confirmation of a column" do
|
49
|
-
class User < Sequel::Model
|
50
|
-
def password_confirmation
|
51
|
-
"test"
|
52
|
-
end
|
53
|
-
|
54
|
-
validations.clear
|
55
|
-
validates_confirmation_of :password
|
56
|
-
end
|
57
|
-
|
58
|
-
@user = User.new
|
59
|
-
@user.should_not be_valid
|
60
|
-
@user.errors.full_messages.should == ["password is not confirmed"]
|
61
|
-
|
62
|
-
@user.password = "test"
|
63
|
-
@user.should be_valid
|
64
|
-
end
|
65
|
-
|
66
|
-
it "should validate format of column" do
|
67
|
-
class Person < Sequel::Model
|
68
|
-
validates_format_of :first_name, :with => /^[a-zA-Z]+$/
|
69
|
-
end
|
70
|
-
|
71
|
-
@person = Person.new :first_name => "Lancelot99"
|
72
|
-
@person.valid?.should be_false
|
73
|
-
@person = Person.new :first_name => "Anita"
|
74
|
-
@person.valid?.should be_true
|
75
|
-
end
|
76
|
-
|
77
|
-
# it "should allow for :with_exactly => /[a-zA-Z]/, which wraps the supplied regex with ^<regex>$" do
|
78
|
-
# pending("TODO: Add this option to Validatable#validates_format_of")
|
79
|
-
# end
|
80
|
-
|
81
|
-
it "should validate length of column" do
|
82
|
-
class Person < Sequel::Model
|
83
|
-
validations.clear
|
84
|
-
validates_length_of :first_name, :maximum => 30
|
85
|
-
validates_length_of :last_name, :minimum => 30
|
86
|
-
validates_length_of :middle_name, :within => 1..5
|
87
|
-
validates_length_of :initials, :is => 2
|
88
|
-
end
|
89
|
-
|
90
|
-
@person = Person.new(
|
91
|
-
:first_name => "Anamethatiswaytofreakinglongandwayoverthirtycharacters",
|
92
|
-
:last_name => "Alastnameunderthirtychars",
|
93
|
-
:initials => "LGC",
|
94
|
-
:middle_name => "danger"
|
95
|
-
)
|
96
|
-
|
97
|
-
@person.should_not be_valid
|
98
|
-
@person.errors.full_messages.size.should == 4
|
99
|
-
@person.errors.full_messages.should include(
|
100
|
-
'first_name is too long',
|
101
|
-
'last_name is too short',
|
102
|
-
'middle_name is the wrong length',
|
103
|
-
'initials is the wrong length'
|
104
|
-
)
|
105
|
-
|
106
|
-
@person.first_name = "Lancelot"
|
107
|
-
@person.last_name = "1234567890123456789012345678901"
|
108
|
-
@person.initials = "LC"
|
109
|
-
@person.middle_name = "Will"
|
110
|
-
@person.should be_valid
|
111
|
-
end
|
112
|
-
|
113
|
-
it "should validate numericality of column" do
|
114
|
-
class Person < Sequel::Model
|
115
|
-
validations.clear
|
116
|
-
validates_numericality_of :age
|
117
|
-
end
|
118
|
-
|
119
|
-
@person = Person.new :age => "Twenty"
|
120
|
-
@person.should_not be_valid
|
121
|
-
@person.errors.full_messages.should == ['age is not a number']
|
122
|
-
|
123
|
-
@person.age = 20
|
124
|
-
@person.should be_valid
|
125
|
-
end
|
126
|
-
|
127
|
-
it "should validate the presence of a column" do
|
128
|
-
class Cow < Sequel::Model
|
129
|
-
validations.clear
|
130
|
-
validates_presence_of :name
|
131
|
-
end
|
132
|
-
|
133
|
-
@cow = Cow.new
|
134
|
-
@cow.should_not be_valid
|
135
|
-
@cow.errors.full_messages.should == ['name is not present']
|
136
|
-
|
137
|
-
@cow.name = "Betsy"
|
138
|
-
@cow.should be_valid
|
139
|
-
end
|
140
|
-
|
141
|
-
it "should have a validates block that contains multiple validations" do
|
142
|
-
class Person < Sequel::Model
|
143
|
-
validations.clear
|
144
|
-
validates do
|
145
|
-
format_of :first_name, :with => /^[a-zA-Z]+$/
|
146
|
-
length_of :first_name, :maximum => 30
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
Person.validations[:first_name].size.should == 2
|
151
|
-
|
152
|
-
@person = Person.new :first_name => "Lancelot99"
|
153
|
-
@person.valid?.should be_false
|
154
|
-
|
155
|
-
@person2 = Person.new :first_name => "Wayne"
|
156
|
-
@person2.valid?.should be_true
|
157
|
-
end
|
158
|
-
|
159
|
-
it "should allow 'longhand' validations direcly within the model." do
|
160
|
-
lambda {
|
161
|
-
class Person < Sequel::Model
|
162
|
-
validations.clear
|
163
|
-
validates_length_of :first_name, :maximum => 30
|
164
|
-
end
|
165
|
-
}.should_not raise_error
|
166
|
-
Person.validations.length.should eql(1)
|
167
|
-
end
|
168
|
-
|
169
|
-
it "should define a has_validations? method which returns true if the model has validations, false otherwise" do
|
170
|
-
class Person < Sequel::Model
|
171
|
-
validations.clear
|
172
|
-
validates do
|
173
|
-
format_of :first_name, :with => /\w+/
|
174
|
-
length_of :first_name, :maximum => 30
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
class Smurf < Person
|
179
|
-
validations.clear
|
180
|
-
end
|
181
|
-
|
182
|
-
Person.should have_validations
|
183
|
-
Smurf.should_not have_validations
|
184
|
-
end
|
185
|
-
|
186
|
-
it "should validate correctly instances initialized with string keys" do
|
187
|
-
class Can < Sequel::Model
|
188
|
-
def columns; [:id, :name]; end
|
189
|
-
|
190
|
-
validates_length_of :name, :minimum => 4
|
191
|
-
end
|
192
|
-
|
193
|
-
Can.new('name' => 'ab').should_not be_valid
|
194
|
-
Can.new('name' => 'abcd').should be_valid
|
195
|
-
end
|
196
|
-
|
197
|
-
end
|
198
|
-
|
199
|
-
describe "Model#save!" do
|
200
|
-
setup do
|
201
|
-
@c = Class.new(Sequel::Model(:people)) do
|
202
|
-
def columns; [:id]; end
|
203
|
-
|
204
|
-
validates_each :id do |o, a, v|
|
205
|
-
o.errors[a] << 'blah' unless v == 5
|
206
|
-
end
|
207
|
-
end
|
208
|
-
@m = @c.load(:id => 4)
|
209
|
-
MODEL_DB.reset
|
210
|
-
end
|
211
|
-
|
212
|
-
specify "should save regardless of validations" do
|
213
|
-
@m.should_not be_valid
|
214
|
-
@m.save!
|
215
|
-
MODEL_DB.sqls.should == ['UPDATE people SET id = 4 WHERE (id = 4)']
|
216
|
-
end
|
217
|
-
end
|
218
|
-
|
219
|
-
describe "Model#save" do
|
220
|
-
setup do
|
221
|
-
@c = Class.new(Sequel::Model(:people)) do
|
222
|
-
def columns; [:id]; end
|
223
|
-
|
224
|
-
validates_each :id do |o, a, v|
|
225
|
-
o.errors[a] << 'blah' unless v == 5
|
226
|
-
end
|
227
|
-
end
|
228
|
-
@m = @c.load(:id => 4)
|
229
|
-
MODEL_DB.reset
|
230
|
-
end
|
231
|
-
|
232
|
-
specify "should save only if validations pass" do
|
233
|
-
@m.should_not be_valid
|
234
|
-
@m.save
|
235
|
-
MODEL_DB.sqls.should be_empty
|
236
|
-
|
237
|
-
@m.id = 5
|
238
|
-
@m.should be_valid
|
239
|
-
@m.save.should_not be_false
|
240
|
-
MODEL_DB.sqls.should == ['UPDATE people SET id = 5 WHERE (id = 5)']
|
241
|
-
end
|
242
|
-
|
243
|
-
specify "should return false if validations fail" do
|
244
|
-
@m.save.should == false
|
245
|
-
end
|
246
|
-
end
|