rod 0.6.1 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +7 -0
- data/{README → README.rdoc} +33 -2
- data/Rakefile +7 -2
- data/changelog.txt +13 -0
- data/contributors.txt +2 -0
- data/features/append.feature +221 -0
- data/features/assoc_indexing.feature +66 -0
- data/features/basic.feature +199 -0
- data/features/collection.feature +171 -0
- data/features/flat_indexing.feature +140 -0
- data/features/fred.feature +49 -0
- data/features/inheritence.feature +211 -0
- data/features/muliple_db.feature +113 -0
- data/features/relationships.feature +195 -0
- data/features/segmented_indexing.feature +172 -0
- data/features/steps/model.rb +386 -0
- data/features/steps/rod.rb +71 -0
- data/features/steps/test_helper.rb +5 -0
- data/lib/rod/abstract_database.rb +17 -5
- data/lib/rod/constants.rb +1 -1
- data/lib/rod/database.rb +95 -74
- data/lib/rod/join_element.rb +6 -2
- data/lib/rod/model.rb +37 -9
- data/rod.gemspec +15 -12
- data/tests/check_strings.rb +10 -0
- data/tests/class_compatibility_create.rb +14 -0
- data/tests/class_compatibility_verify.rb +18 -0
- data/tests/eff1_test.rb +60 -0
- data/tests/eff2_test.rb +61 -0
- data/tests/full_runs.rb +68 -0
- data/tests/generate_classes_create.rb +25 -0
- data/tests/generate_classes_model.rb +23 -0
- data/tests/generate_classes_rewrite.rb +7 -0
- data/tests/generate_classes_verify.rb +46 -0
- data/tests/load_struct.rb +24 -0
- data/tests/migration_create.rb +25 -0
- data/tests/migration_migrate.rb +22 -0
- data/tests/migration_model1.rb +23 -0
- data/tests/migration_model2.rb +27 -0
- data/tests/migration_verify.rb +56 -0
- data/tests/mock_tests.rb +128 -0
- data/tests/read_on_create.rb +45 -0
- data/tests/save_struct.rb +49 -0
- data/tests/structures.rb +52 -0
- data/tests/unit/database.rb +60 -0
- data/tests/unit/model.rb +36 -0
- data/tests/unit/model_tests.rb +116 -0
- data/tests/validate_read_on_create.rb +12 -0
- data/utils/convert_index.rb +31 -0
- metadata +77 -28
@@ -0,0 +1,386 @@
|
|
1
|
+
require 'rspec/expectations'
|
2
|
+
require File.join(File.dirname(__FILE__),"test_helper")
|
3
|
+
|
4
|
+
def get_class(class_name,type=:model)
|
5
|
+
klass = RodTest.const_get(class_name) rescue nil
|
6
|
+
if klass.nil?
|
7
|
+
superclass =
|
8
|
+
case type
|
9
|
+
when :model
|
10
|
+
RodTest::TestModel
|
11
|
+
when :db
|
12
|
+
Rod::Database
|
13
|
+
end
|
14
|
+
klass = Class.new(superclass)
|
15
|
+
RodTest.const_set(class_name,klass)
|
16
|
+
end
|
17
|
+
klass
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_db(db_name)
|
21
|
+
case db_name
|
22
|
+
when "database"
|
23
|
+
RodTest::Database
|
24
|
+
else
|
25
|
+
get_class(db_name,:db)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def get_instance(class_name,position,cache=false)
|
30
|
+
if cache
|
31
|
+
@instances[class_name][get_position(position)]
|
32
|
+
else
|
33
|
+
get_class(class_name)[get_position(position)]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def get_value(value)
|
38
|
+
case value
|
39
|
+
when /^(-)?\d+\.\d+$/
|
40
|
+
value.to_f
|
41
|
+
when /^(-)?\d+$/
|
42
|
+
value.to_i
|
43
|
+
when /^:/
|
44
|
+
value[1..-1].to_sym
|
45
|
+
else
|
46
|
+
value = value.scan(/[^\d\\]+|\\\d+/).map do |segment|
|
47
|
+
case segment
|
48
|
+
when /\\\d+/
|
49
|
+
$&.to_i.chr
|
50
|
+
else
|
51
|
+
segment
|
52
|
+
end
|
53
|
+
end.join("")
|
54
|
+
value
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def get_position(position)
|
59
|
+
case position
|
60
|
+
when "first"
|
61
|
+
0
|
62
|
+
when "second"
|
63
|
+
1
|
64
|
+
when "third"
|
65
|
+
2
|
66
|
+
when "last"
|
67
|
+
-1
|
68
|
+
when Fixnum
|
69
|
+
position
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
################################################################
|
74
|
+
# Given
|
75
|
+
################################################################
|
76
|
+
Given /^the model is connected with the default database$/ do
|
77
|
+
RodTest::TestModel.send(:database_class,RodTest::Database)
|
78
|
+
end
|
79
|
+
|
80
|
+
Given /^a class (\w+) inherits from ([\w:]+)$/ do |name1,name2|
|
81
|
+
if name2 =~ /::/
|
82
|
+
base_module = Module
|
83
|
+
else
|
84
|
+
base_module = RodTest
|
85
|
+
end
|
86
|
+
class2 = name2.split("::").inject(base_module){|m,n| m.const_get(n)}
|
87
|
+
class1 = Class.new(class2)
|
88
|
+
RodTest.const_set(name1,class1)
|
89
|
+
end
|
90
|
+
|
91
|
+
Given /^a class (\w+) has an? (\w+) field of type (\w+)( with (\w+) index)?$/ do |class_name,field,type,index,index_type|
|
92
|
+
index_type = index_type == "flat" ? :flat : :segmented
|
93
|
+
if index
|
94
|
+
get_class(class_name).send(:field,field.to_sym,type.to_sym,:index => index_type)
|
95
|
+
else
|
96
|
+
get_class(class_name).send(:field,field.to_sym,type.to_sym)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
Given /^a class (\w+) has one (\w+ )?(\w+)( with (\w+) index)?$/ do |class_name,type,assoc,index,index_type|
|
101
|
+
options = {}
|
102
|
+
unless type.nil?
|
103
|
+
case type
|
104
|
+
when /polymorphic/
|
105
|
+
options[:polymorphic] = true
|
106
|
+
end
|
107
|
+
end
|
108
|
+
unless index.nil?
|
109
|
+
index_type = (index_type == "flat" ? :flat : :segmented)
|
110
|
+
options[:index] = index_type
|
111
|
+
end
|
112
|
+
get_class(class_name).send(:has_one,assoc.to_sym,options)
|
113
|
+
end
|
114
|
+
|
115
|
+
Given /^a class (\w+) has many (\w+ )?(\w+)( with (\w+) index)?$/ do |class_name,type,assoc,index,index_type|
|
116
|
+
options = {}
|
117
|
+
unless type.nil?
|
118
|
+
case type
|
119
|
+
when /polymorphic/
|
120
|
+
options[:polymorphic] = true
|
121
|
+
end
|
122
|
+
end
|
123
|
+
unless index.nil?
|
124
|
+
index_type = (index_type == "flat" ? :flat : :segmented)
|
125
|
+
options[:index] = index_type
|
126
|
+
end
|
127
|
+
get_class(class_name).send(:has_many,assoc.to_sym,options)
|
128
|
+
end
|
129
|
+
|
130
|
+
################################################################
|
131
|
+
# When
|
132
|
+
################################################################
|
133
|
+
# When I create a Caveman
|
134
|
+
When /^I create a(?:nother|n)? (\w+)$/ do |class_name|
|
135
|
+
@instance = get_class(class_name).new
|
136
|
+
@instances[class_name] ||= []
|
137
|
+
@instances[class_name] << @instance
|
138
|
+
end
|
139
|
+
|
140
|
+
# When I create a Caveman with 'Fred' name and 'Flintstone' surname
|
141
|
+
When /^I create a(?:nother|n)? (\w+) with (.*)$/ do |class_name,rest|
|
142
|
+
hash = {}
|
143
|
+
rest.split(/\s+and\s+/).each do |pair|
|
144
|
+
matched = pair.match(/'(?<value>[^']*)' (?<name>\w+)/)
|
145
|
+
hash[matched[:name].to_sym] = get_value(matched[:value])
|
146
|
+
end
|
147
|
+
begin
|
148
|
+
@instance = get_class(class_name).new(hash)
|
149
|
+
@instances[class_name] ||= []
|
150
|
+
@instances[class_name] << @instance
|
151
|
+
rescue Exception => ex
|
152
|
+
@error = ex
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
# When I fetch the first Caveman (created)
|
157
|
+
When /^I fetch the (\w+) (\w+)( created)?$/ do |position,class_name,created|
|
158
|
+
created = !created.nil?
|
159
|
+
@instance = get_instance(class_name,position,created)
|
160
|
+
end
|
161
|
+
|
162
|
+
# When I create and store the following Caveman(s):
|
163
|
+
# | name | surname |
|
164
|
+
# | Fred | Flintstone |
|
165
|
+
When /^I create and store the following (\w+)\(s\):$/ do |class_name,table|
|
166
|
+
klass = get_class(class_name)
|
167
|
+
table.hashes.each do |attributes|
|
168
|
+
instance = klass.new
|
169
|
+
attributes.each do |field,value|
|
170
|
+
instance.send("#{field}=",get_value(value))
|
171
|
+
end
|
172
|
+
@instances[class_name] ||= []
|
173
|
+
@instances[class_name] << instance
|
174
|
+
instance.store
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
# When his name is 'Fred' (multiplied 300 times)
|
179
|
+
When /^(?:his|her|its) (\w+) is '([^']*)'(?: multiplied (\d+) times)?$/ do |field,value,multiplier|
|
180
|
+
value = get_value(value)
|
181
|
+
if multiplier
|
182
|
+
value *= multiplier.to_i
|
183
|
+
end
|
184
|
+
@instance.send("#{field}=".to_sym,value)
|
185
|
+
end
|
186
|
+
|
187
|
+
When /^(his|her|its) (\w+) is nil$/ do |ignore,field|
|
188
|
+
@instance.send("#{field}=".to_sym,nil)
|
189
|
+
end
|
190
|
+
|
191
|
+
|
192
|
+
When /^(his|her|its) (\w+) is the (\w+) (\w+) created$/ do |ignore,field,position,class_name|
|
193
|
+
@instance.send("#{field}=".to_sym,get_instance(class_name,position,true))
|
194
|
+
end
|
195
|
+
|
196
|
+
When /^(his|her|its) (\w+) contain the (\w+) (\w+) created$/ do |ignore,field,position,class_name|
|
197
|
+
@instance.send("#{field}".to_sym) << get_instance(class_name,position,true)
|
198
|
+
end
|
199
|
+
|
200
|
+
When /^(his|her|its) (\w+) contain nil$/ do |ignore,field|
|
201
|
+
@instance.send("#{field}".to_sym) << nil
|
202
|
+
end
|
203
|
+
|
204
|
+
When /^I store (him|her|it) in the database( (\d+) times)?$/ do |ignore,times,count|
|
205
|
+
if times
|
206
|
+
count.to_i.times do |index|
|
207
|
+
instance = @instance.dup
|
208
|
+
instance.store
|
209
|
+
end
|
210
|
+
else
|
211
|
+
@instance.store
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
When /^I store the (\w+) (\w+) in the database$/ do |position,class_name|
|
216
|
+
get_instance(class_name,position,true).store
|
217
|
+
end
|
218
|
+
|
219
|
+
When /^I access the (\w+) (\w+) index$/ do |class_name,field|
|
220
|
+
get_class(class_name).send("find_by_#{field}",nil)
|
221
|
+
end
|
222
|
+
|
223
|
+
When /^I remember the (\w+) (\w+)$/ do |position,class_name|
|
224
|
+
@remembered = get_instance(class_name,position)
|
225
|
+
end
|
226
|
+
|
227
|
+
################################################################
|
228
|
+
# Then
|
229
|
+
################################################################
|
230
|
+
Then /^there should be (\d+) (\w+)(\([^)]*\))?$/ do |count,class_name,ignore|
|
231
|
+
get_class(class_name).count.should == count.to_i
|
232
|
+
end
|
233
|
+
|
234
|
+
Then /^the (\w+) of the (\w+) ([A-Z]\w+) should be '([^']*)'$/ do |field, position, class_name,value|
|
235
|
+
get_instance(class_name,position).send(field.to_sym).should == get_value(value)
|
236
|
+
end
|
237
|
+
|
238
|
+
Then /^the (\w+) of the (\w+) (\w+) should be '([^']*)'( multiplied (\d+) times)$/ do |field, position, class_name,value,multi,multiplier|
|
239
|
+
value = get_value(value)
|
240
|
+
if multi
|
241
|
+
value *= multiplier.to_i
|
242
|
+
end
|
243
|
+
get_instance(class_name,position).send(field.to_sym).should == value
|
244
|
+
end
|
245
|
+
|
246
|
+
Then /^the (\w+) of the remembered instance should be '([^']*)'( multiplied (\d+) times)?$/ do |field, value,multi,multiplier|
|
247
|
+
value = get_value(value)
|
248
|
+
if multi
|
249
|
+
value *= multiplier.to_i
|
250
|
+
end
|
251
|
+
@remembered.send(field.to_sym).should == value
|
252
|
+
end
|
253
|
+
|
254
|
+
Then /^the (\w+) (\w+) should not have a (\w+) field$/ do |position, class_name, field|
|
255
|
+
(lambda {get_instance(class_name,position).send(field.to_sym)}).should raise_error(NoMethodError)
|
256
|
+
end
|
257
|
+
|
258
|
+
Then /^the (\w+) (\w+) should not have (a|an )?(\w+)$/ do |position, class_name, ignore, assoc|
|
259
|
+
(lambda {get_instance(class_name,position).send(assoc.to_sym)}).should raise_error(NoMethodError)
|
260
|
+
end
|
261
|
+
|
262
|
+
Then /^the (\w+) (\w+) should not exist$/ do |position,class_name|
|
263
|
+
(lambda {get_instance(class_name,position)}).should raise_error(IndexError)
|
264
|
+
end
|
265
|
+
|
266
|
+
Then /^the (\w+) of the (\w+) (\w+) should be equal to the (\w+) (\w+)$/ do |field, position1,class1,position2,class2|
|
267
|
+
get_instance(class1,position1).send(field.to_sym).should ==
|
268
|
+
get_instance(class2,position2,true)
|
269
|
+
end
|
270
|
+
|
271
|
+
Then /^the (\w+) of the (\w+) (\w+) should be nil$/ do |field,position1,class1|
|
272
|
+
get_instance(class1,position1).send(field.to_sym).should == nil
|
273
|
+
end
|
274
|
+
|
275
|
+
|
276
|
+
Then /^the (\w+) (\w+) should have (\d+) (\w+)$/ do |position,class_name,count,field|
|
277
|
+
get_instance(class_name,position).send(field.to_sym).count.should == count.to_i
|
278
|
+
end
|
279
|
+
|
280
|
+
Then /^(\w+)(\([^)]*\))? from (\d+) to (\d+) should have '([^']*)' (\w+)$/ do |class_name,ignore,first,last,value,field|
|
281
|
+
(first.to_i - 1).upto(last.to_i - 1) do |index|
|
282
|
+
get_instance(class_name,index).send(field.to_sym).should == value
|
283
|
+
end
|
284
|
+
end
|
285
|
+
|
286
|
+
Then /^(\w+)(\([^)]*\))? from (\d+) to (\d+) should have a(n)? (\w+) equal to the (\w+) (\w+)$/ do |class1,ignore,first,last,ignore1,field,position,class2|
|
287
|
+
(first.to_i - 1).upto(last.to_i - 1) do |index|
|
288
|
+
get_instance(class1,index).send(field.to_sym).should == get_instance(class2,position)
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
Then /^(\w+)(\([^)]*\))? from (\d+) to (\d+) should have (\d+) (\w+)$/ do |class1,ignore,first,last,count,field|
|
293
|
+
(first.to_i - 1).upto(last.to_i - 1) do |index|
|
294
|
+
get_instance(class1,index).send(field.to_sym).count.should == count.to_i
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
Then /^(\w+)(\([^)]*\))? from (\d+) to (\d+) should have (\w+) of (\w+) equal to the (\w+) (\w+) created$/ do |class1,ignore,first,last,position1,field,position2,class2|
|
299
|
+
(first.to_i - 1).upto(last.to_i - 1) do |index|
|
300
|
+
get_instance(class1,index).send(field.to_sym)[get_position(position1)] == get_instance(class2,position2)
|
301
|
+
end
|
302
|
+
end
|
303
|
+
|
304
|
+
Then /^the (\w+) of (\w+) of the (\w+) (\w+) should be equal to the (\w+) (\w+)$/ do |position0,field,position1,class1,position2,class2|
|
305
|
+
get_instance(class1,position1).send(field.to_sym)[get_position(position0)].should ==
|
306
|
+
get_instance(class2,position2,true)
|
307
|
+
end
|
308
|
+
|
309
|
+
Then /^the (\w+) of (\w+) of the (\w+) (\w+) should be nil$/ do |position0,field,position1,class1|
|
310
|
+
get_instance(class1,position1).send(field.to_sym)[get_position(position0)].should == nil
|
311
|
+
end
|
312
|
+
|
313
|
+
# Then his name should be 'Fred'
|
314
|
+
Then /^(?:his|her|its) (\w+) should be '([^']*)'$/ do |property, value|
|
315
|
+
value = get_value(value)
|
316
|
+
@instance.send(property.to_sym).should == value
|
317
|
+
end
|
318
|
+
|
319
|
+
# Then his name should be nil
|
320
|
+
Then /^(?:his|her|its) (\w+) should be nil$/ do |property|
|
321
|
+
@instance.send(property.to_sym).should == nil
|
322
|
+
end
|
323
|
+
|
324
|
+
# Then his items should be empty
|
325
|
+
Then /^(?:his|her|its) (\w+) should be empty$/ do |property|
|
326
|
+
@instance.send(property.to_sym).should be_empty
|
327
|
+
end
|
328
|
+
|
329
|
+
Then /^the (\w+) (\w+) should be equal with the instance$/ do |position1,class1|
|
330
|
+
instance1 = get_instance(class1,position1)
|
331
|
+
instance1.should == @instance
|
332
|
+
end
|
333
|
+
|
334
|
+
Then /^the (\w+) (\w+) should be identical with the (\w+) (\w+)$/ do |position1,class1,position2,class2|
|
335
|
+
instance1 = get_instance(class1,position1)
|
336
|
+
instance2 = get_instance(class2,position2)
|
337
|
+
instance1.object_id.should == instance2.object_id
|
338
|
+
end
|
339
|
+
|
340
|
+
Then /^there should be (\d+) (\w+)(?:\([^)]*\))? with '([^']*)' (\w+)$/ do |count,class_name,value,field|
|
341
|
+
get_class(class_name).send("find_all_by_#{field}",get_value(value)).count.should == count.to_i
|
342
|
+
end
|
343
|
+
|
344
|
+
# Then there should exist a User with 'Adam' name
|
345
|
+
Then /^there should exist a(?:n)? (\w+) with '([^']*)' (\w+)$/ do |class_name,value,field|
|
346
|
+
get_class(class_name).send("find_by_#{field}",get_value(value)).should_not == nil
|
347
|
+
end
|
348
|
+
|
349
|
+
# Then there should be 5 User(s) with the first Dog as dog
|
350
|
+
Then /^there should be (\d+) (\w+)(?:\([^)]*\))? with the (\w+) (\w+) as (\w+)$/ do |count,class1,position,class2,assoc|
|
351
|
+
get_class(class1).send("find_all_by_#{assoc}",get_instance(class2,position)).count.should == count.to_i
|
352
|
+
end
|
353
|
+
|
354
|
+
# Then there should exist a User with the first Dog as dog
|
355
|
+
Then /^there should exist a(?:n)? (\w+) with the (\w+) (\w+) as (\w+)$/ do |class1,position,class2,assoc|
|
356
|
+
get_class(class1).send("find_by_#{assoc}",get_instance(class2,position)).should_not == nil
|
357
|
+
end
|
358
|
+
|
359
|
+
|
360
|
+
Then /^I should be able to iterate( with index)? over these (\w+)\(s\)$/ do |with_index,class_name|
|
361
|
+
if with_index
|
362
|
+
(lambda {get_class(class_name).each.with_index{|e,i| e}}).should_not raise_error(Exception)
|
363
|
+
else
|
364
|
+
(lambda {get_class(class_name).each{|e| e}}).should_not raise_error(Exception)
|
365
|
+
end
|
366
|
+
end
|
367
|
+
|
368
|
+
Then /^I should be able to find a (\w+) with '([^']*)' (\w+) and '([^']*)' (\w+)$/ do |class_name,value1,field1,value2,field2|
|
369
|
+
get_class(class_name).find{|e| e.send(field1) == get_value(value1) && e.send(field2) == get_value(value2)}.should_not == nil
|
370
|
+
end
|
371
|
+
|
372
|
+
Then /^there should be (\d+) (\w+)(\([^)]*\))? with (\w+) (below|above) (\d+)( with index (below|above) (\d+))?$/ do |count1,class_name,ignore,field,relation1,value,with_index,relation2,count2|
|
373
|
+
relation1 = relation1 == "below" ? :< : :>
|
374
|
+
relation2 = relation2 == "below" ? :< : :>
|
375
|
+
if with_index
|
376
|
+
get_class(class_name).each.with_index.select{|e,i| e.send(field).send(relation1,value.to_i) &&
|
377
|
+
i.send(relation2,count2.to_i)}.size.should == count1.to_i
|
378
|
+
else
|
379
|
+
get_class(class_name).select{|e| e.send(field).send(relation1, value.to_i)}.size.should == count1.to_i
|
380
|
+
end
|
381
|
+
|
382
|
+
end
|
383
|
+
|
384
|
+
Then /^([\w:]+) should be raised$/ do |exception|
|
385
|
+
@error.class.to_s.should == exception
|
386
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__),"test_helper")
|
2
|
+
|
3
|
+
#$ROD_DEBUG = true
|
4
|
+
|
5
|
+
Given /^the library works in development mode$/ do
|
6
|
+
Rod::Database.development_mode = true
|
7
|
+
end
|
8
|
+
|
9
|
+
Given /^(the )?(\w+) is created( in (\w+))?$/ do |ignore,db_name,location,location_name|
|
10
|
+
get_db(db_name).instance.close_database if get_db(db_name).instance.opened?
|
11
|
+
if File.exist?("tmp")
|
12
|
+
if location
|
13
|
+
db_location = location_name
|
14
|
+
else
|
15
|
+
db_location = db_name
|
16
|
+
end
|
17
|
+
end
|
18
|
+
get_db(db_name).instance.create_database("tmp/#{db_location}")
|
19
|
+
@instances = {}
|
20
|
+
end
|
21
|
+
|
22
|
+
Given /^a class (\w+) is connected to (\w+)$/ do |class_name,db_name|
|
23
|
+
get_class(class_name).send(:database_class,get_class(db_name,:db))
|
24
|
+
end
|
25
|
+
|
26
|
+
Given /^the class space is cleared$/ do
|
27
|
+
#RodTest::Database.instance.close_database(true) if RodTest::Database.instance.opened?
|
28
|
+
RodTest.constants.each do |constant|
|
29
|
+
klass = RodTest.const_get(constant)
|
30
|
+
if constant.to_s =~ /Database/
|
31
|
+
if klass.instance.opened?
|
32
|
+
klass.instance.close_database(true)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
RodTest.send(:remove_const,constant)
|
36
|
+
end
|
37
|
+
# TODO separate step?
|
38
|
+
default_db = Class.new(Rod::Database)
|
39
|
+
RodTest.const_set("Database",default_db)
|
40
|
+
default_model = Class.new(Rod::Model)
|
41
|
+
RodTest.const_set("TestModel",default_model)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Should be split
|
45
|
+
When /^I reopen (\w+)( for reading)?( in (\w+))?$/ do |db_name,reading,location,location_name|
|
46
|
+
if location
|
47
|
+
db_location = location_name
|
48
|
+
else
|
49
|
+
db_location = db_name
|
50
|
+
end
|
51
|
+
get_db(db_name).instance.close_database
|
52
|
+
get_db(db_name).instance.clear_cache
|
53
|
+
readonly = reading.nil? ? false : true
|
54
|
+
get_db(db_name).instance.open_database("tmp/#{db_location}",readonly)
|
55
|
+
end
|
56
|
+
|
57
|
+
When /^I open (\w+)( for reading)?( in (\w+))?$/ do |db_name,reading,location,location_name|
|
58
|
+
if location
|
59
|
+
db_location = location_name
|
60
|
+
else
|
61
|
+
db_location = db_name
|
62
|
+
end
|
63
|
+
get_db(db_name).instance.clear_cache
|
64
|
+
readonly = reading.nil? ? false : true
|
65
|
+
get_db(db_name).instance.open_database("tmp/#{db_location}",readonly)
|
66
|
+
end
|
67
|
+
|
68
|
+
Then /^database should be opened for reading$/ do
|
69
|
+
RodTest::Database.instance.opened?.should be_true
|
70
|
+
RodTest::Database.instance.readonly_data?.should be_true
|
71
|
+
end
|