paulcarey-relaxdb 0.1.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.
@@ -0,0 +1,602 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
5
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
+ <head>
7
+ <title>RSpec results</title>
8
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
9
+ <meta http-equiv="Expires" content="-1" />
10
+ <meta http-equiv="Pragma" content="no-cache" />
11
+ <style type="text/css">
12
+ body {
13
+ margin: 0;
14
+ padding: 0;
15
+ background: #fff;
16
+ font-size: 80%;
17
+ }
18
+ </style>
19
+ </head>
20
+ <body>
21
+ <div class="rspec-report">
22
+ <script type="text/javascript">
23
+ // <![CDATA[
24
+ function moveProgressBar(percentDone) {
25
+ document.getElementById("rspec-header").style.width = percentDone +"%";
26
+ }
27
+ function makeRed(element_id) {
28
+ document.getElementById(element_id).style.background = '#C40D0D';
29
+ document.getElementById(element_id).style.color = '#FFFFFF';
30
+ }
31
+
32
+ function makeYellow(element_id) {
33
+ if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D')
34
+ {
35
+ document.getElementById(element_id).style.background = '#FAF834';
36
+ document.getElementById(element_id).style.color = '#000000';
37
+ }
38
+ else
39
+ {
40
+ document.getElementById(element_id).style.background = '#FAF834';
41
+ document.getElementById(element_id).style.color = '#000000';
42
+ }
43
+ }
44
+
45
+ // ]]>
46
+ </script>
47
+ <style type="text/css">
48
+ #rspec-header {
49
+ background: #65C400; color: #fff;
50
+ }
51
+
52
+ .rspec-report h1 {
53
+ margin: 0px 10px 0px 10px;
54
+ padding: 10px;
55
+ font-family: "Lucida Grande", Helvetica, sans-serif;
56
+ font-size: 1.8em;
57
+ }
58
+
59
+ #summary {
60
+ margin: 0; padding: 5px 10px;
61
+ font-family: "Lucida Grande", Helvetica, sans-serif;
62
+ text-align: right;
63
+ position: absolute;
64
+ top: 0px;
65
+ right: 0px;
66
+ }
67
+
68
+ #summary p {
69
+ margin: 0 0 0 2px;
70
+ }
71
+
72
+ #summary #totals {
73
+ font-size: 1.2em;
74
+ }
75
+
76
+ .example_group {
77
+ margin: 0 10px 5px;
78
+ background: #fff;
79
+ }
80
+
81
+ dl {
82
+ margin: 0; padding: 0 0 5px;
83
+ font: normal 11px "Lucida Grande", Helvetica, sans-serif;
84
+ }
85
+
86
+ dt {
87
+ padding: 3px;
88
+ background: #65C400;
89
+ color: #fff;
90
+ font-weight: bold;
91
+ }
92
+
93
+ dd {
94
+ margin: 5px 0 5px 5px;
95
+ padding: 3px 3px 3px 18px;
96
+ }
97
+
98
+ dd.spec.passed {
99
+ border-left: 5px solid #65C400;
100
+ border-bottom: 1px solid #65C400;
101
+ background: #DBFFB4; color: #3D7700;
102
+ }
103
+
104
+ dd.spec.failed {
105
+ border-left: 5px solid #C20000;
106
+ border-bottom: 1px solid #C20000;
107
+ color: #C20000; background: #FFFBD3;
108
+ }
109
+
110
+ dd.spec.not_implemented {
111
+ border-left: 5px solid #FAF834;
112
+ border-bottom: 1px solid #FAF834;
113
+ background: #FCFB98; color: #131313;
114
+ }
115
+
116
+ dd.spec.pending_fixed {
117
+ border-left: 5px solid #0000C2;
118
+ border-bottom: 1px solid #0000C2;
119
+ color: #0000C2; background: #D3FBFF;
120
+ }
121
+
122
+ .backtrace {
123
+ color: #000;
124
+ font-size: 12px;
125
+ }
126
+
127
+ a {
128
+ color: #BE5C00;
129
+ }
130
+
131
+ /* Ruby code, style similar to vibrant ink */
132
+ .ruby {
133
+ font-size: 12px;
134
+ font-family: monospace;
135
+ color: white;
136
+ background-color: black;
137
+ padding: 0.1em 0 0.2em 0;
138
+ }
139
+
140
+ .ruby .keyword { color: #FF6600; }
141
+ .ruby .constant { color: #339999; }
142
+ .ruby .attribute { color: white; }
143
+ .ruby .global { color: white; }
144
+ .ruby .module { color: white; }
145
+ .ruby .class { color: white; }
146
+ .ruby .string { color: #66FF00; }
147
+ .ruby .ident { color: white; }
148
+ .ruby .method { color: #FFCC00; }
149
+ .ruby .number { color: white; }
150
+ .ruby .char { color: white; }
151
+ .ruby .comment { color: #9933CC; }
152
+ .ruby .symbol { color: white; }
153
+ .ruby .regex { color: #44B4CC; }
154
+ .ruby .punct { color: white; }
155
+ .ruby .escape { color: white; }
156
+ .ruby .interp { color: white; }
157
+ .ruby .expr { color: white; }
158
+
159
+ .ruby .offending { background-color: gray; }
160
+ .ruby .linenum {
161
+ width: 75px;
162
+ padding: 0.1em 1em 0.2em 0;
163
+ color: #000000;
164
+ background-color: #FFFBD3;
165
+ }
166
+
167
+ </style>
168
+
169
+ <div id="rspec-header">
170
+ <h1>RSpec Results</h1>
171
+
172
+ <div id="summary">
173
+ <p id="totals">&nbsp;</p>
174
+ <p id="duration">&nbsp;</p>
175
+ </div>
176
+ </div>
177
+
178
+ <div class="results">
179
+ <div class="example_group">
180
+ <dl>
181
+ <dt id="example_group_1">RelaxDB::BelongsToProxy</dt>
182
+ </dl>
183
+ </div>
184
+ <div class="example_group">
185
+ <dl>
186
+ <dt id="example_group_2">RelaxDB::BelongsToProxy belongs_to</dt>
187
+ <script type="text/javascript">moveProgressBar('1.0');</script>
188
+ <dd class="spec passed"><span class="passed_spec_name">should return nil when accessed before assignment</span></dd>
189
+ <script type="text/javascript">moveProgressBar('2.0');</script>
190
+ <dd class="spec passed"><span class="passed_spec_name">should be establishable via constructor attribute</span></dd>
191
+ <script type="text/javascript">moveProgressBar('3.0');</script>
192
+ <dd class="spec passed"><span class="passed_spec_name">should be establishable via constructor id</span></dd>
193
+ <script type="text/javascript">moveProgressBar('4.0');</script>
194
+ <dd class="spec passed"><span class="passed_spec_name">should establish the parent relationship when supplied a parent and saved</span></dd>
195
+ <script type="text/javascript">moveProgressBar('5.0');</script>
196
+ <dd class="spec passed"><span class="passed_spec_name">should establish the parent relationship when supplied a parent id and saved</span></dd>
197
+ <script type="text/javascript">moveProgressBar('6.0');</script>
198
+ <dd class="spec passed"><span class="passed_spec_name">should return the same object on repeated invocations</span></dd>
199
+ <script type="text/javascript">moveProgressBar('7.0');</script>
200
+ <dd class="spec passed"><span class="passed_spec_name">should be nullified when the parent is destroyed</span></dd>
201
+ <script type="text/javascript">moveProgressBar('8.0');</script>
202
+ <dd class="spec passed"><span class="passed_spec_name">should be preserved across save / load boundary</span></dd>
203
+ <script type="text/javascript">moveProgressBar('9.0');</script>
204
+ <dd class="spec passed"><span class="passed_spec_name">should be able to reference itself via its parent</span></dd>
205
+ </dl>
206
+ </div>
207
+ <div class="example_group">
208
+ <dl>
209
+ <dt id="example_group_3">RelaxDB::DesignDocument</dt>
210
+ </dl>
211
+ </div>
212
+ <div class="example_group">
213
+ <dl>
214
+ <dt id="example_group_4">RelaxDB::DesignDocument#save</dt>
215
+ <script type="text/javascript">moveProgressBar('10.1');</script>
216
+ <dd class="spec passed"><span class="passed_spec_name">should create a corresponding document in CouchDB</span></dd>
217
+ </dl>
218
+ </div>
219
+ <div class="example_group">
220
+ <dl>
221
+ <dt id="example_group_5">RelaxDB::DesignDocument#destroy</dt>
222
+ <script type="text/javascript">moveProgressBar('11.1');</script>
223
+ <dd class="spec passed"><span class="passed_spec_name">should delete the corresponding document from CouchDB</span></dd>
224
+ </dl>
225
+ </div>
226
+ <div class="example_group">
227
+ <dl>
228
+ <dt id="example_group_6">RelaxDB::Document</dt>
229
+ </dl>
230
+ </div>
231
+ <div class="example_group">
232
+ <dl>
233
+ <dt id="example_group_7">RelaxDB::Document.new</dt>
234
+ <script type="text/javascript">moveProgressBar('12.1');</script>
235
+ <dd class="spec passed"><span class="passed_spec_name">should create an object with an id</span></dd>
236
+ <script type="text/javascript">moveProgressBar('13.1');</script>
237
+ <dd class="spec passed"><span class="passed_spec_name">should create an object with a nil revision</span></dd>
238
+ <script type="text/javascript">moveProgressBar('14.1');</script>
239
+ <dd class="spec passed"><span class="passed_spec_name">should convert attributes that end in _at to dates</span></dd>
240
+ <script type="text/javascript">moveProgressBar('15.1');</script>
241
+ <dd class="spec passed"><span class="passed_spec_name">will silently ignore parameters that don't specify class attributes</span></dd>
242
+ </dl>
243
+ </div>
244
+ <div class="example_group">
245
+ <dl>
246
+ <dt id="example_group_8">RelaxDB::Document#to_json</dt>
247
+ <script type="text/javascript">moveProgressBar('16.1');</script>
248
+ <dd class="spec passed"><span class="passed_spec_name">should not output nil attributes</span></dd>
249
+ </dl>
250
+ </div>
251
+ <div class="example_group">
252
+ <dl>
253
+ <dt id="example_group_9">RelaxDB::Document#save</dt>
254
+ <script type="text/javascript">moveProgressBar('17.1');</script>
255
+ <dd class="spec passed"><span class="passed_spec_name">should set an object's revision</span></dd>
256
+ <script type="text/javascript">moveProgressBar('18.1');</script>
257
+ <dd class="spec passed"><span class="passed_spec_name">should result in an object considered saved</span></dd>
258
+ <script type="text/javascript">moveProgressBar('19.1');</script>
259
+ <dd class="spec passed"><span class="passed_spec_name">should be invokable multiple times</span></dd>
260
+ <script type="text/javascript">moveProgressBar('20.2');</script>
261
+ <dd class="spec passed"><span class="passed_spec_name">should set created_at when first saved</span></dd>
262
+ <script type="text/javascript">moveProgressBar('21.2');</script>
263
+ <dd class="spec passed"><span class="passed_spec_name">should set created_at when first saved unless supplied to the constructor</span></dd>
264
+ </dl>
265
+ </div>
266
+ <div class="example_group">
267
+ <dl>
268
+ <dt id="example_group_10">RelaxDB::Document loaded objects</dt>
269
+ <script type="text/javascript">moveProgressBar('22.2');</script>
270
+ <dd class="spec passed"><span class="passed_spec_name">should contain state as when saved</span></dd>
271
+ <script type="text/javascript">moveProgressBar('23.2');</script>
272
+ <dd class="spec passed"><span class="passed_spec_name">should be saveable</span></dd>
273
+ </dl>
274
+ </div>
275
+ <div class="example_group">
276
+ <dl>
277
+ <dt id="example_group_11">RelaxDB::Document#destroy</dt>
278
+ <script type="text/javascript">moveProgressBar('24.2');</script>
279
+ <dd class="spec passed"><span class="passed_spec_name">should delete the corresponding document from CouchDB</span></dd>
280
+ <script type="text/javascript">moveProgressBar('25.2');</script>
281
+ <dd class="spec passed"><span class="passed_spec_name">should prevent the object from being resaved</span></dd>
282
+ <script type="text/javascript">moveProgressBar('26.2');</script>
283
+ <dd class="spec passed"><span class="passed_spec_name">will result in undefined behaviour when invoked on unsaved objects</span></dd>
284
+ </dl>
285
+ </div>
286
+ <div class="example_group">
287
+ <dl>
288
+ <dt id="example_group_12">RelaxDB::Document#all.destroy!</dt>
289
+ <script type="text/javascript">moveProgressBar('27.2');</script>
290
+ <dd class="spec passed"><span class="passed_spec_name">should delete from CouchDB all documents of the corresponding class</span></dd>
291
+ </dl>
292
+ </div>
293
+ <div class="example_group">
294
+ <dl>
295
+ <dt id="example_group_13">RelaxDB::Document ==</dt>
296
+ <script type="text/javascript">moveProgressBar('28.2');</script>
297
+ <dd class="spec passed"><span class="passed_spec_name">should define equality based on CouchDB id</span></dd>
298
+ <script type="text/javascript">moveProgressBar('29.2');</script>
299
+ <dd class="spec passed"><span class="passed_spec_name">should return false when passed a nil object</span></dd>
300
+ </dl>
301
+ </div>
302
+ <div class="example_group">
303
+ <dl>
304
+ <dt id="example_group_14">RelaxDB::Document#all</dt>
305
+ <script type="text/javascript">moveProgressBar('30.3');</script>
306
+ <dd class="spec passed"><span class="passed_spec_name">should return all instances of that class</span></dd>
307
+ <script type="text/javascript">moveProgressBar('31.3');</script>
308
+ <dd class="spec passed"><span class="passed_spec_name">should return an empty array when no instances exist</span></dd>
309
+ </dl>
310
+ </div>
311
+ <div class="example_group">
312
+ <dl>
313
+ <dt id="example_group_15">RelaxDB::Document#all.sorted_by</dt>
314
+ <script type="text/javascript">moveProgressBar('32.3');</script>
315
+ <dd class="spec passed"><span class="passed_spec_name">should sort ascending by default</span></dd>
316
+ <script type="text/javascript">moveProgressBar('33.3');</script>
317
+ <dd class="spec passed"><span class="passed_spec_name">should sort desc when specified</span></dd>
318
+ <script type="text/javascript">moveProgressBar('34.3');</script>
319
+ <dd class="spec passed"><span class="passed_spec_name">should sort date attributes lexicographically</span></dd>
320
+ </dl>
321
+ </div>
322
+ <div class="example_group">
323
+ <dl>
324
+ <dt id="example_group_16">RelaxDB::Document#all.sorted_by results</dt>
325
+ <script type="text/javascript">moveProgressBar('35.3');</script>
326
+ <dd class="spec passed"><span class="passed_spec_name">should be retrievable by exact criteria</span></dd>
327
+ <script type="text/javascript">moveProgressBar('36.3');</script>
328
+ <dd class="spec passed"><span class="passed_spec_name">should be retrievable by relative criteria</span></dd>
329
+ <script type="text/javascript">moveProgressBar('37.3');</script>
330
+ <dd class="spec passed"><span class="passed_spec_name">should be retrievable by combined criteria</span></dd>
331
+ <script type="text/javascript">moveProgressBar('38.3');</script>
332
+ <dd class="spec passed"><span class="passed_spec_name">should be retrievable by combined criteria where not all docs contain all attributes</span></dd>
333
+ </dl>
334
+ </div>
335
+ <div class="example_group">
336
+ <dl>
337
+ <dt id="example_group_17">RelaxDB::Document defaults</dt>
338
+ <script type="text/javascript">moveProgressBar('39.3');</script>
339
+ <dd class="spec passed"><span class="passed_spec_name">should be set on initialisation</span></dd>
340
+ <script type="text/javascript">moveProgressBar('40.4');</script>
341
+ <dd class="spec passed"><span class="passed_spec_name">should be saved</span></dd>
342
+ <script type="text/javascript">moveProgressBar('41.4');</script>
343
+ <dd class="spec passed"><span class="passed_spec_name">should be ignored once overwritten</span></dd>
344
+ <script type="text/javascript">moveProgressBar('42.4');</script>
345
+ <dd class="spec passed"><span class="passed_spec_name">may be a simple value</span></dd>
346
+ <script type="text/javascript">moveProgressBar('43.4');</script>
347
+ <dd class="spec passed"><span class="passed_spec_name">may be a proc</span></dd>
348
+ </dl>
349
+ </div>
350
+ <div class="example_group">
351
+ <dl>
352
+ <dt id="example_group_18">RelaxDB::Document validator</dt>
353
+ <script type="text/javascript">moveProgressBar('44.4');</script>
354
+ <dd class="spec passed"><span class="passed_spec_name">should prevent an object from being saved if it evaluates to false</span></dd>
355
+ <script type="text/javascript">moveProgressBar('45.4');</script>
356
+ <dd class="spec passed"><span class="passed_spec_name">should pass the property value to the validator</span></dd>
357
+ <script type="text/javascript">moveProgressBar('46.4');</script>
358
+ <dd class="spec passed"><span class="passed_spec_name">should add the validation error message if supplied, on failure</span></dd>
359
+ <script type="text/javascript">moveProgressBar('47.4');</script>
360
+ <dd class="spec passed"><span class="passed_spec_name">should perform all validations</span></dd>
361
+ </dl>
362
+ </div>
363
+ <div class="example_group">
364
+ <dl>
365
+ <dt id="example_group_19">RelaxDB::HasManyProxy</dt>
366
+ </dl>
367
+ </div>
368
+ <div class="example_group">
369
+ <dl>
370
+ <dt id="example_group_20">RelaxDB::HasManyProxy has_many</dt>
371
+ <script type="text/javascript">moveProgressBar('48.4');</script>
372
+ <dd class="spec passed"><span class="passed_spec_name">should be considered enumerable</span></dd>
373
+ <script type="text/javascript">moveProgressBar('49.4');</script>
374
+ <dd class="spec passed"><span class="passed_spec_name">should actually be enumerable</span></dd>
375
+ <script type="text/javascript">moveProgressBar('50.5');</script>
376
+ <dd class="spec passed"><span class="passed_spec_name">should preserve the collection across the load / save boundary</span></dd>
377
+ </dl>
378
+ </div>
379
+ <div class="example_group">
380
+ <dl>
381
+ <dt id="example_group_21">RelaxDB::HasManyProxy has_many#&lt;&lt;</dt>
382
+ <script type="text/javascript">moveProgressBar('51.5');</script>
383
+ <dd class="spec passed"><span class="passed_spec_name">should link the added item to the parent</span></dd>
384
+ <script type="text/javascript">moveProgressBar('52.5');</script>
385
+ <dd class="spec passed"><span class="passed_spec_name">should return self</span></dd>
386
+ <script type="text/javascript">moveProgressBar('53.5');</script>
387
+ <dd class="spec passed"><span class="passed_spec_name">should not created duplicates when invoked with same object more than once</span></dd>
388
+ <script type="text/javascript">moveProgressBar('54.5');</script>
389
+ <dd class="spec passed"><span class="passed_spec_name">should return false when the child fails validation</span></dd>
390
+ </dl>
391
+ </div>
392
+ <div class="example_group">
393
+ <dl>
394
+ <dt id="example_group_22">RelaxDB::HasManyProxy has_many#=</dt>
395
+ <script type="text/javascript">moveProgressBar('55.5');</script>
396
+ <dd class="spec passed"><span class="passed_spec_name">should fail</span></dd>
397
+ </dl>
398
+ </div>
399
+ <div class="example_group">
400
+ <dl>
401
+ <dt id="example_group_23">RelaxDB::HasManyProxy has_many#delete</dt>
402
+ <script type="text/javascript">moveProgressBar('56.5');</script>
403
+ <dd class="spec passed"><span class="passed_spec_name">should nullify the belongs_to relationship</span></dd>
404
+ </dl>
405
+ </div>
406
+ <div class="example_group">
407
+ <dl>
408
+ <dt id="example_group_24">RelaxDB::HasManyProxy has_many#clear</dt>
409
+ <script type="text/javascript">moveProgressBar('57.5');</script>
410
+ <dd class="spec passed"><span class="passed_spec_name">should result in an empty collection</span></dd>
411
+ <script type="text/javascript">moveProgressBar('58.5');</script>
412
+ <dd class="spec passed"><span class="passed_spec_name">should nullify all child relationships</span></dd>
413
+ </dl>
414
+ </div>
415
+ <div class="example_group">
416
+ <dl>
417
+ <dt id="example_group_25">RelaxDB::HasManyProxy has_many owner</dt>
418
+ <script type="text/javascript">moveProgressBar('59.5');</script>
419
+ <dd class="spec passed"><span class="passed_spec_name">should be able to form multiple relationships with the same class of child</span></dd>
420
+ </dl>
421
+ </div>
422
+ <div class="example_group">
423
+ <dl>
424
+ <dt id="example_group_26">RelaxDB::HasManyProxy has_many owner#destroy</dt>
425
+ <script type="text/javascript">moveProgressBar('60.6');</script>
426
+ <dd class="spec passed"><span class="passed_spec_name">should nullify its child relationships</span></dd>
427
+ </dl>
428
+ </div>
429
+ <div class="example_group">
430
+ <dl>
431
+ <dt id="example_group_27">RelaxDB::HasOneProxy</dt>
432
+ </dl>
433
+ </div>
434
+ <div class="example_group">
435
+ <dl>
436
+ <dt id="example_group_28">RelaxDB::HasOneProxy has_one</dt>
437
+ <script type="text/javascript">moveProgressBar('61.6');</script>
438
+ <dd class="spec passed"><span class="passed_spec_name">should return nil when accessed before assignment</span></dd>
439
+ <script type="text/javascript">moveProgressBar('62.6');</script>
440
+ <dd class="spec passed"><span class="passed_spec_name">should be establishable via a constructor attribute</span></dd>
441
+ <script type="text/javascript">moveProgressBar('63.6');</script>
442
+ <dd class="spec passed"><span class="passed_spec_name">should be establishable via assignment</span></dd>
443
+ <script type="text/javascript">moveProgressBar('64.6');</script>
444
+ <dd class="spec passed"><span class="passed_spec_name">should return the same object on repeated invocations</span></dd>
445
+ <script type="text/javascript">moveProgressBar('65.6');</script>
446
+ <dd class="spec passed"><span class="passed_spec_name">should be preserved across load / save boundary</span></dd>
447
+ <script type="text/javascript">moveProgressBar('66.6');</script>
448
+ <dd class="spec passed"><span class="passed_spec_name">should be able reference itself via its child</span></dd>
449
+ </dl>
450
+ </div>
451
+ <div class="example_group">
452
+ <dl>
453
+ <dt id="example_group_29">RelaxDB::HasOneProxy has_one#=</dt>
454
+ <script type="text/javascript">moveProgressBar('67.6');</script>
455
+ <dd class="spec passed"><span class="passed_spec_name">should create a reference from the child to the parent</span></dd>
456
+ <script type="text/javascript">moveProgressBar('68.6');</script>
457
+ <dd class="spec passed"><span class="passed_spec_name">should save the assigned object</span></dd>
458
+ <script type="text/javascript">moveProgressBar('69.6');</script>
459
+ <dd class="spec passed"><span class="passed_spec_name">will not save the parent</span></dd>
460
+ <script type="text/javascript">moveProgressBar('70.7');</script>
461
+ <dd class="spec passed"><span class="passed_spec_name">should set the target to nil when nil is assigned</span></dd>
462
+ <script type="text/javascript">moveProgressBar('71.7');</script>
463
+ <dd class="spec passed"><span class="passed_spec_name">should nullify any existing relationship in the database</span></dd>
464
+ <script type="text/javascript">moveProgressBar('72.7');</script>
465
+ <dd class="spec passed"><span class="passed_spec_name">should nullify any existing relationship on a known in-memory object</span></dd>
466
+ <script type="text/javascript">moveProgressBar('73.7');</script>
467
+ <dd class="spec passed"><span class="passed_spec_name">will not nullify any existing relationship on unknown in-memory objects</span></dd>
468
+ <script type="text/javascript">moveProgressBar('74.7');</script>
469
+ <dd class="spec passed"><span class="passed_spec_name">will not throw an error when the rhs fails validation</span></dd>
470
+ </dl>
471
+ </div>
472
+ <div class="example_group">
473
+ <dl>
474
+ <dt id="example_group_30">RelaxDB::Query</dt>
475
+ </dl>
476
+ </div>
477
+ <div class="example_group">
478
+ <dl>
479
+ <dt id="example_group_31">RelaxDB::Query#view_name</dt>
480
+ <script type="text/javascript">moveProgressBar('75.7');</script>
481
+ <dd class="spec passed"><span class="passed_spec_name">should match a single key attribute</span></dd>
482
+ <script type="text/javascript">moveProgressBar('76.7');</script>
483
+ <dd class="spec passed"><span class="passed_spec_name">should match key attributes</span></dd>
484
+ </dl>
485
+ </div>
486
+ <div class="example_group">
487
+ <dl>
488
+ <dt id="example_group_32">RelaxDB::Query#view_path</dt>
489
+ <script type="text/javascript">moveProgressBar('77.7');</script>
490
+ <dd class="spec passed"><span class="passed_spec_name">should list design document and view name</span></dd>
491
+ <script type="text/javascript">moveProgressBar('78.7');</script>
492
+ <dd class="spec passed"><span class="passed_spec_name">should contain URL and JSON encoded key when the key has been set</span></dd>
493
+ <script type="text/javascript">moveProgressBar('79.7');</script>
494
+ <dd class="spec passed"><span class="passed_spec_name">should honour startkey, endkey and count</span></dd>
495
+ <script type="text/javascript">moveProgressBar('80.8');</script>
496
+ <dd class="spec passed"><span class="passed_spec_name">should specify the key as the empty string if key was set to nil</span></dd>
497
+ </dl>
498
+ </div>
499
+ <div class="example_group">
500
+ <dl>
501
+ <dt id="example_group_33">RelaxDB::ReferencesManyProxy</dt>
502
+ </dl>
503
+ </div>
504
+ <div class="example_group">
505
+ <dl>
506
+ <dt id="example_group_34">RelaxDB::ReferencesManyProxy references_many</dt>
507
+ <script type="text/javascript">moveProgressBar('81.8');</script>
508
+ <dd class="spec passed"><span class="passed_spec_name">is now deprecated and will be removed in the near future</span></dd>
509
+ <script type="text/javascript">moveProgressBar('82.8');</script>
510
+ <dd class="spec passed"><span class="passed_spec_name">should preserve the relationships across the save / load boundary</span></dd>
511
+ </dl>
512
+ </div>
513
+ <div class="example_group">
514
+ <dl>
515
+ <dt id="example_group_35">RelaxDB::ReferencesManyProxy references_many#=</dt>
516
+ <script type="text/javascript">moveProgressBar('83.8');</script>
517
+ <dd class="spec passed"><span class="passed_spec_name">should not be invoked</span></dd>
518
+ </dl>
519
+ </div>
520
+ <div class="example_group">
521
+ <dl>
522
+ <dt id="example_group_36">RelaxDB::ReferencesManyProxy references_many#&lt;&lt;</dt>
523
+ <script type="text/javascript">moveProgressBar('84.8');</script>
524
+ <dd class="spec passed"><span class="passed_spec_name">should set the relationship on both sides</span></dd>
525
+ <script type="text/javascript">moveProgressBar('85.8');</script>
526
+ <dd class="spec passed"><span class="passed_spec_name">should not create duplicates when the same object is added more than once</span></dd>
527
+ <script type="text/javascript">moveProgressBar('86.8');</script>
528
+ <dd class="spec passed"><span class="passed_spec_name">should not create duplicates when reciprocal objects are added from opposite sides</span></dd>
529
+ </dl>
530
+ </div>
531
+ <div class="example_group">
532
+ <dl>
533
+ <dt id="example_group_37">RelaxDB::ReferencesManyProxy references_many#delete</dt>
534
+ <script type="text/javascript">moveProgressBar('87.8');</script>
535
+ <dd class="spec passed"><span class="passed_spec_name">should nullify relationship on both sides</span></dd>
536
+ </dl>
537
+ </div>
538
+ <div class="example_group">
539
+ <dl>
540
+ <dt id="example_group_38">RelaxDB::ReferencesManyProxy references_many owner#destroy</dt>
541
+ <script type="text/javascript">moveProgressBar('88.8');</script>
542
+ <dd class="spec passed"><span class="passed_spec_name">will not remove its membership from its peers in memory</span></dd>
543
+ <script type="text/javascript">moveProgressBar('89.8');</script>
544
+ <dd class="spec passed"><span class="passed_spec_name">should remove its membership from its peers in CouchDB</span></dd>
545
+ </dl>
546
+ </div>
547
+ <div class="example_group">
548
+ <dl>
549
+ <dt id="example_group_39">RelaxDB</dt>
550
+ <script type="text/javascript">moveProgressBar('90.9');</script>
551
+ <dd class="spec passed"><span class="passed_spec_name">should offer an example where behaviour is different with caching enabled and caching disabled</span></dd>
552
+ </dl>
553
+ </div>
554
+ <div class="example_group">
555
+ <dl>
556
+ <dt id="example_group_40">RelaxDB.create_object</dt>
557
+ <script type="text/javascript">moveProgressBar('91.9');</script>
558
+ <dd class="spec passed"><span class="passed_spec_name">should return an instance of a known object if passed a hash with a class key</span></dd>
559
+ <script type="text/javascript">moveProgressBar('92.9');</script>
560
+ <dd class="spec passed"><span class="passed_spec_name">should return an instance of a dynamically created object if no class key is provided</span></dd>
561
+ </dl>
562
+ </div>
563
+ <div class="example_group">
564
+ <dl>
565
+ <dt id="example_group_41">RelaxDB.bulk_save</dt>
566
+ <script type="text/javascript">moveProgressBar('93.9');</script>
567
+ <dd class="spec passed"><span class="passed_spec_name">should be invokable multiple times</span></dd>
568
+ <script type="text/javascript">moveProgressBar('94.9');</script>
569
+ <dd class="spec passed"><span class="passed_spec_name">should succeed when passed no args</span></dd>
570
+ </dl>
571
+ </div>
572
+ <div class="example_group">
573
+ <dl>
574
+ <dt id="example_group_42">RelaxDB::ViewObject</dt>
575
+ </dl>
576
+ </div>
577
+ <div class="example_group">
578
+ <dl>
579
+ <dt id="example_group_43">RelaxDB::ViewObject.new</dt>
580
+ <script type="text/javascript">moveProgressBar('95.9');</script>
581
+ <dd class="spec passed"><span class="passed_spec_name">should provide readers for the object passed in the hash</span></dd>
582
+ <script type="text/javascript">moveProgressBar('96.9');</script>
583
+ <dd class="spec passed"><span class="passed_spec_name">should try to convert objects ending in _at to a time</span></dd>
584
+ </dl>
585
+ </div>
586
+ <div class="example_group">
587
+ <dl>
588
+ <dt id="example_group_44">RelaxDB::ViewObject.create</dt>
589
+ <script type="text/javascript">moveProgressBar('97.9');</script>
590
+ <dd class="spec passed"><span class="passed_spec_name">should return an array of view objects when passed an array</span></dd>
591
+ <script type="text/javascript">moveProgressBar('98.9');</script>
592
+ <dd class="spec passed"><span class="passed_spec_name">should return a view object when passed a hash</span></dd>
593
+ <script type="text/javascript">moveProgressBar('100.0');</script>
594
+ <dd class="spec passed"><span class="passed_spec_name">should return a simple value when passed a primitive</span></dd>
595
+ </dl>
596
+ </div>
597
+ <script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>10.229154 seconds</strong>";</script>
598
+ <script type="text/javascript">document.getElementById('totals').innerHTML = "99 examples, 0 failures";</script>
599
+ </div>
600
+ </div>
601
+ </body>
602
+ </html>
@@ -0,0 +1,48 @@
1
+ module RelaxDB
2
+
3
+ #
4
+ # The AllDelegator allows clients to query CouchDB in a natural way
5
+ # FooDoc.all - returns all docs in CouchDB of type FooDoc
6
+ # FooDoc.all.sorted_by(:att1, :att2) - returns all docs in CouchDB of type FooDoc sorted by att1, then att2
7
+ # FooDoc.all.sorted_by(:att1) { |q| q.key("bar") } - returns all docs of type FooDoc where att1 equals "bar"
8
+ # FooDoc.all.destroy! - does what it says on the tin
9
+ #
10
+ class AllDelegator < Delegator
11
+
12
+ def initialize(klass)
13
+ super([])
14
+ @klass = klass
15
+ end
16
+
17
+ def __getobj__
18
+ view_path = "_view/#{@klass}/all"
19
+ map_function = ViewCreator.all(@klass)
20
+
21
+ @all = RelaxDB::retrieve(view_path, @klass, "all", map_function)
22
+ end
23
+
24
+ def sorted_by(*atts)
25
+ v = SortedByView.new(@klass.name, *atts)
26
+
27
+ q = Query.new(@klass.name, v.view_name)
28
+ yield q if block_given?
29
+
30
+ RelaxDB::retrieve(q.view_path, @klass, v.view_name, v.map_function)
31
+ end
32
+
33
+ # Note that this method leaves the corresponding DesignDoc for the associated class intact
34
+ def destroy!
35
+ each do |o|
36
+ # A reload is required for deleting objects with a self referential references_many relationship
37
+ # This makes all.destroy! very slow. Given that references_many is now deprecated and will
38
+ # soon be removed, the required reload is no longer performed.
39
+ # obj = RelaxDB.load(o._id)
40
+ # obj.destroy!
41
+
42
+ o.destroy!
43
+ end
44
+ end
45
+
46
+ end
47
+
48
+ end