perobs 1.1.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -4
- data/Rakefile +2 -4
- data/lib/perobs/Array.rb +58 -108
- data/lib/perobs/BTreeDB.rb +1 -1
- data/lib/perobs/Cache.rb +12 -0
- data/lib/perobs/Delegator.rb +78 -0
- data/lib/perobs/DynamoDB.rb +1 -1
- data/lib/perobs/Hash.rb +56 -110
- data/lib/perobs/Object.rb +35 -19
- data/lib/perobs/ObjectBase.rb +82 -28
- data/lib/perobs/Store.rb +75 -9
- data/lib/perobs/version.rb +1 -1
- data/tasks/test.rake +2 -1
- data/test/Array_spec.rb +208 -0
- data/{spec → test}/BTreeDB_spec.rb +23 -23
- data/{spec → test}/ClassMap_spec.rb +15 -15
- data/test/Hash_spec.rb +157 -0
- data/{spec → test}/Object_spec.rb +53 -28
- data/{spec → test}/Store_spec.rb +135 -129
- data/{spec → test}/perobs_spec.rb +44 -47
- data/{spec/Array_spec.rb → test/spec_helper.rb} +9 -61
- metadata +29 -26
- data/spec/Hash_spec.rb +0 -96
data/{spec → test}/Store_spec.rb
RENAMED
@@ -23,10 +23,7 @@
|
|
23
23
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
24
24
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
require 'fileutils'
|
29
|
-
require 'time'
|
26
|
+
require 'spec_helper'
|
30
27
|
require 'perobs'
|
31
28
|
|
32
29
|
class POSError < RuntimeError
|
@@ -61,47 +58,51 @@ end
|
|
61
58
|
describe PEROBS::Store do
|
62
59
|
|
63
60
|
before(:all) do
|
64
|
-
|
61
|
+
@db_file = generate_db_name(__FILE__)
|
65
62
|
end
|
66
63
|
|
67
64
|
after(:each) do
|
68
65
|
@store.gc
|
69
|
-
|
70
|
-
|
66
|
+
expect { @store.check }.to_not raise_error
|
67
|
+
expect { @store.delete_store }.to_not raise_error
|
68
|
+
end
|
69
|
+
|
70
|
+
after(:all) do
|
71
|
+
FileUtils.rm_rf(@db_file)
|
71
72
|
end
|
72
73
|
|
73
74
|
it 'should @store simple objects' do
|
74
|
-
@store = PEROBS::Store.new(
|
75
|
-
@store['john'] = john =
|
75
|
+
@store = PEROBS::Store.new(@db_file, { :serializer => :yaml })
|
76
|
+
@store['john'] = john = @store.new(Person)
|
76
77
|
john.name = 'John'
|
77
78
|
john.zip = 4060
|
78
79
|
john.bmi = 25.5
|
79
|
-
@store['jane'] = jane =
|
80
|
+
@store['jane'] = jane = @store.new(Person)
|
80
81
|
jane.name = 'Jane'
|
81
82
|
jane.related = john
|
82
83
|
jane.married = true
|
83
84
|
jane.relatives = 'test'
|
84
85
|
|
85
|
-
john.name.
|
86
|
-
john.zip.
|
87
|
-
john.bmi.
|
88
|
-
john.married.
|
89
|
-
john.related.
|
86
|
+
expect(john.name).to eq('John')
|
87
|
+
expect(john.zip).to eq(4060)
|
88
|
+
expect(john.bmi).to eq(25.5)
|
89
|
+
expect(john.married).to be false
|
90
|
+
expect(john.related).to be_nil
|
90
91
|
jane = @store['jane']
|
91
|
-
jane.name.
|
92
|
-
jane.related.
|
93
|
-
jane.married.
|
92
|
+
expect(jane.name).to eq('Jane')
|
93
|
+
expect(jane.related).to eq(john)
|
94
|
+
expect(jane.married).to be true
|
94
95
|
end
|
95
96
|
|
96
97
|
it 'should @store and retrieve simple objects' do
|
97
98
|
[ :marshal, :json, :yaml ].each do |serializer|
|
98
|
-
FileUtils.rm_rf(
|
99
|
-
@store = PEROBS::Store.new(
|
100
|
-
@store['john'] = john =
|
99
|
+
FileUtils.rm_rf(@db_file)
|
100
|
+
@store = PEROBS::Store.new(@db_file, { :serializer => serializer })
|
101
|
+
@store['john'] = john = @store.new(Person)
|
101
102
|
john.name = 'John'
|
102
103
|
john.zip = 4060
|
103
104
|
john.bmi = 25.5
|
104
|
-
@store['jane'] = jane =
|
105
|
+
@store['jane'] = jane = @store.new(Person)
|
105
106
|
jane.name = 'Jane'
|
106
107
|
jane.related = john
|
107
108
|
jane.married = true
|
@@ -109,44 +110,49 @@ describe PEROBS::Store do
|
|
109
110
|
|
110
111
|
@store.sync
|
111
112
|
|
112
|
-
@store = PEROBS::Store.new(
|
113
|
+
@store = PEROBS::Store.new(@db_file)
|
113
114
|
john = @store['john']
|
114
|
-
john.name.
|
115
|
-
john.zip.
|
116
|
-
john.bmi.
|
117
|
-
john.married.
|
118
|
-
john.related.
|
115
|
+
expect(john.name).to eq('John')
|
116
|
+
expect(john.zip).to eq(4060)
|
117
|
+
expect(john.bmi).to eq(25.5)
|
118
|
+
expect(john.married).to be false
|
119
|
+
expect(john.related).to be_nil
|
119
120
|
jane = @store['jane']
|
120
|
-
jane.name.
|
121
|
-
jane.related.
|
122
|
-
jane.married.
|
121
|
+
expect(jane.name).to eq('Jane')
|
122
|
+
expect(jane.related).to eq(john)
|
123
|
+
expect(jane.married).to be true
|
123
124
|
end
|
124
125
|
end
|
125
126
|
|
127
|
+
it 'should not allow calls to BasicObject.new()' do
|
128
|
+
@store = PEROBS::Store.new(@db_file)
|
129
|
+
expect { Person.new(@store) }.to raise_error RuntimeError
|
130
|
+
end
|
131
|
+
|
126
132
|
it 'should flush cached objects when necessary' do
|
127
|
-
@store = PEROBS::Store.new(
|
133
|
+
@store = PEROBS::Store.new(@db_file, :cache_bits => 3)
|
128
134
|
last_obj = nil
|
129
135
|
0.upto(20) do |i|
|
130
|
-
@store["person#{i}"] = obj =
|
131
|
-
@store["person#{i}"].
|
136
|
+
@store["person#{i}"] = obj = @store.new(Person)
|
137
|
+
expect(@store["person#{i}"]).to eq(obj)
|
132
138
|
obj.name = "Person #{i}"
|
133
|
-
obj.name.
|
139
|
+
expect(obj.name).to eq("Person #{i}")
|
134
140
|
obj.related = last_obj
|
135
|
-
obj.related.
|
141
|
+
expect(obj.related).to eq(last_obj)
|
136
142
|
last_obj = obj
|
137
143
|
end
|
138
144
|
0.upto(20) do |i|
|
139
|
-
@store["person#{i}"].name.
|
145
|
+
expect(@store["person#{i}"].name).to eq("Person #{i}")
|
140
146
|
end
|
141
147
|
end
|
142
148
|
|
143
149
|
it 'should support renaming of classes' do
|
144
|
-
@store = PEROBS::Store.new(
|
145
|
-
@store['john'] = john =
|
150
|
+
@store = PEROBS::Store.new(@db_file)
|
151
|
+
@store['john'] = john = @store.new(Person)
|
146
152
|
john.name = 'John'
|
147
153
|
john.zip = 4060
|
148
154
|
john.bmi = 25.5
|
149
|
-
@store['jane'] = jane =
|
155
|
+
@store['jane'] = jane = @store.new(Person)
|
150
156
|
jane.name = 'Jane'
|
151
157
|
jane.related = john
|
152
158
|
jane.married = true
|
@@ -154,142 +160,142 @@ describe PEROBS::Store do
|
|
154
160
|
|
155
161
|
@store.sync
|
156
162
|
|
157
|
-
@store = PEROBS::Store.new(
|
163
|
+
@store = PEROBS::Store.new(@db_file)
|
158
164
|
@store.rename_classes({ 'Person' => 'PersonN' })
|
159
165
|
john = @store['john']
|
160
|
-
john.name.
|
161
|
-
john.zip.
|
162
|
-
john.bmi.
|
163
|
-
john.married.
|
164
|
-
john.related.
|
166
|
+
expect(john.name).to eq('John')
|
167
|
+
expect(john.zip).to eq(4060)
|
168
|
+
expect(john.bmi).to eq(25.5)
|
169
|
+
expect(john.married).to be false
|
170
|
+
expect(john.related).to be_nil
|
165
171
|
jane = @store['jane']
|
166
|
-
jane.name.
|
167
|
-
jane.related.
|
168
|
-
jane.married.
|
172
|
+
expect(jane.name).to eq('Jane')
|
173
|
+
expect(jane.related).to eq(john)
|
174
|
+
expect(jane.married).to be true
|
169
175
|
end
|
170
176
|
|
171
177
|
it 'should detect modification to non-working objects' do
|
172
|
-
@store = PEROBS::Store.new(
|
178
|
+
@store = PEROBS::Store.new(@db_file, :cache_bits => 3)
|
173
179
|
0.upto(20) do |i|
|
174
|
-
@store["person#{i}"] = obj =
|
180
|
+
@store["person#{i}"] = obj = @store.new(Person)
|
175
181
|
obj.name = "Person #{i}"
|
176
182
|
end
|
177
183
|
0.upto(20) do |i|
|
178
184
|
@store["person#{i}"].name = "New Person #{i}"
|
179
185
|
end
|
180
186
|
@store.sync
|
181
|
-
@store = PEROBS::Store.new(
|
187
|
+
@store = PEROBS::Store.new(@db_file)
|
182
188
|
0.upto(20) do |i|
|
183
|
-
@store["person#{i}"].name.
|
189
|
+
expect(@store["person#{i}"].name).to eq("New Person #{i}")
|
184
190
|
end
|
185
191
|
end
|
186
192
|
|
187
193
|
it 'should garbage collect unlinked objects' do
|
188
|
-
@store = PEROBS::Store.new(
|
189
|
-
@store['person1'] = obj =
|
194
|
+
@store = PEROBS::Store.new(@db_file)
|
195
|
+
@store['person1'] = obj = @store.new(Person)
|
190
196
|
id1 = obj._id
|
191
|
-
@store['person2'] = obj =
|
197
|
+
@store['person2'] = obj = @store.new(Person)
|
192
198
|
id2 = obj._id
|
193
|
-
obj.related = obj =
|
199
|
+
obj.related = obj = @store.new(Person)
|
194
200
|
id3 = obj._id
|
195
201
|
@store.sync
|
196
202
|
@store['person1'] = nil
|
197
203
|
@store.gc
|
198
|
-
@store = PEROBS::Store.new(
|
199
|
-
@store.object_by_id(id1).
|
200
|
-
@store['person2']._id.
|
201
|
-
@store['person2'].related._id.
|
204
|
+
@store = PEROBS::Store.new(@db_file)
|
205
|
+
expect(@store.object_by_id(id1)).to be_nil
|
206
|
+
expect(@store['person2']._id).to eq(id2)
|
207
|
+
expect(@store['person2'].related._id).to eq(id3)
|
202
208
|
end
|
203
209
|
|
204
210
|
it 'should handle cyclicly linked objects' do
|
205
|
-
@store = PEROBS::Store.new(
|
206
|
-
@store['person0'] = p0 =
|
211
|
+
@store = PEROBS::Store.new(@db_file)
|
212
|
+
@store['person0'] = p0 = @store.new(Person)
|
207
213
|
id0 = p0._id
|
208
|
-
p1 =
|
214
|
+
p1 = @store.new(Person)
|
209
215
|
id1 = p1._id
|
210
|
-
p2 =
|
216
|
+
p2 = @store.new(Person)
|
211
217
|
id2 = p2._id
|
212
218
|
p1.related = p2
|
213
219
|
p2.related = p1
|
214
220
|
p0.related = p1
|
215
221
|
@store.sync
|
216
222
|
@store.gc
|
217
|
-
@store = PEROBS::Store.new(
|
218
|
-
@store['person0']._id.
|
219
|
-
@store['person0'].related._id.
|
220
|
-
@store['person0'].related.related._id.
|
223
|
+
@store = PEROBS::Store.new(@db_file)
|
224
|
+
expect(@store['person0']._id).to eq(id0)
|
225
|
+
expect(@store['person0'].related._id).to eq(id1)
|
226
|
+
expect(@store['person0'].related.related._id).to eq(id2)
|
221
227
|
|
222
228
|
@store['person0'].related = nil
|
223
229
|
@store.gc
|
224
|
-
@store.object_by_id(id1).
|
225
|
-
@store.object_by_id(id2).
|
230
|
+
expect(@store.object_by_id(id1)).to be_nil
|
231
|
+
expect(@store.object_by_id(id2)).to be_nil
|
226
232
|
|
227
|
-
@store = PEROBS::Store.new(
|
228
|
-
@store.object_by_id(id1).
|
229
|
-
@store.object_by_id(id2).
|
233
|
+
@store = PEROBS::Store.new(@db_file)
|
234
|
+
expect(@store.object_by_id(id1)).to be_nil
|
235
|
+
expect(@store.object_by_id(id2)).to be_nil
|
230
236
|
end
|
231
237
|
|
232
238
|
it 'should support a successful transaction' do
|
233
|
-
@store = PEROBS::Store.new(
|
239
|
+
@store = PEROBS::Store.new(@db_file)
|
234
240
|
@store.transaction do
|
235
|
-
@store['person0'] = p0 =
|
241
|
+
@store['person0'] = p0 = @store.new(Person)
|
236
242
|
p0.name = 'Jimmy'
|
237
243
|
end
|
238
|
-
@store['person0'].name.
|
244
|
+
expect(@store['person0'].name).to eq('Jimmy')
|
239
245
|
end
|
240
246
|
|
241
247
|
it 'should handle a failed transaction 1' do
|
242
|
-
@store = PEROBS::Store.new(
|
248
|
+
@store = PEROBS::Store.new(@db_file)
|
243
249
|
begin
|
244
250
|
@store.transaction do
|
245
|
-
@store['person0'] = p0 =
|
251
|
+
@store['person0'] = p0 = @store.new(Person)
|
246
252
|
p0.name = 'Jimmy'
|
247
253
|
raise POSError
|
248
254
|
end
|
249
255
|
rescue POSError
|
250
256
|
end
|
251
|
-
@store['person0'].
|
257
|
+
expect(@store['person0']).to be_nil
|
252
258
|
end
|
253
259
|
|
254
260
|
it 'should handle a failed transaction 2' do
|
255
|
-
@store = PEROBS::Store.new(
|
256
|
-
@store['person1'] = p1 =
|
261
|
+
@store = PEROBS::Store.new(@db_file)
|
262
|
+
@store['person1'] = p1 = @store.new(Person)
|
257
263
|
p1.name = 'Joe'
|
258
264
|
begin
|
259
265
|
@store.transaction do
|
260
|
-
@store['person0'] = p0 =
|
266
|
+
@store['person0'] = p0 = @store.new(Person)
|
261
267
|
p0.name = 'Jimmy'
|
262
268
|
raise POSError
|
263
269
|
end
|
264
270
|
rescue POSError
|
265
271
|
end
|
266
|
-
@store['person1'].name.
|
267
|
-
@store['person0'].
|
272
|
+
expect(@store['person1'].name).to eq('Joe')
|
273
|
+
expect(@store['person0']).to be_nil
|
268
274
|
end
|
269
275
|
|
270
276
|
it 'should support a successful nested transaction' do
|
271
|
-
@store = PEROBS::Store.new(
|
277
|
+
@store = PEROBS::Store.new(@db_file)
|
272
278
|
@store.transaction do
|
273
|
-
@store['person0'] = p0 =
|
279
|
+
@store['person0'] = p0 = @store.new(Person)
|
274
280
|
p0.name = 'Jimmy'
|
275
281
|
@store.transaction do
|
276
|
-
@store['person1'] = p1 =
|
282
|
+
@store['person1'] = p1 = @store.new(Person)
|
277
283
|
p1.name = 'Joe'
|
278
284
|
end
|
279
285
|
end
|
280
|
-
@store['person0'].name.
|
281
|
-
@store['person1'].name.
|
286
|
+
expect(@store['person0'].name).to eq('Jimmy')
|
287
|
+
expect(@store['person1'].name).to eq('Joe')
|
282
288
|
end
|
283
289
|
|
284
290
|
it 'should handle a failed nested transaction 1' do
|
285
|
-
@store = PEROBS::Store.new(
|
291
|
+
@store = PEROBS::Store.new(@db_file)
|
286
292
|
begin
|
287
293
|
@store.transaction do
|
288
|
-
@store['person0'] = p0 =
|
294
|
+
@store['person0'] = p0 = @store.new(Person)
|
289
295
|
p0.name = 'Jimmy'
|
290
296
|
begin
|
291
297
|
@store.transaction do
|
292
|
-
@store['person1'] = p1 =
|
298
|
+
@store['person1'] = p1 = @store.new(Person)
|
293
299
|
p1.name = 'Joe'
|
294
300
|
raise POSError
|
295
301
|
end
|
@@ -298,58 +304,58 @@ describe PEROBS::Store do
|
|
298
304
|
end
|
299
305
|
rescue POSError
|
300
306
|
end
|
301
|
-
@store['person0'].name.
|
302
|
-
@store['person1'].
|
307
|
+
expect(@store['person0'].name).to eq('Jimmy')
|
308
|
+
expect(@store['person1']).to be_nil
|
303
309
|
end
|
304
310
|
|
305
311
|
it 'should handle a failed nested transaction 2' do
|
306
|
-
@store = PEROBS::Store.new(
|
312
|
+
@store = PEROBS::Store.new(@db_file)
|
307
313
|
begin
|
308
314
|
@store.transaction do
|
309
|
-
@store['person0'] = p0 =
|
315
|
+
@store['person0'] = p0 = @store.new(Person)
|
310
316
|
p0.name = 'Jimmy'
|
311
317
|
@store.transaction do
|
312
|
-
@store['person1'] = p1 =
|
318
|
+
@store['person1'] = p1 = @store.new(Person)
|
313
319
|
p1.name = 'Joe'
|
314
320
|
end
|
315
321
|
raise POSError
|
316
322
|
end
|
317
323
|
rescue POSError
|
318
324
|
end
|
319
|
-
@store['person0'].
|
320
|
-
@store['person1'].
|
325
|
+
expect(@store['person0']).to be_nil
|
326
|
+
expect(@store['person1']).to be_nil
|
321
327
|
end
|
322
328
|
|
323
329
|
it 'should support a successful 2-level nested transaction' do
|
324
|
-
@store = PEROBS::Store.new(
|
330
|
+
@store = PEROBS::Store.new(@db_file)
|
325
331
|
@store.transaction do
|
326
|
-
@store['person0'] = p0 =
|
332
|
+
@store['person0'] = p0 = @store.new(Person)
|
327
333
|
p0.name = 'Jimmy'
|
328
334
|
@store.transaction do
|
329
|
-
@store['person1'] = p1 =
|
335
|
+
@store['person1'] = p1 = @store.new(Person)
|
330
336
|
p1.name = 'Joe'
|
331
337
|
@store.transaction do
|
332
|
-
@store['person2'] = p2 =
|
338
|
+
@store['person2'] = p2 = @store.new(Person)
|
333
339
|
p2.name = 'Jane'
|
334
340
|
end
|
335
341
|
end
|
336
342
|
end
|
337
|
-
@store['person0'].name.
|
338
|
-
@store['person1'].name.
|
339
|
-
@store['person2'].name.
|
343
|
+
expect(@store['person0'].name).to eq('Jimmy')
|
344
|
+
expect(@store['person1'].name).to eq('Joe')
|
345
|
+
expect(@store['person2'].name).to eq('Jane')
|
340
346
|
end
|
341
347
|
|
342
348
|
it 'should handle a failed 2-level nested transaction 1' do
|
343
|
-
@store = PEROBS::Store.new(
|
349
|
+
@store = PEROBS::Store.new(@db_file)
|
344
350
|
@store.transaction do
|
345
|
-
@store['person0'] = p0 =
|
351
|
+
@store['person0'] = p0 = @store.new(Person)
|
346
352
|
p0.name = 'Jimmy'
|
347
353
|
@store.transaction do
|
348
|
-
@store['person1'] = p1 =
|
354
|
+
@store['person1'] = p1 = @store.new(Person)
|
349
355
|
p1.name = 'Joe'
|
350
356
|
begin
|
351
357
|
@store.transaction do
|
352
|
-
@store['person2'] = p2 =
|
358
|
+
@store['person2'] = p2 = @store.new(Person)
|
353
359
|
p2.name = 'Jane'
|
354
360
|
raise POSError
|
355
361
|
end
|
@@ -357,22 +363,22 @@ describe PEROBS::Store do
|
|
357
363
|
end
|
358
364
|
end
|
359
365
|
end
|
360
|
-
@store['person0'].name.
|
361
|
-
@store['person1'].name.
|
362
|
-
@store['person2'].
|
366
|
+
expect(@store['person0'].name).to eq('Jimmy')
|
367
|
+
expect(@store['person1'].name).to eq('Joe')
|
368
|
+
expect(@store['person2']).to be_nil
|
363
369
|
end
|
364
370
|
|
365
371
|
it 'should handle a failed 2-level nested transaction 2' do
|
366
|
-
@store = PEROBS::Store.new(
|
372
|
+
@store = PEROBS::Store.new(@db_file)
|
367
373
|
@store.transaction do
|
368
|
-
@store['person0'] = p0 =
|
374
|
+
@store['person0'] = p0 = @store.new(Person)
|
369
375
|
p0.name = 'Jimmy'
|
370
376
|
@store.transaction do
|
371
|
-
@store['person1'] = p1 =
|
377
|
+
@store['person1'] = p1 = @store.new(Person)
|
372
378
|
p1.name = 'Joe'
|
373
379
|
begin
|
374
380
|
@store.transaction do
|
375
|
-
@store['person2'] = p2 =
|
381
|
+
@store['person2'] = p2 = @store.new(Person)
|
376
382
|
p2.name = 'Jane'
|
377
383
|
raise POSError
|
378
384
|
end
|
@@ -381,14 +387,14 @@ describe PEROBS::Store do
|
|
381
387
|
p1.name = 'Jane'
|
382
388
|
end
|
383
389
|
end
|
384
|
-
@store['person0'].name.
|
385
|
-
@store['person1'].name.
|
386
|
-
@store['person2'].
|
390
|
+
expect(@store['person0'].name).to eq('Jimmy')
|
391
|
+
expect(@store['person1'].name).to eq('Jane')
|
392
|
+
expect(@store['person2']).to be_nil
|
387
393
|
end
|
388
394
|
|
389
395
|
it 'should survive a real world usage test' do
|
390
396
|
options = { :engine => PEROBS::BTreeDB, :dir_bits => 4 }
|
391
|
-
@store = PEROBS::Store.new(
|
397
|
+
@store = PEROBS::Store.new(@db_file, options)
|
392
398
|
ref = {}
|
393
399
|
|
394
400
|
0.upto(2000) do |i|
|
@@ -396,13 +402,13 @@ describe PEROBS::Store do
|
|
396
402
|
case i % 8
|
397
403
|
when 0
|
398
404
|
value = 'A' * rand(512)
|
399
|
-
@store[key] = p =
|
405
|
+
@store[key] = p = @store.new(Person)
|
400
406
|
p.name = value
|
401
407
|
ref[key] = value
|
402
408
|
@store.sync
|
403
409
|
when 1
|
404
410
|
value = 'B' * rand(128)
|
405
|
-
@store[key] = p =
|
411
|
+
@store[key] = p = @store.new(Person)
|
406
412
|
p.name = value
|
407
413
|
ref[key] = value
|
408
414
|
when 2
|
@@ -417,14 +423,14 @@ describe PEROBS::Store do
|
|
417
423
|
when 4
|
418
424
|
if rand(15) == 0
|
419
425
|
@store.sync
|
420
|
-
@store = PEROBS::Store.new(
|
426
|
+
@store = PEROBS::Store.new(@db_file, options)
|
421
427
|
end
|
422
428
|
when 5
|
423
429
|
index = i - rand(10)
|
424
430
|
if rand(3) == 0 && index >= 0
|
425
431
|
key = "o#{i - rand(10)}"
|
426
432
|
value = 'C' * rand(1024)
|
427
|
-
@store[key] = p =
|
433
|
+
@store[key] = p = @store.new(Person)
|
428
434
|
p.name = value
|
429
435
|
ref[key] = value
|
430
436
|
end
|
@@ -436,17 +442,17 @@ describe PEROBS::Store do
|
|
436
442
|
when 7
|
437
443
|
index = rand(i)
|
438
444
|
if ref[key]
|
439
|
-
@store[key].name.
|
445
|
+
expect(@store[key].name).to eq(ref[key])
|
440
446
|
end
|
441
447
|
end
|
442
448
|
|
443
449
|
if ref[key]
|
444
|
-
@store[key].name.
|
450
|
+
expect(@store[key].name).to eq(ref[key])
|
445
451
|
end
|
446
452
|
end
|
447
453
|
|
448
454
|
ref.each do |k, v|
|
449
|
-
@store[k].name.
|
455
|
+
expect(@store[k].name).to eq(v)
|
450
456
|
end
|
451
457
|
end
|
452
458
|
|