hyper-resource 1.0.0.lap79 → 1.0.0.lap80

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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.yardopts +1 -0
  4. data/API.md +62 -0
  5. data/Gemfile +2 -0
  6. data/JSON_format.md +62 -0
  7. data/PubSub.md +20 -0
  8. data/README.md +2 -0
  9. data/Security.md +0 -0
  10. data/docs/HyperRecord/ClassMethods.html +2969 -0
  11. data/docs/HyperRecord/ClientInstanceMethods.html +1833 -0
  12. data/docs/HyperRecord/Collection.html +564 -0
  13. data/docs/HyperRecord/DummyValue.html +384 -0
  14. data/docs/HyperRecord/PubSub/ClassMethods.html +2047 -0
  15. data/docs/HyperRecord/PubSub.html +1679 -0
  16. data/docs/HyperRecord/ServerClassMethods.html +697 -0
  17. data/docs/HyperRecord.html +119 -0
  18. data/docs/Hyperloop/Resource/ClientDrivers.html +352 -0
  19. data/docs/Hyperloop/Resource/HTTP.html +1795 -0
  20. data/docs/Hyperloop/Resource/MethodsController.html +479 -0
  21. data/docs/Hyperloop/Resource/PropertiesController.html +225 -0
  22. data/docs/Hyperloop/Resource/PubSub/ClassMethods.html +105 -0
  23. data/docs/Hyperloop/Resource/PubSub.html +1210 -0
  24. data/docs/Hyperloop/Resource/RelationsController.html +529 -0
  25. data/docs/Hyperloop/Resource/ScopesController.html +380 -0
  26. data/docs/Hyperloop/Resource/SecurityError.html +124 -0
  27. data/docs/Hyperloop/Resource/SecurityGuards/ClassMethods.html +226 -0
  28. data/docs/Hyperloop/Resource/SecurityGuards.html +299 -0
  29. data/docs/Hyperloop/Resource.html +135 -0
  30. data/docs/Hyperloop.html +186 -0
  31. data/docs/_index.html +302 -0
  32. data/docs/class_list.html +51 -0
  33. data/docs/css/common.css +1 -0
  34. data/docs/css/full_list.css +58 -0
  35. data/docs/css/style.css +496 -0
  36. data/docs/file.API.html +138 -0
  37. data/docs/file.JSON_format.html +134 -0
  38. data/docs/file.PubSub.html +86 -0
  39. data/docs/file.README.html +192 -0
  40. data/docs/file_list.html +71 -0
  41. data/docs/frames.html +17 -0
  42. data/docs/index.html +192 -0
  43. data/docs/js/app.js +292 -0
  44. data/docs/js/full_list.js +216 -0
  45. data/docs/js/jquery.js +4 -0
  46. data/docs/method_list.html +1115 -0
  47. data/docs/top-level-namespace.html +110 -0
  48. data/hyper-resource.gemspec +19 -18
  49. data/lib/hyper_record/class_methods.rb +186 -3
  50. data/lib/hyper_record/client_instance_methods.rb +68 -3
  51. data/lib/hyper_record/collection.rb +19 -4
  52. data/lib/hyper_record/pub_sub.rb +92 -12
  53. data/lib/hyper_record/server_class_methods.rb +15 -0
  54. data/lib/hyperloop/resource/client_drivers.rb +2 -0
  55. data/lib/hyperloop/resource/http.rb +33 -22
  56. data/lib/hyperloop/resource/pub_sub.rb +2 -0
  57. data/lib/hyperloop/resource/version.rb +1 -1
  58. metadata +61 -2
@@ -0,0 +1,2969 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Module: HyperRecord::ClassMethods
8
+
9
+ &mdash; Documentation by YARD 0.9.13
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="../css/style.css" type="text/css" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="../css/common.css" type="text/css" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ pathId = "HyperRecord::ClassMethods";
19
+ relpath = '../';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="../class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="../_index.html">Index (C)</a> &raquo;
40
+ <span class='title'><span class='object_link'><a href="../HyperRecord.html" title="HyperRecord (module)">HyperRecord</a></span></span>
41
+ &raquo;
42
+ <span class="title">ClassMethods</span>
43
+
44
+ </div>
45
+
46
+ <div id="search">
47
+
48
+ <a class="full_list_link" id="class_list_link"
49
+ href="../class_list.html">
50
+
51
+ <svg width="24" height="24">
52
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
+ </svg>
56
+ </a>
57
+
58
+ </div>
59
+ <div class="clear"></div>
60
+ </div>
61
+
62
+ <div id="content"><h1>Module: HyperRecord::ClassMethods
63
+
64
+
65
+
66
+ </h1>
67
+ <div class="box_info">
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+ <dl>
80
+ <dt>Defined in:</dt>
81
+ <dd>lib/hyper_record/class_methods.rb</dd>
82
+ </dl>
83
+
84
+ </div>
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+ <h2>
95
+ Instance Method Summary
96
+ <small><a href="#" class="summary_toggle">collapse</a></small>
97
+ </h2>
98
+
99
+ <ul class="summary">
100
+
101
+ <li class="public ">
102
+ <span class="summary_signature">
103
+
104
+ <a href="#all-instance_method" title="#all (instance method)">#<strong>all</strong> &#x21d2; HyperRecord::Collection </a>
105
+
106
+
107
+
108
+ </span>
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+ <span class="summary_desc"><div class='inline'>
119
+ <p>all records of current HyperRecord class.</p>
120
+ </div></span>
121
+
122
+ </li>
123
+
124
+
125
+ <li class="public ">
126
+ <span class="summary_signature">
127
+
128
+ <a href="#belongs_to-instance_method" title="#belongs_to (instance method)">#<strong>belongs_to</strong>(direction, name = nil, options = { type: nil }) &#x21d2; Object </a>
129
+
130
+
131
+
132
+ </span>
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+ <span class="summary_desc"><div class='inline'>
143
+ <p>DSL macro to declare a belongs_to relationship options are for the server
144
+ side ORM, on the client side options are ignored.</p>
145
+ </div></span>
146
+
147
+ </li>
148
+
149
+
150
+ <li class="public ">
151
+ <span class="summary_signature">
152
+
153
+ <a href="#create-instance_method" title="#create (instance method)">#<strong>create</strong>(record_hash = {}) &#x21d2; HyperRecord </a>
154
+
155
+
156
+
157
+ </span>
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+ <span class="summary_desc"><div class='inline'>
168
+ <p>create a new instance of current HyperRecord class and save it to the db.</p>
169
+ </div></span>
170
+
171
+ </li>
172
+
173
+
174
+ <li class="public ">
175
+ <span class="summary_signature">
176
+
177
+ <a href="#find-instance_method" title="#find (instance method)">#<strong>find</strong>(id) &#x21d2; HyperRecord </a>
178
+
179
+
180
+
181
+ </span>
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+ <span class="summary_desc"><div class='inline'>
192
+ <p>find a existing instance of current HyperRecord class.</p>
193
+ </div></span>
194
+
195
+ </li>
196
+
197
+
198
+ <li class="public ">
199
+ <span class="summary_signature">
200
+
201
+ <a href="#has_and_belongs_to_many-instance_method" title="#has_and_belongs_to_many (instance method)">#<strong>has_and_belongs_to_many</strong>(direction, name = nil, options = { type: nil }) &#x21d2; Object </a>
202
+
203
+
204
+
205
+ </span>
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+ <span class="summary_desc"><div class='inline'>
216
+ <p>DSL macro to declare a has_and_belongs_many relationship options are for
217
+ the server side ORM, on the client side options are ignored.</p>
218
+ </div></span>
219
+
220
+ </li>
221
+
222
+
223
+ <li class="public ">
224
+ <span class="summary_signature">
225
+
226
+ <a href="#has_many-instance_method" title="#has_many (instance method)">#<strong>has_many</strong>(direction, name = nil, options = { type: nil }) &#x21d2; Object </a>
227
+
228
+
229
+
230
+ </span>
231
+
232
+
233
+
234
+
235
+
236
+
237
+
238
+
239
+
240
+ <span class="summary_desc"><div class='inline'>
241
+ <p>DSL macro to declare a has_many relationship options are for the server
242
+ side ORM, on the client side options are ignored.</p>
243
+ </div></span>
244
+
245
+ </li>
246
+
247
+
248
+ <li class="public ">
249
+ <span class="summary_signature">
250
+
251
+ <a href="#has_one-instance_method" title="#has_one (instance method)">#<strong>has_one</strong>(direction, name, options = { type: nil }) &#x21d2; Object </a>
252
+
253
+
254
+
255
+ </span>
256
+
257
+
258
+
259
+
260
+
261
+
262
+
263
+
264
+
265
+ <span class="summary_desc"><div class='inline'>
266
+ <p>DSL macro to declare a has_one relationship options are for the server side
267
+ ORM, on the client side options are ignored.</p>
268
+ </div></span>
269
+
270
+ </li>
271
+
272
+
273
+ <li class="public ">
274
+ <span class="summary_signature">
275
+
276
+ <a href="#new-instance_method" title="#new (instance method)">#<strong>new</strong>(record_hash = {}) &#x21d2; HyperRecord </a>
277
+
278
+
279
+
280
+ </span>
281
+
282
+
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+ <span class="summary_desc"><div class='inline'>
291
+ <p>create a new instance of current HyperRecord class or return a exisitng one
292
+ if a id in the hash is given.</p>
293
+ </div></span>
294
+
295
+ </li>
296
+
297
+
298
+ <li class="public ">
299
+ <span class="summary_signature">
300
+
301
+ <a href="#promise_all-instance_method" title="#promise_all (instance method)">#<strong>promise_all</strong> &#x21d2; Promise </a>
302
+
303
+
304
+
305
+ </span>
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+ <span class="summary_desc"><div class='inline'>
316
+ <p>all records of current HyperRecord class.</p>
317
+ </div></span>
318
+
319
+ </li>
320
+
321
+
322
+ <li class="public ">
323
+ <span class="summary_signature">
324
+
325
+ <a href="#promise_create-instance_method" title="#promise_create (instance method)">#<strong>promise_create</strong>(record_hash = {}) &#x21d2; Promise </a>
326
+
327
+
328
+
329
+ </span>
330
+
331
+
332
+
333
+
334
+
335
+
336
+
337
+
338
+
339
+ <span class="summary_desc"><div class='inline'>
340
+ <p>create a new instance of current HyperRecord class and save it to the db.</p>
341
+ </div></span>
342
+
343
+ </li>
344
+
345
+
346
+ <li class="public ">
347
+ <span class="summary_signature">
348
+
349
+ <a href="#promise_find-instance_method" title="#promise_find (instance method)">#<strong>promise_find</strong>(id) &#x21d2; Promise </a>
350
+
351
+
352
+
353
+ </span>
354
+
355
+
356
+
357
+
358
+
359
+
360
+
361
+
362
+
363
+ <span class="summary_desc"><div class='inline'>
364
+ <p>find a existing instance of current HyperRecord class.</p>
365
+ </div></span>
366
+
367
+ </li>
368
+
369
+
370
+ <li class="public ">
371
+ <span class="summary_signature">
372
+
373
+ <a href="#property-instance_method" title="#property (instance method)">#<strong>property</strong>(name, options = {}) &#x21d2; Object </a>
374
+
375
+
376
+
377
+ </span>
378
+
379
+
380
+
381
+
382
+
383
+
384
+
385
+
386
+
387
+ <span class="summary_desc"><div class='inline'>
388
+ <p>declare a property (attribute) for the current HyperRecord class This macro
389
+ defines additional methods:.</p>
390
+ </div></span>
391
+
392
+ </li>
393
+
394
+
395
+ <li class="public ">
396
+ <span class="summary_signature">
397
+
398
+ <a href="#record_cached%3F-instance_method" title="#record_cached? (instance method)">#<strong>record_cached?</strong>(id) &#x21d2; Boolean </a>
399
+
400
+
401
+
402
+ </span>
403
+
404
+
405
+
406
+
407
+
408
+
409
+
410
+
411
+
412
+ <span class="summary_desc"><div class='inline'>
413
+ <p>check if a record of current HyperRecord class has been cached already.</p>
414
+ </div></span>
415
+
416
+ </li>
417
+
418
+
419
+ <li class="public ">
420
+ <span class="summary_signature">
421
+
422
+ <a href="#reflections-instance_method" title="#reflections (instance method)">#<strong>reflections</strong> &#x21d2; Hash </a>
423
+
424
+
425
+
426
+ </span>
427
+
428
+
429
+
430
+
431
+
432
+
433
+
434
+
435
+
436
+ <span class="summary_desc"><div class='inline'>
437
+ <p>introspect on current HyperRecord class.</p>
438
+ </div></span>
439
+
440
+ </li>
441
+
442
+
443
+ <li class="public ">
444
+ <span class="summary_signature">
445
+
446
+ <a href="#resource_base_uri-instance_method" title="#resource_base_uri (instance method)">#<strong>resource_base_uri</strong> &#x21d2; String </a>
447
+
448
+
449
+
450
+ </span>
451
+
452
+
453
+
454
+
455
+
456
+
457
+
458
+
459
+
460
+ <span class="summary_desc"><div class='inline'>
461
+ <p>get the resource base uri that is used for api calls, used internally.</p>
462
+ </div></span>
463
+
464
+ </li>
465
+
466
+
467
+ <li class="public ">
468
+ <span class="summary_signature">
469
+
470
+ <a href="#rest_class_method-instance_method" title="#rest_class_method (instance method)">#<strong>rest_class_method</strong>(name, options = { default_result: &#39;...&#39; }) &#x21d2; Object </a>
471
+
472
+
473
+
474
+ </span>
475
+
476
+
477
+
478
+
479
+
480
+
481
+
482
+
483
+
484
+ <span class="summary_desc"><div class='inline'>
485
+ <p>macro define rest_class_methods, RPC on class level of current HyperRecord
486
+ class.</p>
487
+ </div></span>
488
+
489
+ </li>
490
+
491
+
492
+ <li class="public ">
493
+ <span class="summary_signature">
494
+
495
+ <a href="#rest_class_methods-instance_method" title="#rest_class_methods (instance method)">#<strong>rest_class_methods</strong> &#x21d2; Hash </a>
496
+
497
+
498
+
499
+ </span>
500
+
501
+
502
+
503
+
504
+
505
+
506
+
507
+
508
+
509
+ <span class="summary_desc"><div class='inline'>
510
+ <p>introspect on available rest_class_methods.</p>
511
+ </div></span>
512
+
513
+ </li>
514
+
515
+
516
+ <li class="public ">
517
+ <span class="summary_signature">
518
+
519
+ <a href="#rest_method-instance_method" title="#rest_method (instance method)">#<strong>rest_method</strong>(name, options = { default_result: &#39;...&#39; }) &#x21d2; Object </a>
520
+
521
+
522
+
523
+ </span>
524
+
525
+
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+ <span class="summary_desc"><div class='inline'>
534
+ <p>macro define rest_class_methods, RPC on instance level of a record of
535
+ current HyperRecord class.</p>
536
+ </div></span>
537
+
538
+ </li>
539
+
540
+
541
+ <li class="public ">
542
+ <span class="summary_signature">
543
+
544
+ <a href="#scope-instance_method" title="#scope (instance method)">#<strong>scope</strong>(name, options) &#x21d2; Object </a>
545
+
546
+
547
+
548
+ </span>
549
+
550
+
551
+
552
+
553
+
554
+
555
+
556
+
557
+
558
+ <span class="summary_desc"><div class='inline'>
559
+ <p>DSL macro to declare a scope options are for the server side ORM, on the
560
+ client side options are ignored.</p>
561
+ </div></span>
562
+
563
+ </li>
564
+
565
+
566
+ <li class="public ">
567
+ <span class="summary_signature">
568
+
569
+ <a href="#scopes-instance_method" title="#scopes (instance method)">#<strong>scopes</strong> &#x21d2; Hash </a>
570
+
571
+
572
+
573
+ </span>
574
+
575
+
576
+
577
+
578
+
579
+
580
+
581
+
582
+
583
+ <span class="summary_desc"><div class='inline'>
584
+ <p>introspect on available scopes.</p>
585
+ </div></span>
586
+
587
+ </li>
588
+
589
+
590
+ </ul>
591
+
592
+
593
+
594
+
595
+ <div id="instance_method_details" class="method_details_list">
596
+ <h2>Instance Method Details</h2>
597
+
598
+
599
+ <div class="method_details first">
600
+ <h3 class="signature first" id="all-instance_method">
601
+
602
+ #<strong>all</strong> &#x21d2; <tt><span class='object_link'><a href="Collection.html" title="HyperRecord::Collection (class)">HyperRecord::Collection</a></span></tt>
603
+
604
+
605
+
606
+
607
+
608
+ </h3><div class="docstring">
609
+ <div class="discussion">
610
+
611
+ <p>all records of current HyperRecord class</p>
612
+
613
+
614
+ </div>
615
+ </div>
616
+ <div class="tags">
617
+
618
+ <p class="tag_title">Returns:</p>
619
+ <ul class="return">
620
+
621
+ <li>
622
+
623
+
624
+ <span class='type'>(<tt><span class='object_link'><a href="Collection.html" title="HyperRecord::Collection (class)">HyperRecord::Collection</a></span></tt>)</span>
625
+
626
+
627
+
628
+ </li>
629
+
630
+ </ul>
631
+
632
+ </div><table class="source_code">
633
+ <tr>
634
+ <td>
635
+ <pre class="lines">
636
+
637
+
638
+ 25
639
+ 26
640
+ 27
641
+ 28
642
+ 29
643
+ 30
644
+ 31
645
+ 32
646
+ 33
647
+ 34</pre>
648
+ </td>
649
+ <td>
650
+ <pre class="code"><span class="info file"># File 'lib/hyper_record/class_methods.rb', line 25</span>
651
+
652
+ <span class='kw'>def</span> <span class='id identifier rubyid_all'>all</span>
653
+ <span class='id identifier rubyid__register_class_observer'>_register_class_observer</span>
654
+ <span class='kw'>if</span> <span class='id identifier rubyid__class_fetch_states'>_class_fetch_states</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='symbol'>:all</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>fi</span><span class='tstring_end'>&#39;</span></span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid__class_fetch_states'>_class_fetch_states</span><span class='lbracket'>[</span><span class='symbol'>:all</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='comment'># if f_etched or i_n progress of fetching
655
+ </span> <span class='id identifier rubyid_collection'>collection</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../HyperRecord.html" title="HyperRecord (module)">HyperRecord</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Collection.html" title="HyperRecord::Collection (class)">Collection</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Collection.html#initialize-instance_method" title="HyperRecord::Collection#initialize (method)">new</a></span></span>
656
+ <span class='id identifier rubyid__record_cache'>_record_cache</span><span class='period'>.</span><span class='id identifier rubyid_each_value'>each_value</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_record'>record</span><span class='op'>|</span> <span class='id identifier rubyid_collection'>collection</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span><span class='lparen'>(</span><span class='id identifier rubyid_record'>record</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
657
+ <span class='kw'>return</span> <span class='id identifier rubyid_collection'>collection</span>
658
+ <span class='kw'>end</span>
659
+ <span class='id identifier rubyid_promise_all'>promise_all</span>
660
+ <span class='const'><span class='object_link'><a href="../HyperRecord.html" title="HyperRecord (module)">HyperRecord</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Collection.html" title="HyperRecord::Collection (class)">Collection</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Collection.html#initialize-instance_method" title="HyperRecord::Collection#initialize (method)">new</a></span></span>
661
+ <span class='kw'>end</span></pre>
662
+ </td>
663
+ </tr>
664
+ </table>
665
+ </div>
666
+
667
+ <div class="method_details ">
668
+ <h3 class="signature " id="belongs_to-instance_method">
669
+
670
+ #<strong>belongs_to</strong>(direction, name = nil, options = { type: nil }) &#x21d2; <tt>Object</tt>
671
+
672
+
673
+
674
+
675
+
676
+ </h3><div class="docstring">
677
+ <div class="discussion">
678
+
679
+ <p>DSL macro to declare a belongs_to relationship options are for the server
680
+ side ORM, on the client side options are ignored</p>
681
+
682
+ <p>This macro defines additional methods: <a href="name">promise_</a></p>
683
+
684
+ <pre class="code ruby"><code class="ruby">return [Promise] on success the .then block will receive a [HyperRecord::Collection] as arg
685
+ on failure the .fail block will receive the HTTP response object as arg
686
+ </code></pre>
687
+
688
+
689
+ </div>
690
+ </div>
691
+ <div class="tags">
692
+ <p class="tag_title">Parameters:</p>
693
+ <ul class="param">
694
+
695
+ <li>
696
+
697
+ <span class='name'>direction</span>
698
+
699
+
700
+ <span class='type'>(<tt>String</tt>, <tt>Symbol</tt>)</span>
701
+
702
+
703
+
704
+ &mdash;
705
+ <div class='inline'>
706
+ <p>for ORMs like Neo4j: the direction of the graph edge, for ORMs like
707
+ ActiveRecord: the name of the relation</p>
708
+ </div>
709
+
710
+ </li>
711
+
712
+ <li>
713
+
714
+ <span class='name'>name</span>
715
+
716
+
717
+ <span class='type'>(<tt>String</tt>, <tt>Symbol</tt>, <tt>Hash</tt>)</span>
718
+
719
+
720
+ <em class="default">(defaults to: <tt>nil</tt>)</em>
721
+
722
+
723
+ &mdash;
724
+ <div class='inline'>
725
+ <p>for ORMs like Neo4j: the name of the relation, for ORMs like ActiveRecord:
726
+ further options</p>
727
+ </div>
728
+
729
+ </li>
730
+
731
+ <li>
732
+
733
+ <span class='name'>options</span>
734
+
735
+
736
+ <span class='type'>(<tt>Hash</tt>)</span>
737
+
738
+
739
+ <em class="default">(defaults to: <tt>{ type: nil }</tt>)</em>
740
+
741
+
742
+ &mdash;
743
+ <div class='inline'>
744
+ <p>further options for ORMs like Neo4j</p>
745
+ </div>
746
+
747
+ </li>
748
+
749
+ </ul>
750
+
751
+
752
+ </div><table class="source_code">
753
+ <tr>
754
+ <td>
755
+ <pre class="lines">
756
+
757
+
758
+ 65
759
+ 66
760
+ 67
761
+ 68
762
+ 69
763
+ 70
764
+ 71
765
+ 72
766
+ 73
767
+ 74
768
+ 75
769
+ 76
770
+ 77
771
+ 78
772
+ 79
773
+ 80
774
+ 81
775
+ 82
776
+ 83
777
+ 84
778
+ 85
779
+ 86
780
+ 87
781
+ 88
782
+ 89
783
+ 90
784
+ 91
785
+ 92
786
+ 93
787
+ 94
788
+ 95
789
+ 96
790
+ 97
791
+ 98
792
+ 99
793
+ 100
794
+ 101
795
+ 102
796
+ 103
797
+ 104
798
+ 105
799
+ 106
800
+ 107
801
+ 108
802
+ 109
803
+ 110
804
+ 111
805
+ 112
806
+ 113
807
+ 114
808
+ 115
809
+ 116
810
+ 117
811
+ 118</pre>
812
+ </td>
813
+ <td>
814
+ <pre class="code"><span class="info file"># File 'lib/hyper_record/class_methods.rb', line 65</span>
815
+
816
+ <span class='kw'>def</span> <span class='id identifier rubyid_belongs_to'>belongs_to</span><span class='lparen'>(</span><span class='id identifier rubyid_direction'>direction</span><span class='comma'>,</span> <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>type:</span> <span class='kw'>nil</span> <span class='rbrace'>}</span><span class='rparen'>)</span>
817
+ <span class='kw'>if</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
818
+ <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
819
+ <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_direction'>direction</span>
820
+ <span class='id identifier rubyid_direction'>direction</span> <span class='op'>=</span> <span class='kw'>nil</span>
821
+ <span class='kw'>elsif</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Proc</span><span class='rparen'>)</span>
822
+ <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_direction'>direction</span>
823
+ <span class='id identifier rubyid_direction'>direction</span> <span class='op'>=</span> <span class='kw'>nil</span>
824
+ <span class='kw'>elsif</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
825
+ <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_direction'>direction</span>
826
+ <span class='kw'>end</span>
827
+ <span class='id identifier rubyid_reflections'>reflections</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>direction:</span> <span class='id identifier rubyid_direction'>direction</span><span class='comma'>,</span> <span class='label'>type:</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:type</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='label'>kind:</span> <span class='symbol'>:belongs_to</span> <span class='rbrace'>}</span>
828
+
829
+ <span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>promise_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>do</span>
830
+ <span class='ivar'>@fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>i</span><span class='tstring_end'>&#39;</span></span>
831
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid__promise_get'>_promise_get</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_resource_base_uri'>resource_base_uri</span><span class='embexpr_end'>}</span><span class='tstring_content'>/</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span><span class='embexpr_end'>}</span><span class='tstring_content'>/relations/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>.json?timestamp=</span><span class='embexpr_beg'>#{</span><span class='backtick'>`</span><span class='tstring_content'>Date.now() + Math.random()</span><span class='tstring_end'>`</span></span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_then'>then</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_response'>response</span><span class='op'>|</span>
832
+ <span class='ivar'>@relations</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid__convert_json_hash_to_record'>_convert_json_hash_to_record</span><span class='lparen'>(</span><span class='id identifier rubyid_response'>response</span><span class='period'>.</span><span class='id identifier rubyid_json'>json</span><span class='lbracket'>[</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_underscore'>underscore</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='rparen'>)</span>
833
+ <span class='ivar'>@fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>f</span><span class='tstring_end'>&#39;</span></span>
834
+ <span class='id identifier rubyid__notify_observers'>_notify_observers</span>
835
+ <span class='ivar'>@relations</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
836
+ <span class='kw'>end</span><span class='period'>.</span><span class='id identifier rubyid_fail'>fail</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_response'>response</span><span class='op'>|</span>
837
+ <span class='id identifier rubyid_error_message'>error_message</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='embexpr_end'>}</span><span class='tstring_content'>[</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span><span class='embexpr_end'>}</span><span class='tstring_content'>].</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>, a belongs_to association, failed to fetch records!</span><span class='tstring_end'>&quot;</span></span>
838
+ <span class='backtick'>`</span><span class='tstring_content'>console.error(error_message)</span><span class='tstring_end'>`</span></span>
839
+ <span class='id identifier rubyid_response'>response</span>
840
+ <span class='kw'>end</span>
841
+ <span class='kw'>end</span>
842
+ <span class='comment'># @!method [name] get records of the relation
843
+ </span> <span class='comment'># @return [HyperRecord::Collection] either a empty one, if the data has not been fetched yet, or the
844
+ </span> <span class='comment'># collection with the real data, if it has been fetched already
845
+ </span> <span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='kw'>do</span>
846
+ <span class='id identifier rubyid__register_observer'>_register_observer</span>
847
+ <span class='kw'>if</span> <span class='ivar'>@fetch_states</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>fi</span><span class='tstring_end'>&#39;</span></span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='ivar'>@fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='rparen'>)</span>
848
+ <span class='ivar'>@relations</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
849
+ <span class='kw'>elsif</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span>
850
+ <span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>promise_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
851
+ <span class='ivar'>@relations</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
852
+ <span class='kw'>else</span>
853
+ <span class='ivar'>@relations</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
854
+ <span class='kw'>end</span>
855
+ <span class='kw'>end</span>
856
+ <span class='comment'># @!method update_[name] mark internal structures so that the relation data is updated once it is requested again
857
+ </span> <span class='comment'># @return nil
858
+ </span> <span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>update_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>do</span>
859
+ <span class='ivar'>@fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>u</span><span class='tstring_end'>&#39;</span></span>
860
+ <span class='kw'>nil</span>
861
+ <span class='kw'>end</span>
862
+ <span class='comment'># TODO
863
+ </span> <span class='comment'># define_method(&quot;#{name}=&quot;) do |arg|
864
+ </span> <span class='comment'># _register_observer
865
+ </span> <span class='comment'># @relations[name] = arg
866
+ </span> <span class='comment'># @fetch_states[name] = &#39;f&#39;
867
+ </span> <span class='comment'># @relations[name]
868
+ </span> <span class='comment'># end
869
+ </span><span class='kw'>end</span></pre>
870
+ </td>
871
+ </tr>
872
+ </table>
873
+ </div>
874
+
875
+ <div class="method_details ">
876
+ <h3 class="signature " id="create-instance_method">
877
+
878
+ #<strong>create</strong>(record_hash = {}) &#x21d2; <tt><span class='object_link'><a href="../HyperRecord.html" title="HyperRecord (module)">HyperRecord</a></span></tt>
879
+
880
+
881
+
882
+
883
+
884
+ </h3><div class="docstring">
885
+ <div class="discussion">
886
+
887
+ <p>create a new instance of current HyperRecord class and save it to the db</p>
888
+
889
+
890
+ </div>
891
+ </div>
892
+ <div class="tags">
893
+ <p class="tag_title">Parameters:</p>
894
+ <ul class="param">
895
+
896
+ <li>
897
+
898
+ <span class='name'>record_hash</span>
899
+
900
+
901
+ <span class='type'>(<tt>Hash</tt>)</span>
902
+
903
+
904
+ <em class="default">(defaults to: <tt>{}</tt>)</em>
905
+
906
+
907
+ &mdash;
908
+ <div class='inline'>
909
+ <p>optional data for the record</p>
910
+ </div>
911
+
912
+ </li>
913
+
914
+ </ul>
915
+
916
+ <p class="tag_title">Returns:</p>
917
+ <ul class="return">
918
+
919
+ <li>
920
+
921
+
922
+ <span class='type'>(<tt><span class='object_link'><a href="../HyperRecord.html" title="HyperRecord (module)">HyperRecord</a></span></tt>)</span>
923
+
924
+
925
+
926
+ &mdash;
927
+ <div class='inline'>
928
+ <p>the new instance</p>
929
+ </div>
930
+
931
+ </li>
932
+
933
+ </ul>
934
+
935
+ </div><table class="source_code">
936
+ <tr>
937
+ <td>
938
+ <pre class="lines">
939
+
940
+
941
+ 124
942
+ 125
943
+ 126
944
+ 127</pre>
945
+ </td>
946
+ <td>
947
+ <pre class="code"><span class="info file"># File 'lib/hyper_record/class_methods.rb', line 124</span>
948
+
949
+ <span class='kw'>def</span> <span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span><span class='id identifier rubyid_record_hash'>record_hash</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
950
+ <span class='id identifier rubyid_record'>record</span> <span class='op'>=</span> <span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_record_hash'>record_hash</span><span class='rparen'>)</span>
951
+ <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_save'>save</span>
952
+ <span class='kw'>end</span></pre>
953
+ </td>
954
+ </tr>
955
+ </table>
956
+ </div>
957
+
958
+ <div class="method_details ">
959
+ <h3 class="signature " id="find-instance_method">
960
+
961
+ #<strong>find</strong>(id) &#x21d2; <tt><span class='object_link'><a href="../HyperRecord.html" title="HyperRecord (module)">HyperRecord</a></span></tt>
962
+
963
+
964
+
965
+
966
+
967
+ </h3><div class="docstring">
968
+ <div class="discussion">
969
+
970
+ <p>find a existing instance of current HyperRecord class</p>
971
+
972
+
973
+ </div>
974
+ </div>
975
+ <div class="tags">
976
+ <p class="tag_title">Parameters:</p>
977
+ <ul class="param">
978
+
979
+ <li>
980
+
981
+ <span class='name'>id</span>
982
+
983
+
984
+ <span class='type'>(<tt>String</tt>)</span>
985
+
986
+
987
+
988
+ &mdash;
989
+ <div class='inline'>
990
+ <p>id of the record to find</p>
991
+ </div>
992
+
993
+ </li>
994
+
995
+ </ul>
996
+
997
+ <p class="tag_title">Returns:</p>
998
+ <ul class="return">
999
+
1000
+ <li>
1001
+
1002
+
1003
+ <span class='type'>(<tt><span class='object_link'><a href="../HyperRecord.html" title="HyperRecord (module)">HyperRecord</a></span></tt>)</span>
1004
+
1005
+
1006
+
1007
+ </li>
1008
+
1009
+ </ul>
1010
+
1011
+ </div><table class="source_code">
1012
+ <tr>
1013
+ <td>
1014
+ <pre class="lines">
1015
+
1016
+
1017
+ 143
1018
+ 144
1019
+ 145
1020
+ 146
1021
+ 147
1022
+ 148
1023
+ 149
1024
+ 150
1025
+ 151
1026
+ 152
1027
+ 153
1028
+ 154
1029
+ 155
1030
+ 156
1031
+ 157
1032
+ 158
1033
+ 159
1034
+ 160</pre>
1035
+ </td>
1036
+ <td>
1037
+ <pre class="code"><span class="info file"># File 'lib/hyper_record/class_methods.rb', line 143</span>
1038
+
1039
+ <span class='kw'>def</span> <span class='id identifier rubyid_find'>find</span><span class='lparen'>(</span><span class='id identifier rubyid_id'>id</span><span class='rparen'>)</span>
1040
+ <span class='id identifier rubyid_sid'>sid</span> <span class='op'>=</span> <span class='id identifier rubyid_id'>id</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
1041
+ <span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>if</span> <span class='id identifier rubyid_sid'>sid</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span>
1042
+ <span class='kw'>return</span> <span class='id identifier rubyid__record_cache'>_record_cache</span><span class='lbracket'>[</span><span class='id identifier rubyid_sid'>sid</span><span class='rbracket'>]</span> <span class='kw'>if</span> <span class='id identifier rubyid__record_cache'>_record_cache</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_sid'>sid</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid__class_fetch_states'>_class_fetch_states</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>record_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_id'>id</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>f</span><span class='tstring_end'>&#39;</span></span>
1043
+ <span class='id identifier rubyid_observer'>observer</span> <span class='op'>=</span> <span class='const'>React</span><span class='op'>::</span><span class='const'>State</span><span class='period'>.</span><span class='id identifier rubyid_current_observer'>current_observer</span>
1044
+ <span class='id identifier rubyid_record_in_progress'>record_in_progress</span> <span class='op'>=</span> <span class='kw'>if</span> <span class='id identifier rubyid__record_cache'>_record_cache</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_sid'>sid</span><span class='rparen'>)</span>
1045
+ <span class='id identifier rubyid__record_cache'>_record_cache</span><span class='lbracket'>[</span><span class='id identifier rubyid_sid'>sid</span><span class='rbracket'>]</span>
1046
+ <span class='kw'>else</span>
1047
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='label'>id:</span> <span class='id identifier rubyid_id'>id</span><span class='rparen'>)</span>
1048
+ <span class='kw'>end</span>
1049
+ <span class='id identifier rubyid_record_in_progress_key'>record_in_progress_key</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='embexpr_end'>}</span><span class='tstring_content'>_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_record_in_progress'>record_in_progress</span><span class='period'>.</span><span class='id identifier rubyid_object_id'>object_id</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
1050
+ <span class='const'>React</span><span class='op'>::</span><span class='const'>State</span><span class='period'>.</span><span class='id identifier rubyid_get_state'>get_state</span><span class='lparen'>(</span><span class='id identifier rubyid_observer'>observer</span><span class='comma'>,</span> <span class='id identifier rubyid_record_in_progress_key'>record_in_progress_key</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_observer'>observer</span>
1051
+ <span class='kw'>return</span> <span class='id identifier rubyid__record_cache'>_record_cache</span><span class='lbracket'>[</span><span class='id identifier rubyid_sid'>sid</span><span class='rbracket'>]</span> <span class='kw'>if</span> <span class='id identifier rubyid__record_cache'>_record_cache</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_sid'>sid</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid__class_fetch_states'>_class_fetch_states</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>record_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_id'>id</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>i</span><span class='tstring_end'>&#39;</span></span>
1052
+ <span class='id identifier rubyid__promise_find'>_promise_find</span><span class='lparen'>(</span><span class='id identifier rubyid_id'>id</span><span class='comma'>,</span> <span class='id identifier rubyid_record_in_progress'>record_in_progress</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_then'>then</span> <span class='kw'>do</span>
1053
+ <span class='const'>React</span><span class='op'>::</span><span class='const'>State</span><span class='period'>.</span><span class='id identifier rubyid_set_state'>set_state</span><span class='lparen'>(</span><span class='id identifier rubyid_observer'>observer</span><span class='comma'>,</span> <span class='id identifier rubyid_record_in_progress_key'>record_in_progress_key</span><span class='comma'>,</span> <span class='backtick'>`</span><span class='tstring_content'>Date.now() + Math.random()</span><span class='tstring_end'>`</span></span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_observer'>observer</span>
1054
+ <span class='kw'>end</span>
1055
+ <span class='id identifier rubyid_record_in_progress'>record_in_progress</span>
1056
+ <span class='kw'>end</span></pre>
1057
+ </td>
1058
+ </tr>
1059
+ </table>
1060
+ </div>
1061
+
1062
+ <div class="method_details ">
1063
+ <h3 class="signature " id="has_and_belongs_to_many-instance_method">
1064
+
1065
+ #<strong>has_and_belongs_to_many</strong>(direction, name = nil, options = { type: nil }) &#x21d2; <tt>Object</tt>
1066
+
1067
+
1068
+
1069
+
1070
+
1071
+ </h3><div class="docstring">
1072
+ <div class="discussion">
1073
+
1074
+ <p>DSL macro to declare a has_and_belongs_many relationship options are for
1075
+ the server side ORM, on the client side options are ignored</p>
1076
+
1077
+ <p>This macro defines additional methods:</p>
1078
+
1079
+
1080
+ </div>
1081
+ </div>
1082
+ <div class="tags">
1083
+ <p class="tag_title">Parameters:</p>
1084
+ <ul class="param">
1085
+
1086
+ <li>
1087
+
1088
+ <span class='name'>direction</span>
1089
+
1090
+
1091
+ <span class='type'>(<tt>String</tt>)</span>
1092
+
1093
+
1094
+
1095
+ &mdash;
1096
+ <div class='inline'>
1097
+ <p>or [Symbol] for ORMs like Neo4j: the direction of the graph edge, for ORMs
1098
+ like ActiveRecord: the name of the relation</p>
1099
+ </div>
1100
+
1101
+ </li>
1102
+
1103
+ <li>
1104
+
1105
+ <span class='name'>name</span>
1106
+
1107
+
1108
+ <span class='type'>(<tt>String</tt>)</span>
1109
+
1110
+
1111
+ <em class="default">(defaults to: <tt>nil</tt>)</em>
1112
+
1113
+
1114
+ &mdash;
1115
+ <div class='inline'>
1116
+ <p>or [Symbol] or [Hash] for ORMs like Neo4j: the name of the relation, for
1117
+ ORMs like ActiveRecord: further options</p>
1118
+ </div>
1119
+
1120
+ </li>
1121
+
1122
+ <li>
1123
+
1124
+ <span class='name'>options</span>
1125
+
1126
+
1127
+ <span class='type'>(<tt>Hash</tt>)</span>
1128
+
1129
+
1130
+ <em class="default">(defaults to: <tt>{ type: nil }</tt>)</em>
1131
+
1132
+
1133
+ &mdash;
1134
+ <div class='inline'>
1135
+ <p>further options for ORMs like Neo4j</p>
1136
+ </div>
1137
+
1138
+ </li>
1139
+
1140
+ </ul>
1141
+
1142
+
1143
+ </div><table class="source_code">
1144
+ <tr>
1145
+ <td>
1146
+ <pre class="lines">
1147
+
1148
+
1149
+ 204
1150
+ 205
1151
+ 206
1152
+ 207
1153
+ 208
1154
+ 209
1155
+ 210
1156
+ 211
1157
+ 212
1158
+ 213
1159
+ 214
1160
+ 215
1161
+ 216
1162
+ 217
1163
+ 218
1164
+ 219
1165
+ 220
1166
+ 221
1167
+ 222
1168
+ 223
1169
+ 224
1170
+ 225
1171
+ 226
1172
+ 227
1173
+ 228
1174
+ 229
1175
+ 230
1176
+ 231
1177
+ 232
1178
+ 233
1179
+ 234
1180
+ 235
1181
+ 236
1182
+ 237
1183
+ 238
1184
+ 239
1185
+ 240
1186
+ 241
1187
+ 242
1188
+ 243
1189
+ 244
1190
+ 245
1191
+ 246
1192
+ 247
1193
+ 248
1194
+ 249
1195
+ 250
1196
+ 251
1197
+ 252
1198
+ 253
1199
+ 254
1200
+ 255
1201
+ 256
1202
+ 257
1203
+ 258
1204
+ 259
1205
+ 260
1206
+ 261
1207
+ 262
1208
+ 263
1209
+ 264
1210
+ 265
1211
+ 266
1212
+ 267</pre>
1213
+ </td>
1214
+ <td>
1215
+ <pre class="code"><span class="info file"># File 'lib/hyper_record/class_methods.rb', line 204</span>
1216
+
1217
+ <span class='kw'>def</span> <span class='id identifier rubyid_has_and_belongs_to_many'>has_and_belongs_to_many</span><span class='lparen'>(</span><span class='id identifier rubyid_direction'>direction</span><span class='comma'>,</span> <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>type:</span> <span class='kw'>nil</span> <span class='rbrace'>}</span><span class='rparen'>)</span>
1218
+ <span class='kw'>if</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
1219
+ <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
1220
+ <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_direction'>direction</span>
1221
+ <span class='id identifier rubyid_direction'>direction</span> <span class='op'>=</span> <span class='kw'>nil</span>
1222
+ <span class='kw'>elsif</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Proc</span><span class='rparen'>)</span>
1223
+ <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_direction'>direction</span>
1224
+ <span class='id identifier rubyid_direction'>direction</span> <span class='op'>=</span> <span class='kw'>nil</span>
1225
+ <span class='kw'>elsif</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
1226
+ <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_direction'>direction</span>
1227
+ <span class='kw'>end</span>
1228
+ <span class='id identifier rubyid_reflections'>reflections</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>direction:</span> <span class='id identifier rubyid_direction'>direction</span><span class='comma'>,</span> <span class='label'>type:</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:type</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='label'>kind:</span> <span class='symbol'>:has_and_belongs_to_many</span> <span class='rbrace'>}</span>
1229
+ <span class='comment'># @!method promise_[name]
1230
+ </span> <span class='comment'># @return [Promise] on success the .then block will receive a [HyperRecord::Collection] as arg
1231
+ </span> <span class='comment'># on failure the .fail block will receive the HTTP response object as arg
1232
+ </span> <span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>promise_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>do</span>
1233
+ <span class='ivar'>@fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>i</span><span class='tstring_end'>&#39;</span></span>
1234
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid__promise_get'>_promise_get</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_resource_base_uri'>resource_base_uri</span><span class='embexpr_end'>}</span><span class='tstring_content'>/</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span><span class='embexpr_end'>}</span><span class='tstring_content'>/relations/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>.json?timestamp=</span><span class='embexpr_beg'>#{</span><span class='backtick'>`</span><span class='tstring_content'>Date.now() + Math.random()</span><span class='tstring_end'>`</span></span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_then'>then</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_response'>response</span><span class='op'>|</span>
1235
+ <span class='id identifier rubyid_collection'>collection</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid__convert_array_to_collection'>_convert_array_to_collection</span><span class='lparen'>(</span><span class='id identifier rubyid_response'>response</span><span class='period'>.</span><span class='id identifier rubyid_json'>json</span><span class='lbracket'>[</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_underscore'>underscore</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='kw'>self</span><span class='comma'>,</span> <span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
1236
+ <span class='ivar'>@relations</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_collection'>collection</span>
1237
+ <span class='ivar'>@fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>f</span><span class='tstring_end'>&#39;</span></span>
1238
+ <span class='id identifier rubyid__notify_observers'>_notify_observers</span>
1239
+ <span class='ivar'>@relations</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
1240
+ <span class='kw'>end</span><span class='period'>.</span><span class='id identifier rubyid_fail'>fail</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_response'>response</span><span class='op'>|</span>
1241
+ <span class='id identifier rubyid_error_message'>error_message</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='embexpr_end'>}</span><span class='tstring_content'>[</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span><span class='embexpr_end'>}</span><span class='tstring_content'>].</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>, a has_and_belongs_to_many association, failed to fetch records!</span><span class='tstring_end'>&quot;</span></span>
1242
+ <span class='backtick'>`</span><span class='tstring_content'>console.error(error_message)</span><span class='tstring_end'>`</span></span>
1243
+ <span class='id identifier rubyid_response'>response</span>
1244
+ <span class='kw'>end</span>
1245
+ <span class='kw'>end</span>
1246
+ <span class='comment'># @!method [name] get records of the relation
1247
+ </span> <span class='comment'># @return [HyperRecord::Collection] either a empty one, if the data has not been fetched yet, or the
1248
+ </span> <span class='comment'># collection with the real data, if it has been fetched already
1249
+ </span> <span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='kw'>do</span>
1250
+ <span class='id identifier rubyid__register_observer'>_register_observer</span>
1251
+ <span class='kw'>if</span> <span class='ivar'>@fetch_states</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>fi</span><span class='tstring_end'>&#39;</span></span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='ivar'>@fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='rparen'>)</span>
1252
+ <span class='ivar'>@relations</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
1253
+ <span class='kw'>elsif</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span>
1254
+ <span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>promise_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
1255
+ <span class='ivar'>@relations</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
1256
+ <span class='kw'>else</span>
1257
+ <span class='ivar'>@relations</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
1258
+ <span class='kw'>end</span>
1259
+ <span class='kw'>end</span>
1260
+ <span class='comment'># @!method update_[name] mark internal structures so that the relation data is updated once it is requested again
1261
+ </span> <span class='comment'># @return nil
1262
+ </span> <span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>update_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>do</span>
1263
+ <span class='ivar'>@fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>u</span><span class='tstring_end'>&#39;</span></span>
1264
+ <span class='kw'>nil</span>
1265
+ <span class='kw'>end</span>
1266
+ <span class='comment'># TODO
1267
+ </span> <span class='comment'># define_method(&quot;#{name}=&quot;) do |arg|
1268
+ </span> <span class='comment'># _register_observer
1269
+ </span> <span class='comment'># collection = if arg.is_a?(Array)
1270
+ </span> <span class='comment'># HyperRecord::Collection.new(arg, self, name)
1271
+ </span> <span class='comment'># elsif arg.is_a?(HyperRecord::Collection)
1272
+ </span> <span class='comment'># arg
1273
+ </span> <span class='comment'># else
1274
+ </span> <span class='comment'># raise &quot;Argument must be a HyperRecord::Collection or a Array&quot;
1275
+ </span> <span class='comment'># end
1276
+ </span> <span class='comment'># @relations[name] = collection
1277
+ </span> <span class='comment'># @fetch_states[name] = &#39;f&#39;
1278
+ </span> <span class='comment'># @relations[name]
1279
+ </span> <span class='comment'># end
1280
+ </span><span class='kw'>end</span></pre>
1281
+ </td>
1282
+ </tr>
1283
+ </table>
1284
+ </div>
1285
+
1286
+ <div class="method_details ">
1287
+ <h3 class="signature " id="has_many-instance_method">
1288
+
1289
+ #<strong>has_many</strong>(direction, name = nil, options = { type: nil }) &#x21d2; <tt>Object</tt>
1290
+
1291
+
1292
+
1293
+
1294
+
1295
+ </h3><div class="docstring">
1296
+ <div class="discussion">
1297
+
1298
+ <p>DSL macro to declare a has_many relationship options are for the server
1299
+ side ORM, on the client side options are ignored</p>
1300
+
1301
+ <p>This macro defines additional methods:</p>
1302
+
1303
+
1304
+ </div>
1305
+ </div>
1306
+ <div class="tags">
1307
+ <p class="tag_title">Parameters:</p>
1308
+ <ul class="param">
1309
+
1310
+ <li>
1311
+
1312
+ <span class='name'>direction</span>
1313
+
1314
+
1315
+ <span class='type'>(<tt>String</tt>)</span>
1316
+
1317
+
1318
+
1319
+ &mdash;
1320
+ <div class='inline'>
1321
+ <p>or [Symbol] for ORMs like Neo4j: the direction of the graph edge, for ORMs
1322
+ like ActiveRecord: the name of the relation</p>
1323
+ </div>
1324
+
1325
+ </li>
1326
+
1327
+ <li>
1328
+
1329
+ <span class='name'>name</span>
1330
+
1331
+
1332
+ <span class='type'>(<tt>String</tt>)</span>
1333
+
1334
+
1335
+ <em class="default">(defaults to: <tt>nil</tt>)</em>
1336
+
1337
+
1338
+ &mdash;
1339
+ <div class='inline'>
1340
+ <p>or [Symbol] or [Hash] for ORMs like Neo4j: the name of the relation, for
1341
+ ORMs like ActiveRecord: further options</p>
1342
+ </div>
1343
+
1344
+ </li>
1345
+
1346
+ <li>
1347
+
1348
+ <span class='name'>options</span>
1349
+
1350
+
1351
+ <span class='type'>(<tt>Hash</tt>)</span>
1352
+
1353
+
1354
+ <em class="default">(defaults to: <tt>{ type: nil }</tt>)</em>
1355
+
1356
+
1357
+ &mdash;
1358
+ <div class='inline'>
1359
+ <p>further options for ORMs like Neo4j</p>
1360
+ </div>
1361
+
1362
+ </li>
1363
+
1364
+ </ul>
1365
+
1366
+
1367
+ </div><table class="source_code">
1368
+ <tr>
1369
+ <td>
1370
+ <pre class="lines">
1371
+
1372
+
1373
+ 277
1374
+ 278
1375
+ 279
1376
+ 280
1377
+ 281
1378
+ 282
1379
+ 283
1380
+ 284
1381
+ 285
1382
+ 286
1383
+ 287
1384
+ 288
1385
+ 289
1386
+ 290
1387
+ 291
1388
+ 292
1389
+ 293
1390
+ 294
1391
+ 295
1392
+ 296
1393
+ 297
1394
+ 298
1395
+ 299
1396
+ 300
1397
+ 301
1398
+ 302
1399
+ 303
1400
+ 304
1401
+ 305
1402
+ 306
1403
+ 307
1404
+ 308
1405
+ 309
1406
+ 310
1407
+ 311
1408
+ 312
1409
+ 313
1410
+ 314
1411
+ 315
1412
+ 316
1413
+ 317
1414
+ 318
1415
+ 319
1416
+ 320
1417
+ 321
1418
+ 322
1419
+ 323
1420
+ 324
1421
+ 325
1422
+ 326
1423
+ 327
1424
+ 328
1425
+ 329
1426
+ 330
1427
+ 331
1428
+ 332
1429
+ 333
1430
+ 334
1431
+ 335
1432
+ 336
1433
+ 337
1434
+ 338
1435
+ 339</pre>
1436
+ </td>
1437
+ <td>
1438
+ <pre class="code"><span class="info file"># File 'lib/hyper_record/class_methods.rb', line 277</span>
1439
+
1440
+ <span class='kw'>def</span> <span class='id identifier rubyid_has_many'>has_many</span><span class='lparen'>(</span><span class='id identifier rubyid_direction'>direction</span><span class='comma'>,</span> <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>type:</span> <span class='kw'>nil</span> <span class='rbrace'>}</span><span class='rparen'>)</span>
1441
+ <span class='kw'>if</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
1442
+ <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
1443
+ <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_direction'>direction</span>
1444
+ <span class='id identifier rubyid_direction'>direction</span> <span class='op'>=</span> <span class='kw'>nil</span>
1445
+ <span class='kw'>elsif</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Proc</span><span class='rparen'>)</span>
1446
+ <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_direction'>direction</span>
1447
+ <span class='id identifier rubyid_direction'>direction</span> <span class='op'>=</span> <span class='kw'>nil</span>
1448
+ <span class='kw'>elsif</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
1449
+ <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_direction'>direction</span>
1450
+ <span class='kw'>end</span>
1451
+ <span class='id identifier rubyid_reflections'>reflections</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>direction:</span> <span class='id identifier rubyid_direction'>direction</span><span class='comma'>,</span> <span class='label'>type:</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:type</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='label'>kind:</span> <span class='symbol'>:has_many</span> <span class='rbrace'>}</span>
1452
+ <span class='comment'># @!method promise_[name]
1453
+ </span> <span class='comment'># @return [Promise] on success the .then block will receive a [HyperRecord::Collection] as arg
1454
+ </span> <span class='comment'># on failure the .fail block will receive the HTTP response object as arg
1455
+ </span> <span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>promise_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>do</span>
1456
+ <span class='ivar'>@fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>i</span><span class='tstring_end'>&#39;</span></span>
1457
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid__promise_get'>_promise_get</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_resource_base_uri'>resource_base_uri</span><span class='embexpr_end'>}</span><span class='tstring_content'>/</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span><span class='embexpr_end'>}</span><span class='tstring_content'>/relations/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>.json?timestamp=</span><span class='embexpr_beg'>#{</span><span class='backtick'>`</span><span class='tstring_content'>Date.now() + Math.random()</span><span class='tstring_end'>`</span></span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_then'>then</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_response'>response</span><span class='op'>|</span>
1458
+ <span class='id identifier rubyid_collection'>collection</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid__convert_array_to_collection'>_convert_array_to_collection</span><span class='lparen'>(</span><span class='id identifier rubyid_response'>response</span><span class='period'>.</span><span class='id identifier rubyid_json'>json</span><span class='lbracket'>[</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_underscore'>underscore</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='kw'>self</span><span class='comma'>,</span> <span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
1459
+ <span class='ivar'>@relations</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_collection'>collection</span>
1460
+ <span class='ivar'>@fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>f</span><span class='tstring_end'>&#39;</span></span>
1461
+ <span class='id identifier rubyid__notify_observers'>_notify_observers</span>
1462
+ <span class='ivar'>@relations</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
1463
+ <span class='kw'>end</span><span class='period'>.</span><span class='id identifier rubyid_fail'>fail</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_response'>response</span><span class='op'>|</span>
1464
+ <span class='id identifier rubyid_error_message'>error_message</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='embexpr_end'>}</span><span class='tstring_content'>[</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span><span class='embexpr_end'>}</span><span class='tstring_content'>].</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>, a has_many association, failed to fetch records!</span><span class='tstring_end'>&quot;</span></span>
1465
+ <span class='backtick'>`</span><span class='tstring_content'>console.error(error_message)</span><span class='tstring_end'>`</span></span>
1466
+ <span class='id identifier rubyid_response'>response</span>
1467
+ <span class='kw'>end</span>
1468
+ <span class='kw'>end</span>
1469
+ <span class='comment'># @!method [name] get records of the relation
1470
+ </span> <span class='comment'># @return [HyperRecord::Collection] either a empty one, if the data has not been fetched yet, or the
1471
+ </span> <span class='comment'># collection with the real data, if it has been fetched already
1472
+ </span> <span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='kw'>do</span>
1473
+ <span class='id identifier rubyid__register_observer'>_register_observer</span>
1474
+ <span class='kw'>if</span> <span class='ivar'>@fetch_states</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>fi</span><span class='tstring_end'>&#39;</span></span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='ivar'>@fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='rparen'>)</span>
1475
+ <span class='ivar'>@relations</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
1476
+ <span class='kw'>elsif</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span>
1477
+ <span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>promise_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
1478
+ <span class='ivar'>@relations</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
1479
+ <span class='kw'>else</span>
1480
+ <span class='ivar'>@relations</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
1481
+ <span class='kw'>end</span>
1482
+ <span class='kw'>end</span>
1483
+ <span class='comment'># @!method update_[name] mark internal structures so that the relation data is updated once it is requested again
1484
+ </span> <span class='comment'># @return nil
1485
+ </span> <span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>update_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>do</span>
1486
+ <span class='ivar'>@fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>u</span><span class='tstring_end'>&#39;</span></span>
1487
+ <span class='kw'>nil</span>
1488
+ <span class='kw'>end</span>
1489
+ <span class='comment'># define_method(&quot;#{name}=&quot;) do |arg|
1490
+ </span> <span class='comment'># _register_observer
1491
+ </span> <span class='comment'># collection = if arg.is_a?(Array)
1492
+ </span> <span class='comment'># HyperRecord::Collection.new(arg, self, name)
1493
+ </span> <span class='comment'># elsif arg.is_a?(HyperRecord::Collection)
1494
+ </span> <span class='comment'># arg
1495
+ </span> <span class='comment'># else
1496
+ </span> <span class='comment'># raise &quot;Argument must be a HyperRecord::Collection or a Array&quot;
1497
+ </span> <span class='comment'># end
1498
+ </span> <span class='comment'># @relations[name] = collection
1499
+ </span> <span class='comment'># @fetch_states[name] = &#39;f&#39;
1500
+ </span> <span class='comment'># @relations[name]
1501
+ </span> <span class='comment'># end
1502
+ </span><span class='kw'>end</span></pre>
1503
+ </td>
1504
+ </tr>
1505
+ </table>
1506
+ </div>
1507
+
1508
+ <div class="method_details ">
1509
+ <h3 class="signature " id="has_one-instance_method">
1510
+
1511
+ #<strong>has_one</strong>(direction, name, options = { type: nil }) &#x21d2; <tt>Object</tt>
1512
+
1513
+
1514
+
1515
+
1516
+
1517
+ </h3><div class="docstring">
1518
+ <div class="discussion">
1519
+
1520
+ <p>DSL macro to declare a has_one relationship options are for the server side
1521
+ ORM, on the client side options are ignored</p>
1522
+
1523
+ <p>This macro defines additional methods:</p>
1524
+
1525
+
1526
+ </div>
1527
+ </div>
1528
+ <div class="tags">
1529
+ <p class="tag_title">Parameters:</p>
1530
+ <ul class="param">
1531
+
1532
+ <li>
1533
+
1534
+ <span class='name'>direction</span>
1535
+
1536
+
1537
+ <span class='type'>(<tt>String</tt>)</span>
1538
+
1539
+
1540
+
1541
+ &mdash;
1542
+ <div class='inline'>
1543
+ <p>or [Symbol] for ORMs like Neo4j: the direction of the graph edge, for ORMs
1544
+ like ActiveRecord: the name of the relation</p>
1545
+ </div>
1546
+
1547
+ </li>
1548
+
1549
+ <li>
1550
+
1551
+ <span class='name'>name</span>
1552
+
1553
+
1554
+ <span class='type'>(<tt>String</tt>)</span>
1555
+
1556
+
1557
+
1558
+ &mdash;
1559
+ <div class='inline'>
1560
+ <p>or [Symbol] or [Hash] for ORMs like Neo4j: the name of the relation, for
1561
+ ORMs like ActiveRecord: further options</p>
1562
+ </div>
1563
+
1564
+ </li>
1565
+
1566
+ <li>
1567
+
1568
+ <span class='name'>options</span>
1569
+
1570
+
1571
+ <span class='type'>(<tt>Hash</tt>)</span>
1572
+
1573
+
1574
+ <em class="default">(defaults to: <tt>{ type: nil }</tt>)</em>
1575
+
1576
+
1577
+ &mdash;
1578
+ <div class='inline'>
1579
+ <p>further options for ORMs like Neo4j</p>
1580
+ </div>
1581
+
1582
+ </li>
1583
+
1584
+ </ul>
1585
+
1586
+
1587
+ </div><table class="source_code">
1588
+ <tr>
1589
+ <td>
1590
+ <pre class="lines">
1591
+
1592
+
1593
+ 349
1594
+ 350
1595
+ 351
1596
+ 352
1597
+ 353
1598
+ 354
1599
+ 355
1600
+ 356
1601
+ 357
1602
+ 358
1603
+ 359
1604
+ 360
1605
+ 361
1606
+ 362
1607
+ 363
1608
+ 364
1609
+ 365
1610
+ 366
1611
+ 367
1612
+ 368
1613
+ 369
1614
+ 370
1615
+ 371
1616
+ 372
1617
+ 373
1618
+ 374
1619
+ 375
1620
+ 376
1621
+ 377
1622
+ 378
1623
+ 379
1624
+ 380
1625
+ 381
1626
+ 382
1627
+ 383
1628
+ 384
1629
+ 385
1630
+ 386
1631
+ 387
1632
+ 388
1633
+ 389
1634
+ 390
1635
+ 391
1636
+ 392
1637
+ 393
1638
+ 394
1639
+ 395
1640
+ 396
1641
+ 397
1642
+ 398
1643
+ 399
1644
+ 400
1645
+ 401
1646
+ 402
1647
+ 403</pre>
1648
+ </td>
1649
+ <td>
1650
+ <pre class="code"><span class="info file"># File 'lib/hyper_record/class_methods.rb', line 349</span>
1651
+
1652
+ <span class='kw'>def</span> <span class='id identifier rubyid_has_one'>has_one</span><span class='lparen'>(</span><span class='id identifier rubyid_direction'>direction</span><span class='comma'>,</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>type:</span> <span class='kw'>nil</span> <span class='rbrace'>}</span><span class='rparen'>)</span>
1653
+ <span class='kw'>if</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
1654
+ <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
1655
+ <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_direction'>direction</span>
1656
+ <span class='id identifier rubyid_direction'>direction</span> <span class='op'>=</span> <span class='kw'>nil</span>
1657
+ <span class='kw'>elsif</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Proc</span><span class='rparen'>)</span>
1658
+ <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_direction'>direction</span>
1659
+ <span class='id identifier rubyid_direction'>direction</span> <span class='op'>=</span> <span class='kw'>nil</span>
1660
+ <span class='kw'>elsif</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
1661
+ <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_direction'>direction</span>
1662
+ <span class='kw'>end</span>
1663
+ <span class='id identifier rubyid_reflections'>reflections</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>direction:</span> <span class='id identifier rubyid_direction'>direction</span><span class='comma'>,</span> <span class='label'>type:</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:type</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='label'>kind:</span> <span class='symbol'>:has_one</span> <span class='rbrace'>}</span>
1664
+ <span class='comment'># @!method promise_[name]
1665
+ </span> <span class='comment'># @return [Promise] on success the .then block will receive a [HyperRecord::Collection] as arg
1666
+ </span> <span class='comment'># on failure the .fail block will receive the HTTP response object as arg
1667
+ </span> <span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>promise_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>do</span>
1668
+ <span class='ivar'>@fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>i</span><span class='tstring_end'>&#39;</span></span>
1669
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid__promise_get'>_promise_get</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_resource_base_uri'>resource_base_uri</span><span class='embexpr_end'>}</span><span class='tstring_content'>/</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span><span class='embexpr_end'>}</span><span class='tstring_content'>/relations/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>.json?timestamp=</span><span class='embexpr_beg'>#{</span><span class='backtick'>`</span><span class='tstring_content'>Date.now() + Math.random()</span><span class='tstring_end'>`</span></span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_then'>then</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_response'>response</span><span class='op'>|</span>
1670
+ <span class='ivar'>@relations</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid__convert_json_hash_to_record'>_convert_json_hash_to_record</span><span class='lparen'>(</span><span class='id identifier rubyid_response'>response</span><span class='period'>.</span><span class='id identifier rubyid_json'>json</span><span class='lbracket'>[</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_underscore'>underscore</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='rparen'>)</span>
1671
+ <span class='ivar'>@fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>f</span><span class='tstring_end'>&#39;</span></span>
1672
+ <span class='id identifier rubyid__notify_observers'>_notify_observers</span>
1673
+ <span class='ivar'>@relations</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
1674
+ <span class='kw'>end</span><span class='period'>.</span><span class='id identifier rubyid_fail'>fail</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_response'>response</span><span class='op'>|</span>
1675
+ <span class='id identifier rubyid_error_message'>error_message</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='embexpr_end'>}</span><span class='tstring_content'>[</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span><span class='embexpr_end'>}</span><span class='tstring_content'>].</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>, a has_one association, failed to fetch records!</span><span class='tstring_end'>&quot;</span></span>
1676
+ <span class='backtick'>`</span><span class='tstring_content'>console.error(error_message)</span><span class='tstring_end'>`</span></span>
1677
+ <span class='id identifier rubyid_response'>response</span>
1678
+ <span class='kw'>end</span>
1679
+ <span class='kw'>end</span>
1680
+ <span class='comment'># @!method [name] get records of the relation
1681
+ </span> <span class='comment'># @return [HyperRecord::Collection] either a empty one, if the data has not been fetched yet, or the
1682
+ </span> <span class='comment'># collection with the real data, if it has been fetched already
1683
+ </span> <span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='kw'>do</span>
1684
+ <span class='id identifier rubyid__register_observer'>_register_observer</span>
1685
+ <span class='kw'>if</span> <span class='ivar'>@fetch_states</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>fi</span><span class='tstring_end'>&#39;</span></span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='ivar'>@fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='rparen'>)</span>
1686
+ <span class='ivar'>@relations</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
1687
+ <span class='kw'>elsif</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span>
1688
+ <span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>promise_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
1689
+ <span class='ivar'>@relations</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
1690
+ <span class='kw'>else</span>
1691
+ <span class='ivar'>@relations</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
1692
+ <span class='kw'>end</span>
1693
+ <span class='kw'>end</span>
1694
+ <span class='comment'># @!method update_[name] mark internal structures so that the relation data is updated once it is requested again
1695
+ </span> <span class='comment'># @return nil
1696
+ </span> <span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>update_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>do</span>
1697
+ <span class='ivar'>@fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>u</span><span class='tstring_end'>&#39;</span></span>
1698
+ <span class='kw'>nil</span>
1699
+ <span class='kw'>end</span>
1700
+ <span class='comment'># define_method(&quot;#{name}=&quot;) do |arg|
1701
+ </span> <span class='comment'># _register_observer
1702
+ </span> <span class='comment'># @relations[name] = arg
1703
+ </span> <span class='comment'># @fetch_states[name] = &#39;f&#39;
1704
+ </span> <span class='comment'># @relations[name]
1705
+ </span> <span class='comment'># end
1706
+ </span><span class='kw'>end</span></pre>
1707
+ </td>
1708
+ </tr>
1709
+ </table>
1710
+ </div>
1711
+
1712
+ <div class="method_details ">
1713
+ <h3 class="signature " id="new-instance_method">
1714
+
1715
+ #<strong>new</strong>(record_hash = {}) &#x21d2; <tt><span class='object_link'><a href="../HyperRecord.html" title="HyperRecord (module)">HyperRecord</a></span></tt>
1716
+
1717
+
1718
+
1719
+
1720
+
1721
+ </h3><div class="docstring">
1722
+ <div class="discussion">
1723
+
1724
+ <p>create a new instance of current HyperRecord class or return a exisitng one
1725
+ if a id in the hash is given</p>
1726
+
1727
+
1728
+ </div>
1729
+ </div>
1730
+ <div class="tags">
1731
+ <p class="tag_title">Parameters:</p>
1732
+ <ul class="param">
1733
+
1734
+ <li>
1735
+
1736
+ <span class='name'>record_hash</span>
1737
+
1738
+
1739
+ <span class='type'>(<tt>Hash</tt>)</span>
1740
+
1741
+
1742
+ <em class="default">(defaults to: <tt>{}</tt>)</em>
1743
+
1744
+
1745
+ &mdash;
1746
+ <div class='inline'>
1747
+ <p>optional data for the record</p>
1748
+ </div>
1749
+
1750
+ </li>
1751
+
1752
+ </ul>
1753
+
1754
+ <p class="tag_title">Returns:</p>
1755
+ <ul class="return">
1756
+
1757
+ <li>
1758
+
1759
+
1760
+ <span class='type'>(<tt><span class='object_link'><a href="../HyperRecord.html" title="HyperRecord (module)">HyperRecord</a></span></tt>)</span>
1761
+
1762
+
1763
+
1764
+ &mdash;
1765
+ <div class='inline'>
1766
+ <p>the new instance or the existing one for a given id</p>
1767
+ </div>
1768
+
1769
+ </li>
1770
+
1771
+ </ul>
1772
+
1773
+ </div><table class="source_code">
1774
+ <tr>
1775
+ <td>
1776
+ <pre class="lines">
1777
+
1778
+
1779
+ 8
1780
+ 9
1781
+ 10
1782
+ 11
1783
+ 12
1784
+ 13
1785
+ 14
1786
+ 15
1787
+ 16
1788
+ 17
1789
+ 18
1790
+ 19
1791
+ 20</pre>
1792
+ </td>
1793
+ <td>
1794
+ <pre class="code"><span class="info file"># File 'lib/hyper_record/class_methods.rb', line 8</span>
1795
+
1796
+ <span class='kw'>def</span> <span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_record_hash'>record_hash</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
1797
+ <span class='kw'>if</span> <span class='id identifier rubyid_record_hash'>record_hash</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='symbol'>:id</span><span class='rparen'>)</span>
1798
+ <span class='kw'>if</span> <span class='id identifier rubyid__record_cache'>_record_cache</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_record_hash'>record_hash</span><span class='lbracket'>[</span><span class='symbol'>:id</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rparen'>)</span>
1799
+ <span class='id identifier rubyid_record'>record</span> <span class='op'>=</span> <span class='id identifier rubyid__record_cache'>_record_cache</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span><span class='lparen'>(</span><span class='id identifier rubyid_record_hash'>record_hash</span><span class='lbracket'>[</span><span class='symbol'>:id</span><span class='rbracket'>]</span><span class='rparen'>)</span>
1800
+ <span class='kw'>if</span> <span class='id identifier rubyid_record'>record</span>
1801
+ <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid__initialize_from_hash'>_initialize_from_hash</span><span class='lparen'>(</span><span class='id identifier rubyid_record_hash'>record_hash</span><span class='rparen'>)</span>
1802
+ <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid__register_observer'>_register_observer</span>
1803
+ <span class='kw'>return</span> <span class='id identifier rubyid_record'>record</span>
1804
+ <span class='kw'>end</span>
1805
+ <span class='kw'>end</span>
1806
+ <span class='kw'>end</span>
1807
+ <span class='kw'>super</span><span class='lparen'>(</span><span class='id identifier rubyid_record_hash'>record_hash</span><span class='rparen'>)</span>
1808
+ <span class='kw'>end</span></pre>
1809
+ </td>
1810
+ </tr>
1811
+ </table>
1812
+ </div>
1813
+
1814
+ <div class="method_details ">
1815
+ <h3 class="signature " id="promise_all-instance_method">
1816
+
1817
+ #<strong>promise_all</strong> &#x21d2; <tt>Promise</tt>
1818
+
1819
+
1820
+
1821
+
1822
+
1823
+ </h3><div class="docstring">
1824
+ <div class="discussion">
1825
+
1826
+ <p>all records of current HyperRecord class</p>
1827
+
1828
+
1829
+ </div>
1830
+ </div>
1831
+ <div class="tags">
1832
+
1833
+ <p class="tag_title">Returns:</p>
1834
+ <ul class="return">
1835
+
1836
+ <li>
1837
+
1838
+
1839
+ <span class='type'>(<tt>Promise</tt>)</span>
1840
+
1841
+
1842
+
1843
+ &mdash;
1844
+ <div class='inline'>
1845
+ <p>on success the .then block will receive a [HyperRecord::Collection] as arg
1846
+ on failure the .fail block will receive the HTTP response object as arg</p>
1847
+ </div>
1848
+
1849
+ </li>
1850
+
1851
+ </ul>
1852
+
1853
+ </div><table class="source_code">
1854
+ <tr>
1855
+ <td>
1856
+ <pre class="lines">
1857
+
1858
+
1859
+ 40
1860
+ 41
1861
+ 42
1862
+ 43
1863
+ 44
1864
+ 45
1865
+ 46
1866
+ 47
1867
+ 48
1868
+ 49
1869
+ 50
1870
+ 51
1871
+ 52</pre>
1872
+ </td>
1873
+ <td>
1874
+ <pre class="code"><span class="info file"># File 'lib/hyper_record/class_methods.rb', line 40</span>
1875
+
1876
+ <span class='kw'>def</span> <span class='id identifier rubyid_promise_all'>promise_all</span>
1877
+ <span class='id identifier rubyid__class_fetch_states'>_class_fetch_states</span><span class='lbracket'>[</span><span class='symbol'>:all</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>i</span><span class='tstring_end'>&#39;</span></span>
1878
+ <span class='id identifier rubyid__promise_get'>_promise_get</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_resource_base_uri'>resource_base_uri</span><span class='embexpr_end'>}</span><span class='tstring_content'>.json?timestamp=</span><span class='embexpr_beg'>#{</span><span class='backtick'>`</span><span class='tstring_content'>Date.now() + Math.random()</span><span class='tstring_end'>`</span></span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_then'>then</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_response'>response</span><span class='op'>|</span>
1879
+ <span class='id identifier rubyid_collection'>collection</span> <span class='op'>=</span> <span class='id identifier rubyid__convert_array_to_collection'>_convert_array_to_collection</span><span class='lparen'>(</span><span class='id identifier rubyid_response'>response</span><span class='period'>.</span><span class='id identifier rubyid_json'>json</span><span class='lbracket'>[</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_underscore'>underscore</span><span class='period'>.</span><span class='id identifier rubyid_pluralize'>pluralize</span><span class='rbracket'>]</span><span class='rparen'>)</span>
1880
+ <span class='id identifier rubyid__class_fetch_states'>_class_fetch_states</span><span class='lbracket'>[</span><span class='symbol'>:all</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>f</span><span class='tstring_end'>&#39;</span></span>
1881
+ <span class='id identifier rubyid__notify_class_observers'>_notify_class_observers</span>
1882
+ <span class='id identifier rubyid_collection'>collection</span>
1883
+ <span class='kw'>end</span><span class='period'>.</span><span class='id identifier rubyid_fail'>fail</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_response'>response</span><span class='op'>|</span>
1884
+ <span class='id identifier rubyid_error_message'>error_message</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='embexpr_end'>}</span><span class='tstring_content'>.all failed to fetch records!</span><span class='tstring_end'>&quot;</span></span>
1885
+ <span class='backtick'>`</span><span class='tstring_content'>console.error(error_message)</span><span class='tstring_end'>`</span></span>
1886
+ <span class='id identifier rubyid_response'>response</span>
1887
+ <span class='kw'>end</span>
1888
+ <span class='kw'>end</span></pre>
1889
+ </td>
1890
+ </tr>
1891
+ </table>
1892
+ </div>
1893
+
1894
+ <div class="method_details ">
1895
+ <h3 class="signature " id="promise_create-instance_method">
1896
+
1897
+ #<strong>promise_create</strong>(record_hash = {}) &#x21d2; <tt>Promise</tt>
1898
+
1899
+
1900
+
1901
+
1902
+
1903
+ </h3><div class="docstring">
1904
+ <div class="discussion">
1905
+
1906
+ <p>create a new instance of current HyperRecord class and save it to the db</p>
1907
+
1908
+
1909
+ </div>
1910
+ </div>
1911
+ <div class="tags">
1912
+ <p class="tag_title">Parameters:</p>
1913
+ <ul class="param">
1914
+
1915
+ <li>
1916
+
1917
+ <span class='name'>record_hash</span>
1918
+
1919
+
1920
+ <span class='type'>(<tt>Hash</tt>)</span>
1921
+
1922
+
1923
+ <em class="default">(defaults to: <tt>{}</tt>)</em>
1924
+
1925
+
1926
+ &mdash;
1927
+ <div class='inline'>
1928
+ <p>optional data for the record</p>
1929
+ </div>
1930
+
1931
+ </li>
1932
+
1933
+ </ul>
1934
+
1935
+ <p class="tag_title">Returns:</p>
1936
+ <ul class="return">
1937
+
1938
+ <li>
1939
+
1940
+
1941
+ <span class='type'>(<tt>Promise</tt>)</span>
1942
+
1943
+
1944
+
1945
+ &mdash;
1946
+ <div class='inline'>
1947
+ <p>on success the .then block will receive the new HyperRecord instance as arg
1948
+ on failure the .fail block will receive the HTTP response object as arg</p>
1949
+ </div>
1950
+
1951
+ </li>
1952
+
1953
+ </ul>
1954
+
1955
+ </div><table class="source_code">
1956
+ <tr>
1957
+ <td>
1958
+ <pre class="lines">
1959
+
1960
+
1961
+ 134
1962
+ 135
1963
+ 136
1964
+ 137</pre>
1965
+ </td>
1966
+ <td>
1967
+ <pre class="code"><span class="info file"># File 'lib/hyper_record/class_methods.rb', line 134</span>
1968
+
1969
+ <span class='kw'>def</span> <span class='id identifier rubyid_promise_create'>promise_create</span><span class='lparen'>(</span><span class='id identifier rubyid_record_hash'>record_hash</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
1970
+ <span class='id identifier rubyid_record'>record</span> <span class='op'>=</span> <span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_record_hash'>record_hash</span><span class='rparen'>)</span>
1971
+ <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_promise_save'>promise_save</span>
1972
+ <span class='kw'>end</span></pre>
1973
+ </td>
1974
+ </tr>
1975
+ </table>
1976
+ </div>
1977
+
1978
+ <div class="method_details ">
1979
+ <h3 class="signature " id="promise_find-instance_method">
1980
+
1981
+ #<strong>promise_find</strong>(id) &#x21d2; <tt>Promise</tt>
1982
+
1983
+
1984
+
1985
+
1986
+
1987
+ </h3><div class="docstring">
1988
+ <div class="discussion">
1989
+
1990
+ <p>find a existing instance of current HyperRecord class</p>
1991
+
1992
+
1993
+ </div>
1994
+ </div>
1995
+ <div class="tags">
1996
+ <p class="tag_title">Parameters:</p>
1997
+ <ul class="param">
1998
+
1999
+ <li>
2000
+
2001
+ <span class='name'>id</span>
2002
+
2003
+
2004
+ <span class='type'>(<tt>String</tt>)</span>
2005
+
2006
+
2007
+
2008
+ &mdash;
2009
+ <div class='inline'>
2010
+ <p>id of the record to find</p>
2011
+ </div>
2012
+
2013
+ </li>
2014
+
2015
+ </ul>
2016
+
2017
+ <p class="tag_title">Returns:</p>
2018
+ <ul class="return">
2019
+
2020
+ <li>
2021
+
2022
+
2023
+ <span class='type'>(<tt>Promise</tt>)</span>
2024
+
2025
+
2026
+
2027
+ &mdash;
2028
+ <div class='inline'>
2029
+ <p>on success the .then block will receive the new HyperRecord instance as arg
2030
+ on failure the .fail block will receive the HTTP response object as arg</p>
2031
+ </div>
2032
+
2033
+ </li>
2034
+
2035
+ </ul>
2036
+
2037
+ </div><table class="source_code">
2038
+ <tr>
2039
+ <td>
2040
+ <pre class="lines">
2041
+
2042
+
2043
+ 167
2044
+ 168
2045
+ 169
2046
+ 170
2047
+ 171
2048
+ 172
2049
+ 173
2050
+ 174
2051
+ 175</pre>
2052
+ </td>
2053
+ <td>
2054
+ <pre class="code"><span class="info file"># File 'lib/hyper_record/class_methods.rb', line 167</span>
2055
+
2056
+ <span class='kw'>def</span> <span class='id identifier rubyid_promise_find'>promise_find</span><span class='lparen'>(</span><span class='id identifier rubyid_id'>id</span><span class='rparen'>)</span>
2057
+ <span class='id identifier rubyid_sid'>sid</span> <span class='op'>=</span> <span class='id identifier rubyid_id'>id</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
2058
+ <span class='id identifier rubyid_record_in_progress'>record_in_progress</span> <span class='op'>=</span> <span class='kw'>if</span> <span class='id identifier rubyid__record_cache'>_record_cache</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_sid'>sid</span><span class='rparen'>)</span>
2059
+ <span class='id identifier rubyid__record_cache'>_record_cache</span><span class='lbracket'>[</span><span class='id identifier rubyid_sid'>sid</span><span class='rbracket'>]</span>
2060
+ <span class='kw'>else</span>
2061
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='label'>id:</span> <span class='id identifier rubyid_id'>id</span><span class='rparen'>)</span>
2062
+ <span class='kw'>end</span>
2063
+ <span class='id identifier rubyid__promise_find'>_promise_find</span><span class='lparen'>(</span><span class='id identifier rubyid_id'>id</span><span class='comma'>,</span> <span class='id identifier rubyid_record_in_progress'>record_in_progress</span><span class='rparen'>)</span>
2064
+ <span class='kw'>end</span></pre>
2065
+ </td>
2066
+ </tr>
2067
+ </table>
2068
+ </div>
2069
+
2070
+ <div class="method_details ">
2071
+ <h3 class="signature " id="property-instance_method">
2072
+
2073
+ #<strong>property</strong>(name, options = {}) &#x21d2; <tt>Object</tt>
2074
+
2075
+
2076
+
2077
+
2078
+
2079
+ </h3><div class="docstring">
2080
+ <div class="discussion">
2081
+
2082
+ <p>declare a property (attribute) for the current HyperRecord class This macro
2083
+ defines additional methods:</p>
2084
+
2085
+
2086
+ </div>
2087
+ </div>
2088
+ <div class="tags">
2089
+ <p class="tag_title">Parameters:</p>
2090
+ <ul class="param">
2091
+
2092
+ <li>
2093
+
2094
+ <span class='name'>name</span>
2095
+
2096
+
2097
+ <span class='type'>(<tt>String</tt>)</span>
2098
+
2099
+
2100
+
2101
+ &mdash;
2102
+ <div class='inline'>
2103
+ <p>or [Symbol]</p>
2104
+ </div>
2105
+
2106
+ </li>
2107
+
2108
+ <li>
2109
+
2110
+ <span class='name'>options</span>
2111
+
2112
+
2113
+ <span class='type'>(<tt>Hash</tt>)</span>
2114
+
2115
+
2116
+ <em class="default">(defaults to: <tt>{}</tt>)</em>
2117
+
2118
+
2119
+ &mdash;
2120
+ <div class='inline'>
2121
+ <p>following keys are known: default: a default value to present during render
2122
+ if no other value is known type: type for a HyperRecord::DummyValue in case
2123
+ no default or other value is known</p>
2124
+ </div>
2125
+
2126
+ </li>
2127
+
2128
+ </ul>
2129
+
2130
+
2131
+ </div><table class="source_code">
2132
+ <tr>
2133
+ <td>
2134
+ <pre class="lines">
2135
+
2136
+
2137
+ 418
2138
+ 419
2139
+ 420
2140
+ 421
2141
+ 422
2142
+ 423
2143
+ 424
2144
+ 425
2145
+ 426
2146
+ 427
2147
+ 428
2148
+ 429
2149
+ 430
2150
+ 431
2151
+ 432
2152
+ 433
2153
+ 434
2154
+ 435
2155
+ 436
2156
+ 437
2157
+ 438
2158
+ 439
2159
+ 440
2160
+ 441
2161
+ 442
2162
+ 443
2163
+ 444
2164
+ 445
2165
+ 446
2166
+ 447
2167
+ 448
2168
+ 449
2169
+ 450
2170
+ 451</pre>
2171
+ </td>
2172
+ <td>
2173
+ <pre class="code"><span class="info file"># File 'lib/hyper_record/class_methods.rb', line 418</span>
2174
+
2175
+ <span class='kw'>def</span> <span class='id identifier rubyid_property'>property</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
2176
+ <span class='id identifier rubyid__property_options'>_property_options</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span>
2177
+ <span class='comment'># @!method [name] a getter for the property
2178
+ </span> <span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='kw'>do</span>
2179
+ <span class='id identifier rubyid__register_observer'>_register_observer</span>
2180
+ <span class='kw'>if</span> <span class='ivar'>@properties</span><span class='lbracket'>[</span><span class='symbol'>:id</span><span class='rbracket'>]</span>
2181
+ <span class='kw'>if</span> <span class='ivar'>@changed_properties</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
2182
+ <span class='ivar'>@changed_properties</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
2183
+ <span class='kw'>else</span>
2184
+ <span class='ivar'>@properties</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
2185
+ <span class='kw'>end</span>
2186
+ <span class='kw'>else</span>
2187
+ <span class='comment'># record has not been fetched or is new and not yet saved
2188
+ </span> <span class='kw'>if</span> <span class='ivar'>@properties</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
2189
+ <span class='comment'># TODO move default to initializer?
2190
+ </span> <span class='kw'>if</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid__property_options'>_property_options</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='symbol'>:default</span><span class='rparen'>)</span>
2191
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid__property_options'>_property_options</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='symbol'>:default</span><span class='rbracket'>]</span>
2192
+ <span class='kw'>elsif</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid__property_options'>_property_options</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='symbol'>:type</span><span class='rparen'>)</span>
2193
+ <span class='const'><span class='object_link'><a href="../HyperRecord.html" title="HyperRecord (module)">HyperRecord</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="DummyValue.html" title="HyperRecord::DummyValue (class)">DummyValue</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid__property_options'>_property_options</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='symbol'>:type</span><span class='rbracket'>]</span><span class='rparen'>)</span>
2194
+ <span class='kw'>else</span>
2195
+ <span class='const'><span class='object_link'><a href="../HyperRecord.html" title="HyperRecord (module)">HyperRecord</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="DummyValue.html" title="HyperRecord::DummyValue (class)">DummyValue</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='const'>NilClass</span><span class='rparen'>)</span>
2196
+ <span class='kw'>end</span>
2197
+ <span class='kw'>else</span>
2198
+ <span class='ivar'>@properties</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
2199
+ <span class='kw'>end</span>
2200
+ <span class='kw'>end</span>
2201
+ <span class='kw'>end</span>
2202
+ <span class='comment'># @!method [name]= a setter for the property
2203
+ </span> <span class='comment'># @param value the new value for the property
2204
+ </span> <span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>=</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_value'>value</span><span class='op'>|</span>
2205
+ <span class='id identifier rubyid__register_observer'>_register_observer</span>
2206
+ <span class='ivar'>@changed_properties</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_value'>value</span>
2207
+ <span class='kw'>end</span>
2208
+ <span class='kw'>end</span></pre>
2209
+ </td>
2210
+ </tr>
2211
+ </table>
2212
+ </div>
2213
+
2214
+ <div class="method_details ">
2215
+ <h3 class="signature " id="record_cached?-instance_method">
2216
+
2217
+ #<strong>record_cached?</strong>(id) &#x21d2; <tt>Boolean</tt>
2218
+
2219
+
2220
+
2221
+
2222
+
2223
+ </h3><div class="docstring">
2224
+ <div class="discussion">
2225
+
2226
+ <p>check if a record of current HyperRecord class has been cached already</p>
2227
+
2228
+
2229
+ </div>
2230
+ </div>
2231
+ <div class="tags">
2232
+ <p class="tag_title">Parameters:</p>
2233
+ <ul class="param">
2234
+
2235
+ <li>
2236
+
2237
+ <span class='name'>id</span>
2238
+
2239
+
2240
+ <span class='type'>(<tt>String</tt>)</span>
2241
+
2242
+
2243
+
2244
+ </li>
2245
+
2246
+ </ul>
2247
+
2248
+ <p class="tag_title">Returns:</p>
2249
+ <ul class="return">
2250
+
2251
+ <li>
2252
+
2253
+
2254
+ <span class='type'>(<tt>Boolean</tt>)</span>
2255
+
2256
+
2257
+
2258
+ </li>
2259
+
2260
+ </ul>
2261
+
2262
+ </div><table class="source_code">
2263
+ <tr>
2264
+ <td>
2265
+ <pre class="lines">
2266
+
2267
+
2268
+ 407
2269
+ 408
2270
+ 409</pre>
2271
+ </td>
2272
+ <td>
2273
+ <pre class="code"><span class="info file"># File 'lib/hyper_record/class_methods.rb', line 407</span>
2274
+
2275
+ <span class='kw'>def</span> <span class='id identifier rubyid_record_cached?'>record_cached?</span><span class='lparen'>(</span><span class='id identifier rubyid_id'>id</span><span class='rparen'>)</span>
2276
+ <span class='id identifier rubyid__record_cache'>_record_cache</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_id'>id</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rparen'>)</span>
2277
+ <span class='kw'>end</span></pre>
2278
+ </td>
2279
+ </tr>
2280
+ </table>
2281
+ </div>
2282
+
2283
+ <div class="method_details ">
2284
+ <h3 class="signature " id="reflections-instance_method">
2285
+
2286
+ #<strong>reflections</strong> &#x21d2; <tt>Hash</tt>
2287
+
2288
+
2289
+
2290
+
2291
+
2292
+ </h3><div class="docstring">
2293
+ <div class="discussion">
2294
+
2295
+ <p>introspect on current HyperRecord class</p>
2296
+
2297
+
2298
+ </div>
2299
+ </div>
2300
+ <div class="tags">
2301
+
2302
+ <p class="tag_title">Returns:</p>
2303
+ <ul class="return">
2304
+
2305
+ <li>
2306
+
2307
+
2308
+ <span class='type'>(<tt>Hash</tt>)</span>
2309
+
2310
+
2311
+
2312
+ </li>
2313
+
2314
+ </ul>
2315
+
2316
+ </div><table class="source_code">
2317
+ <tr>
2318
+ <td>
2319
+ <pre class="lines">
2320
+
2321
+
2322
+ 455
2323
+ 456
2324
+ 457</pre>
2325
+ </td>
2326
+ <td>
2327
+ <pre class="code"><span class="info file"># File 'lib/hyper_record/class_methods.rb', line 455</span>
2328
+
2329
+ <span class='kw'>def</span> <span class='id identifier rubyid_reflections'>reflections</span>
2330
+ <span class='ivar'>@reflections</span> <span class='op'>||=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
2331
+ <span class='kw'>end</span></pre>
2332
+ </td>
2333
+ </tr>
2334
+ </table>
2335
+ </div>
2336
+
2337
+ <div class="method_details ">
2338
+ <h3 class="signature " id="resource_base_uri-instance_method">
2339
+
2340
+ #<strong>resource_base_uri</strong> &#x21d2; <tt>String</tt>
2341
+
2342
+
2343
+
2344
+
2345
+
2346
+ </h3><div class="docstring">
2347
+ <div class="discussion">
2348
+
2349
+ <p>get the resource base uri that is used for api calls, used internally</p>
2350
+
2351
+
2352
+ </div>
2353
+ </div>
2354
+ <div class="tags">
2355
+
2356
+ <p class="tag_title">Returns:</p>
2357
+ <ul class="return">
2358
+
2359
+ <li>
2360
+
2361
+
2362
+ <span class='type'>(<tt>String</tt>)</span>
2363
+
2364
+
2365
+
2366
+ </li>
2367
+
2368
+ </ul>
2369
+
2370
+ </div><table class="source_code">
2371
+ <tr>
2372
+ <td>
2373
+ <pre class="lines">
2374
+
2375
+
2376
+ 561
2377
+ 562
2378
+ 563</pre>
2379
+ </td>
2380
+ <td>
2381
+ <pre class="code"><span class="info file"># File 'lib/hyper_record/class_methods.rb', line 561</span>
2382
+
2383
+ <span class='kw'>def</span> <span class='id identifier rubyid_resource_base_uri'>resource_base_uri</span>
2384
+ <span class='ivar'>@resource</span> <span class='op'>||=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='const'><span class='object_link'><a href="../Hyperloop.html" title="Hyperloop (module)">Hyperloop</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Hyperloop/Resource.html" title="Hyperloop::Resource (module)">Resource</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Hyperloop/Resource/ClientDrivers.html" title="Hyperloop::Resource::ClientDrivers (class)">ClientDrivers</a></span></span><span class='period'>.</span><span class='id identifier rubyid_opts'><span class='object_link'><a href="../Hyperloop/Resource/ClientDrivers.html#opts-class_method" title="Hyperloop::Resource::ClientDrivers.opts (method)">opts</a></span></span><span class='lbracket'>[</span><span class='symbol'>:resource_api_base_path</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'>/</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_underscore'>underscore</span><span class='period'>.</span><span class='id identifier rubyid_pluralize'>pluralize</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
2385
+ <span class='kw'>end</span></pre>
2386
+ </td>
2387
+ </tr>
2388
+ </table>
2389
+ </div>
2390
+
2391
+ <div class="method_details ">
2392
+ <h3 class="signature " id="rest_class_method-instance_method">
2393
+
2394
+ #<strong>rest_class_method</strong>(name, options = { default_result: &#39;...&#39; }) &#x21d2; <tt>Object</tt>
2395
+
2396
+
2397
+
2398
+
2399
+
2400
+ </h3><div class="docstring">
2401
+ <div class="discussion">
2402
+
2403
+ <p>macro define rest_class_methods, RPC on class level of current HyperRecord
2404
+ class</p>
2405
+
2406
+ <p>This macro defines additional methods:</p>
2407
+
2408
+
2409
+ </div>
2410
+ </div>
2411
+ <div class="tags">
2412
+ <p class="tag_title">Parameters:</p>
2413
+ <ul class="param">
2414
+
2415
+ <li>
2416
+
2417
+ <span class='name'>name</span>
2418
+
2419
+
2420
+ <span class='type'>(<tt>Symbol</tt>)</span>
2421
+
2422
+
2423
+
2424
+ &mdash;
2425
+ <div class='inline'>
2426
+ <p>name of method</p>
2427
+ </div>
2428
+
2429
+ </li>
2430
+
2431
+ <li>
2432
+
2433
+ <span class='name'>options</span>
2434
+
2435
+
2436
+ <span class='type'>(<tt>Hash</tt>)</span>
2437
+
2438
+
2439
+ <em class="default">(defaults to: <tt>{ default_result: &#39;...&#39; }</tt>)</em>
2440
+
2441
+
2442
+ &mdash;
2443
+ <div class='inline'>
2444
+ <p>with known keys: default_result: result to present during render during
2445
+ method call in progress</p>
2446
+ </div>
2447
+
2448
+ </li>
2449
+
2450
+ </ul>
2451
+
2452
+
2453
+ </div><table class="source_code">
2454
+ <tr>
2455
+ <td>
2456
+ <pre class="lines">
2457
+
2458
+
2459
+ 466
2460
+ 467
2461
+ 468
2462
+ 469
2463
+ 470
2464
+ 471
2465
+ 472
2466
+ 473
2467
+ 474
2468
+ 475
2469
+ 476
2470
+ 477
2471
+ 478
2472
+ 479
2473
+ 480
2474
+ 481
2475
+ 482
2476
+ 483
2477
+ 484
2478
+ 485
2479
+ 486
2480
+ 487
2481
+ 488
2482
+ 489
2483
+ 490
2484
+ 491
2485
+ 492
2486
+ 493
2487
+ 494
2488
+ 495
2489
+ 496
2490
+ 497
2491
+ 498
2492
+ 499
2493
+ 500
2494
+ 501
2495
+ 502
2496
+ 503</pre>
2497
+ </td>
2498
+ <td>
2499
+ <pre class="code"><span class="info file"># File 'lib/hyper_record/class_methods.rb', line 466</span>
2500
+
2501
+ <span class='kw'>def</span> <span class='id identifier rubyid_rest_class_method'>rest_class_method</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>default_result:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>...</span><span class='tstring_end'>&#39;</span></span> <span class='rbrace'>}</span><span class='rparen'>)</span>
2502
+ <span class='id identifier rubyid_rest_class_methods'>rest_class_methods</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span>
2503
+ <span class='comment'># @!method promise_[name]
2504
+ </span> <span class='comment'># @return [Promise] on success the .then block will receive the result of the RPC call as arg
2505
+ </span> <span class='comment'># on failure the .fail block will receive the HTTP response object as arg
2506
+ </span> <span class='id identifier rubyid_define_singleton_method'>define_singleton_method</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>promise_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='op'>|</span>
2507
+ <span class='id identifier rubyid_name_args'>name_args</span> <span class='op'>=</span> <span class='id identifier rubyid__name_args'>_name_args</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
2508
+ <span class='id identifier rubyid__class_fetch_states'>_class_fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>i</span><span class='tstring_end'>&#39;</span></span>
2509
+ <span class='id identifier rubyid_rest_class_methods'>rest_class_methods</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>result:</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:default_result</span><span class='rbracket'>]</span> <span class='rbrace'>}</span> <span class='kw'>unless</span> <span class='id identifier rubyid_rest_class_methods'>rest_class_methods</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rparen'>)</span>
2510
+ <span class='id identifier rubyid__promise_get_or_patch'>_promise_get_or_patch</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_resource_base_uri'>resource_base_uri</span><span class='embexpr_end'>}</span><span class='tstring_content'>/methods/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>.json?timestamp=</span><span class='embexpr_beg'>#{</span><span class='backtick'>`</span><span class='tstring_content'>Date.now() + Math.random()</span><span class='tstring_end'>`</span></span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_then'>then</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_response_json'>response_json</span><span class='op'>|</span>
2511
+ <span class='id identifier rubyid_rest_class_methods'>rest_class_methods</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='symbol'>:result</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_response_json'>response_json</span><span class='lbracket'>[</span><span class='symbol'>:result</span><span class='rbracket'>]</span> <span class='comment'># result is parsed json
2512
+ </span> <span class='id identifier rubyid__class_fetch_states'>_class_fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>f</span><span class='tstring_end'>&#39;</span></span>
2513
+ <span class='id identifier rubyid__notify_class_observers'>_notify_class_observers</span>
2514
+ <span class='id identifier rubyid_rest_class_methods'>rest_class_methods</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='symbol'>:result</span><span class='rbracket'>]</span>
2515
+ <span class='kw'>end</span><span class='period'>.</span><span class='id identifier rubyid_fail'>fail</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_response'>response</span><span class='op'>|</span>
2516
+ <span class='id identifier rubyid_error_message'>error_message</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='embexpr_end'>}</span><span class='tstring_content'>.</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>, a rest_method, failed to execute!</span><span class='tstring_end'>&quot;</span></span>
2517
+ <span class='backtick'>`</span><span class='tstring_content'>console.error(error_message)</span><span class='tstring_end'>`</span></span>
2518
+ <span class='id identifier rubyid_response'>response</span>
2519
+ <span class='kw'>end</span>
2520
+ <span class='kw'>end</span>
2521
+ <span class='comment'># @!method [name]
2522
+ </span> <span class='comment'># @return result either the default_result ass specified in the options or the real result if the RPC call already finished
2523
+ </span> <span class='id identifier rubyid_define_singleton_method'>define_singleton_method</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='op'>|</span>
2524
+ <span class='id identifier rubyid_name_args'>name_args</span> <span class='op'>=</span> <span class='id identifier rubyid__name_args'>_name_args</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
2525
+ <span class='id identifier rubyid__register_class_observer'>_register_class_observer</span>
2526
+ <span class='id identifier rubyid_rest_class_methods'>rest_class_methods</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>result:</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:default_result</span><span class='rbracket'>]</span> <span class='rbrace'>}</span> <span class='kw'>unless</span> <span class='id identifier rubyid_rest_class_methods'>rest_class_methods</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rparen'>)</span>
2527
+ <span class='kw'>unless</span> <span class='id identifier rubyid__class_fetch_states'>_class_fetch_states</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>fi</span><span class='tstring_end'>&#39;</span></span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid__class_fetch_states'>_class_fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span><span class='rparen'>)</span>
2528
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>promise_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
2529
+ <span class='kw'>end</span>
2530
+ <span class='id identifier rubyid_rest_class_methods'>rest_class_methods</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='symbol'>:result</span><span class='rbracket'>]</span>
2531
+ <span class='kw'>end</span>
2532
+ <span class='comment'># @!method update_[name] mark internal structures so that the method is called again once it is requested again
2533
+ </span> <span class='comment'># @return nil
2534
+ </span> <span class='id identifier rubyid_define_singleton_method'>define_singleton_method</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>update_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='op'>|</span>
2535
+ <span class='id identifier rubyid__class_fetch_states'>_class_fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid__name_args'>_name_args</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>u</span><span class='tstring_end'>&#39;</span></span>
2536
+ <span class='kw'>nil</span>
2537
+ <span class='kw'>end</span>
2538
+ <span class='kw'>end</span></pre>
2539
+ </td>
2540
+ </tr>
2541
+ </table>
2542
+ </div>
2543
+
2544
+ <div class="method_details ">
2545
+ <h3 class="signature " id="rest_class_methods-instance_method">
2546
+
2547
+ #<strong>rest_class_methods</strong> &#x21d2; <tt>Hash</tt>
2548
+
2549
+
2550
+
2551
+
2552
+
2553
+ </h3><div class="docstring">
2554
+ <div class="discussion">
2555
+
2556
+ <p>introspect on available rest_class_methods</p>
2557
+
2558
+
2559
+ </div>
2560
+ </div>
2561
+ <div class="tags">
2562
+
2563
+ <p class="tag_title">Returns:</p>
2564
+ <ul class="return">
2565
+
2566
+ <li>
2567
+
2568
+
2569
+ <span class='type'>(<tt>Hash</tt>)</span>
2570
+
2571
+
2572
+
2573
+ </li>
2574
+
2575
+ </ul>
2576
+
2577
+ </div><table class="source_code">
2578
+ <tr>
2579
+ <td>
2580
+ <pre class="lines">
2581
+
2582
+
2583
+ 555
2584
+ 556
2585
+ 557</pre>
2586
+ </td>
2587
+ <td>
2588
+ <pre class="code"><span class="info file"># File 'lib/hyper_record/class_methods.rb', line 555</span>
2589
+
2590
+ <span class='kw'>def</span> <span class='id identifier rubyid_rest_class_methods'>rest_class_methods</span>
2591
+ <span class='ivar'>@rest_class_methods</span> <span class='op'>||=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
2592
+ <span class='kw'>end</span></pre>
2593
+ </td>
2594
+ </tr>
2595
+ </table>
2596
+ </div>
2597
+
2598
+ <div class="method_details ">
2599
+ <h3 class="signature " id="rest_method-instance_method">
2600
+
2601
+ #<strong>rest_method</strong>(name, options = { default_result: &#39;...&#39; }) &#x21d2; <tt>Object</tt>
2602
+
2603
+
2604
+
2605
+
2606
+
2607
+ </h3><div class="docstring">
2608
+ <div class="discussion">
2609
+
2610
+ <p>macro define rest_class_methods, RPC on instance level of a record of
2611
+ current HyperRecord class</p>
2612
+
2613
+ <p>This macro defines additional methods:</p>
2614
+
2615
+
2616
+ </div>
2617
+ </div>
2618
+ <div class="tags">
2619
+ <p class="tag_title">Parameters:</p>
2620
+ <ul class="param">
2621
+
2622
+ <li>
2623
+
2624
+ <span class='name'>name</span>
2625
+
2626
+
2627
+ <span class='type'>(<tt>Symbol</tt>)</span>
2628
+
2629
+
2630
+
2631
+ &mdash;
2632
+ <div class='inline'>
2633
+ <p>name of method</p>
2634
+ </div>
2635
+
2636
+ </li>
2637
+
2638
+ <li>
2639
+
2640
+ <span class='name'>options</span>
2641
+
2642
+
2643
+ <span class='type'>(<tt>Hash</tt>)</span>
2644
+
2645
+
2646
+ <em class="default">(defaults to: <tt>{ default_result: &#39;...&#39; }</tt>)</em>
2647
+
2648
+
2649
+ &mdash;
2650
+ <div class='inline'>
2651
+ <p>with known keys: default_result: result to present during render during
2652
+ method call in progress</p>
2653
+ </div>
2654
+
2655
+ </li>
2656
+
2657
+ </ul>
2658
+
2659
+
2660
+ </div><table class="source_code">
2661
+ <tr>
2662
+ <td>
2663
+ <pre class="lines">
2664
+
2665
+
2666
+ 512
2667
+ 513
2668
+ 514
2669
+ 515
2670
+ 516
2671
+ 517
2672
+ 518
2673
+ 519
2674
+ 520
2675
+ 521
2676
+ 522
2677
+ 523
2678
+ 524
2679
+ 525
2680
+ 526
2681
+ 527
2682
+ 528
2683
+ 529
2684
+ 530
2685
+ 531
2686
+ 532
2687
+ 533
2688
+ 534
2689
+ 535
2690
+ 536
2691
+ 537
2692
+ 538
2693
+ 539
2694
+ 540
2695
+ 541
2696
+ 542
2697
+ 543
2698
+ 544
2699
+ 545
2700
+ 546
2701
+ 547
2702
+ 548
2703
+ 549
2704
+ 550
2705
+ 551</pre>
2706
+ </td>
2707
+ <td>
2708
+ <pre class="code"><span class="info file"># File 'lib/hyper_record/class_methods.rb', line 512</span>
2709
+
2710
+ <span class='kw'>def</span> <span class='id identifier rubyid_rest_method'>rest_method</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>default_result:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>...</span><span class='tstring_end'>&#39;</span></span> <span class='rbrace'>}</span><span class='rparen'>)</span>
2711
+ <span class='comment'># @!method promise_[name]
2712
+ </span> <span class='comment'># @return [Promise] on success the .then block will receive the result of the RPC call as arg
2713
+ </span> <span class='comment'># on failure the .fail block will receive the HTTP response object as arg
2714
+ </span> <span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>promise_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='op'>|</span>
2715
+ <span class='id identifier rubyid_name_args'>name_args</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid__name_args'>_name_args</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
2716
+ <span class='ivar'>@fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>i</span><span class='tstring_end'>&#39;</span></span>
2717
+ <span class='ivar'>@rest_methods</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span> <span class='kw'>unless</span> <span class='ivar'>@rest_methods</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
2718
+ <span class='ivar'>@rest_methods</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>result:</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:default_result</span><span class='rbracket'>]</span> <span class='rbrace'>}</span> <span class='kw'>unless</span> <span class='ivar'>@rest_methods</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rparen'>)</span>
2719
+ <span class='id identifier rubyid_raise'>raise</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='embexpr_end'>}</span><span class='tstring_content'>[_no_id_].</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>, can&#39;t execute instance rest_method without id!</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>unless</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span>
2720
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid__promise_get_or_patch'>_promise_get_or_patch</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_resource_base_uri'>resource_base_uri</span><span class='embexpr_end'>}</span><span class='tstring_content'>/</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span><span class='embexpr_end'>}</span><span class='tstring_content'>/methods/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>.json?timestamp=</span><span class='embexpr_beg'>#{</span><span class='backtick'>`</span><span class='tstring_content'>Date.now() + Math.random()</span><span class='tstring_end'>`</span></span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_then'>then</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_response_json'>response_json</span><span class='op'>|</span>
2721
+ <span class='ivar'>@rest_methods</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='symbol'>:result</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_response_json'>response_json</span><span class='lbracket'>[</span><span class='symbol'>:result</span><span class='rbracket'>]</span> <span class='comment'># result is parsed json
2722
+ </span> <span class='ivar'>@fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>f</span><span class='tstring_end'>&#39;</span></span>
2723
+ <span class='id identifier rubyid__notify_observers'>_notify_observers</span>
2724
+ <span class='ivar'>@rest_methods</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='symbol'>:result</span><span class='rbracket'>]</span>
2725
+ <span class='kw'>end</span><span class='period'>.</span><span class='id identifier rubyid_fail'>fail</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_response'>response</span><span class='op'>|</span>
2726
+ <span class='id identifier rubyid_error_message'>error_message</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='embexpr_end'>}</span><span class='tstring_content'>[</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span><span class='embexpr_end'>}</span><span class='tstring_content'>].</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>, a rest_method, failed to execute!</span><span class='tstring_end'>&quot;</span></span>
2727
+ <span class='backtick'>`</span><span class='tstring_content'>console.error(error_message)</span><span class='tstring_end'>`</span></span>
2728
+ <span class='id identifier rubyid_response'>response</span>
2729
+ <span class='kw'>end</span>
2730
+ <span class='kw'>end</span>
2731
+ <span class='comment'># @!method [name]
2732
+ </span> <span class='comment'># @return result either the default_result ass specified in the options or the real result if the RPC call already finished
2733
+ </span> <span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='op'>|</span>
2734
+ <span class='id identifier rubyid__register_observer'>_register_observer</span>
2735
+ <span class='id identifier rubyid_name_args'>name_args</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid__name_args'>_name_args</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
2736
+ <span class='ivar'>@rest_methods</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span> <span class='kw'>unless</span> <span class='ivar'>@rest_methods</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
2737
+ <span class='ivar'>@rest_methods</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>result:</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:default_result</span><span class='rbracket'>]</span> <span class='rbrace'>}</span> <span class='kw'>unless</span> <span class='ivar'>@rest_methods</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rparen'>)</span>
2738
+ <span class='kw'>unless</span> <span class='ivar'>@fetch_states</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>fi</span><span class='tstring_end'>&#39;</span></span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='ivar'>@fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span><span class='rparen'>)</span>
2739
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>promise_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
2740
+ <span class='kw'>end</span>
2741
+ <span class='ivar'>@rest_methods</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='symbol'>:result</span><span class='rbracket'>]</span>
2742
+ <span class='kw'>end</span>
2743
+ <span class='comment'># @!method update_[name] mark internal structures so that the method is called again once it is requested again
2744
+ </span> <span class='comment'># @return nil
2745
+ </span> <span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>update_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='op'>|</span>
2746
+ <span class='ivar'>@fetch_states</span><span class='lbracket'>[</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid__name_args'>_name_args</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>u</span><span class='tstring_end'>&#39;</span></span>
2747
+ <span class='kw'>nil</span>
2748
+ <span class='kw'>end</span>
2749
+ <span class='kw'>end</span></pre>
2750
+ </td>
2751
+ </tr>
2752
+ </table>
2753
+ </div>
2754
+
2755
+ <div class="method_details ">
2756
+ <h3 class="signature " id="scope-instance_method">
2757
+
2758
+ #<strong>scope</strong>(name, options) &#x21d2; <tt>Object</tt>
2759
+
2760
+
2761
+
2762
+
2763
+
2764
+ </h3><div class="docstring">
2765
+ <div class="discussion">
2766
+
2767
+ <p>DSL macro to declare a scope options are for the server side ORM, on the
2768
+ client side options are ignored</p>
2769
+
2770
+ <p>This macro defines additional methods:</p>
2771
+
2772
+
2773
+ </div>
2774
+ </div>
2775
+ <div class="tags">
2776
+ <p class="tag_title">Parameters:</p>
2777
+ <ul class="param">
2778
+
2779
+ <li>
2780
+
2781
+ <span class='name'>name</span>
2782
+
2783
+
2784
+ <span class='type'>(<tt>String</tt>)</span>
2785
+
2786
+
2787
+
2788
+ &mdash;
2789
+ <div class='inline'>
2790
+ <p>or [Symbol] the name of the relation</p>
2791
+ </div>
2792
+
2793
+ </li>
2794
+
2795
+ <li>
2796
+
2797
+ <span class='name'>options</span>
2798
+
2799
+
2800
+ <span class='type'>(<tt>Hash</tt>)</span>
2801
+
2802
+
2803
+
2804
+ &mdash;
2805
+ <div class='inline'>
2806
+ <p>further options</p>
2807
+ </div>
2808
+
2809
+ </li>
2810
+
2811
+ </ul>
2812
+
2813
+
2814
+ </div><table class="source_code">
2815
+ <tr>
2816
+ <td>
2817
+ <pre class="lines">
2818
+
2819
+
2820
+ 572
2821
+ 573
2822
+ 574
2823
+ 575
2824
+ 576
2825
+ 577
2826
+ 578
2827
+ 579
2828
+ 580
2829
+ 581
2830
+ 582
2831
+ 583
2832
+ 584
2833
+ 585
2834
+ 586
2835
+ 587
2836
+ 588
2837
+ 589
2838
+ 590
2839
+ 591
2840
+ 592
2841
+ 593
2842
+ 594
2843
+ 595
2844
+ 596
2845
+ 597
2846
+ 598
2847
+ 599
2848
+ 600
2849
+ 601
2850
+ 602
2851
+ 603
2852
+ 604
2853
+ 605
2854
+ 606
2855
+ 607
2856
+ 608</pre>
2857
+ </td>
2858
+ <td>
2859
+ <pre class="code"><span class="info file"># File 'lib/hyper_record/class_methods.rb', line 572</span>
2860
+
2861
+ <span class='kw'>def</span> <span class='id identifier rubyid_scope'>scope</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
2862
+ <span class='comment'># @!method promise_[name]
2863
+ </span> <span class='comment'># @return [Promise] on success the .then block will receive a [HyperRecord::Collection] as arg
2864
+ </span> <span class='comment'># on failure the .fail block will receive the HTTP response object as arg
2865
+ </span> <span class='id identifier rubyid_define_singleton_method'>define_singleton_method</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>promise_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='op'>|</span>
2866
+ <span class='id identifier rubyid_name_args'>name_args</span> <span class='op'>=</span> <span class='id identifier rubyid__name_args'>_name_args</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
2867
+ <span class='id identifier rubyid__class_fetch_states'>_class_fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>i</span><span class='tstring_end'>&#39;</span></span>
2868
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid__promise_get_or_patch'>_promise_get_or_patch</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_resource_base_uri'>resource_base_uri</span><span class='embexpr_end'>}</span><span class='tstring_content'>/scopes/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>.json?timestamp=</span><span class='embexpr_beg'>#{</span><span class='backtick'>`</span><span class='tstring_content'>Date.now() + Math.random()</span><span class='tstring_end'>`</span></span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_then'>then</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_response_json'>response_json</span><span class='op'>|</span>
2869
+ <span class='id identifier rubyid_scopes'>scopes</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid__convert_array_to_collection'>_convert_array_to_collection</span><span class='lparen'>(</span><span class='id identifier rubyid_response_json'>response_json</span><span class='lbracket'>[</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_underscore'>underscore</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='rparen'>)</span>
2870
+ <span class='id identifier rubyid__class_fetch_states'>_class_fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>f</span><span class='tstring_end'>&#39;</span></span>
2871
+ <span class='id identifier rubyid__notify_class_observers'>_notify_class_observers</span>
2872
+ <span class='id identifier rubyid_scopes'>scopes</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span>
2873
+ <span class='kw'>end</span><span class='period'>.</span><span class='id identifier rubyid_fail'>fail</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_response'>response</span><span class='op'>|</span>
2874
+ <span class='id identifier rubyid_error_message'>error_message</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='embexpr_end'>}</span><span class='tstring_content'>.</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name_args'>name_args</span><span class='embexpr_end'>}</span><span class='tstring_content'>, a scope, failed to fetch records!</span><span class='tstring_end'>&quot;</span></span>
2875
+ <span class='backtick'>`</span><span class='tstring_content'>console.error(error_message)</span><span class='tstring_end'>`</span></span>
2876
+ <span class='id identifier rubyid_response'>response</span>
2877
+ <span class='kw'>end</span>
2878
+ <span class='kw'>end</span>
2879
+ <span class='comment'># @!method [name] get records of the scope
2880
+ </span> <span class='comment'># @return [HyperRecord::Collection] either a empty one, if the data has not been fetched yet, or the
2881
+ </span> <span class='comment'># collection with the real data, if it has been fetched already
2882
+ </span> <span class='id identifier rubyid_define_singleton_method'>define_singleton_method</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='op'>|</span>
2883
+ <span class='id identifier rubyid_name_args'>name_args</span> <span class='op'>=</span> <span class='id identifier rubyid__name_args'>_name_args</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
2884
+ <span class='id identifier rubyid_scopes'>scopes</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../HyperRecord.html" title="HyperRecord (module)">HyperRecord</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Collection.html" title="HyperRecord::Collection (class)">Collection</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Collection.html#initialize-instance_method" title="HyperRecord::Collection#initialize (method)">new</a></span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_scopes'>scopes</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rparen'>)</span>
2885
+ <span class='id identifier rubyid__register_class_observer'>_register_class_observer</span>
2886
+ <span class='kw'>unless</span> <span class='id identifier rubyid__class_fetch_states'>_class_fetch_states</span><span class='period'>.</span><span class='id identifier rubyid_has_key?'>has_key?</span><span class='lparen'>(</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>fi</span><span class='tstring_end'>&#39;</span></span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid__class_fetch_states'>_class_fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span><span class='rparen'>)</span>
2887
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>promise_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
2888
+ <span class='kw'>end</span>
2889
+ <span class='id identifier rubyid_scopes'>scopes</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_args'>name_args</span><span class='rbracket'>]</span>
2890
+ <span class='kw'>end</span>
2891
+ <span class='comment'># @!method update_[name] mark internal structures so that the scope data is updated once it is requested again
2892
+ </span> <span class='comment'># @return nil
2893
+ </span> <span class='id identifier rubyid_define_singleton_method'>define_singleton_method</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>update_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='op'>|</span>
2894
+ <span class='id identifier rubyid__class_fetch_states'>_class_fetch_states</span><span class='lbracket'>[</span><span class='id identifier rubyid__name_args'>_name_args</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>u</span><span class='tstring_end'>&#39;</span></span>
2895
+ <span class='kw'>nil</span>
2896
+ <span class='kw'>end</span>
2897
+ <span class='kw'>end</span></pre>
2898
+ </td>
2899
+ </tr>
2900
+ </table>
2901
+ </div>
2902
+
2903
+ <div class="method_details ">
2904
+ <h3 class="signature " id="scopes-instance_method">
2905
+
2906
+ #<strong>scopes</strong> &#x21d2; <tt>Hash</tt>
2907
+
2908
+
2909
+
2910
+
2911
+
2912
+ </h3><div class="docstring">
2913
+ <div class="discussion">
2914
+
2915
+ <p>introspect on available scopes</p>
2916
+
2917
+
2918
+ </div>
2919
+ </div>
2920
+ <div class="tags">
2921
+
2922
+ <p class="tag_title">Returns:</p>
2923
+ <ul class="return">
2924
+
2925
+ <li>
2926
+
2927
+
2928
+ <span class='type'>(<tt>Hash</tt>)</span>
2929
+
2930
+
2931
+
2932
+ </li>
2933
+
2934
+ </ul>
2935
+
2936
+ </div><table class="source_code">
2937
+ <tr>
2938
+ <td>
2939
+ <pre class="lines">
2940
+
2941
+
2942
+ 612
2943
+ 613
2944
+ 614</pre>
2945
+ </td>
2946
+ <td>
2947
+ <pre class="code"><span class="info file"># File 'lib/hyper_record/class_methods.rb', line 612</span>
2948
+
2949
+ <span class='kw'>def</span> <span class='id identifier rubyid_scopes'>scopes</span>
2950
+ <span class='ivar'>@scopes</span> <span class='op'>||=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
2951
+ <span class='kw'>end</span></pre>
2952
+ </td>
2953
+ </tr>
2954
+ </table>
2955
+ </div>
2956
+
2957
+ </div>
2958
+
2959
+ </div>
2960
+
2961
+ <div id="footer">
2962
+ Generated on Tue Jun 5 23:13:52 2018 by
2963
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
2964
+ 0.9.13 (ruby-2.5.1).
2965
+ </div>
2966
+
2967
+ </div>
2968
+ </body>
2969
+ </html>