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.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.yardopts +1 -0
- data/API.md +62 -0
- data/Gemfile +2 -0
- data/JSON_format.md +62 -0
- data/PubSub.md +20 -0
- data/README.md +2 -0
- data/Security.md +0 -0
- data/docs/HyperRecord/ClassMethods.html +2969 -0
- data/docs/HyperRecord/ClientInstanceMethods.html +1833 -0
- data/docs/HyperRecord/Collection.html +564 -0
- data/docs/HyperRecord/DummyValue.html +384 -0
- data/docs/HyperRecord/PubSub/ClassMethods.html +2047 -0
- data/docs/HyperRecord/PubSub.html +1679 -0
- data/docs/HyperRecord/ServerClassMethods.html +697 -0
- data/docs/HyperRecord.html +119 -0
- data/docs/Hyperloop/Resource/ClientDrivers.html +352 -0
- data/docs/Hyperloop/Resource/HTTP.html +1795 -0
- data/docs/Hyperloop/Resource/MethodsController.html +479 -0
- data/docs/Hyperloop/Resource/PropertiesController.html +225 -0
- data/docs/Hyperloop/Resource/PubSub/ClassMethods.html +105 -0
- data/docs/Hyperloop/Resource/PubSub.html +1210 -0
- data/docs/Hyperloop/Resource/RelationsController.html +529 -0
- data/docs/Hyperloop/Resource/ScopesController.html +380 -0
- data/docs/Hyperloop/Resource/SecurityError.html +124 -0
- data/docs/Hyperloop/Resource/SecurityGuards/ClassMethods.html +226 -0
- data/docs/Hyperloop/Resource/SecurityGuards.html +299 -0
- data/docs/Hyperloop/Resource.html +135 -0
- data/docs/Hyperloop.html +186 -0
- data/docs/_index.html +302 -0
- data/docs/class_list.html +51 -0
- data/docs/css/common.css +1 -0
- data/docs/css/full_list.css +58 -0
- data/docs/css/style.css +496 -0
- data/docs/file.API.html +138 -0
- data/docs/file.JSON_format.html +134 -0
- data/docs/file.PubSub.html +86 -0
- data/docs/file.README.html +192 -0
- data/docs/file_list.html +71 -0
- data/docs/frames.html +17 -0
- data/docs/index.html +192 -0
- data/docs/js/app.js +292 -0
- data/docs/js/full_list.js +216 -0
- data/docs/js/jquery.js +4 -0
- data/docs/method_list.html +1115 -0
- data/docs/top-level-namespace.html +110 -0
- data/hyper-resource.gemspec +19 -18
- data/lib/hyper_record/class_methods.rb +186 -3
- data/lib/hyper_record/client_instance_methods.rb +68 -3
- data/lib/hyper_record/collection.rb +19 -4
- data/lib/hyper_record/pub_sub.rb +92 -12
- data/lib/hyper_record/server_class_methods.rb +15 -0
- data/lib/hyperloop/resource/client_drivers.rb +2 -0
- data/lib/hyperloop/resource/http.rb +33 -22
- data/lib/hyperloop/resource/pub_sub.rb +2 -0
- data/lib/hyperloop/resource/version.rb +1 -1
- 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
|
+
— 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> »
|
40
|
+
<span class='title'><span class='object_link'><a href="../HyperRecord.html" title="HyperRecord (module)">HyperRecord</a></span></span>
|
41
|
+
»
|
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> ⇒ 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 }) ⇒ 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 = {}) ⇒ 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) ⇒ 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 }) ⇒ 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 }) ⇒ 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 }) ⇒ 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 = {}) ⇒ 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> ⇒ 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 = {}) ⇒ 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) ⇒ 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 = {}) ⇒ 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) ⇒ 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> ⇒ 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> ⇒ 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: '...' }) ⇒ 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> ⇒ 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: '...' }) ⇒ 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) ⇒ 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> ⇒ 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> ⇒ <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'>&&</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>fi</span><span class='tstring_end'>'</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 }) ⇒ <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
|
+
—
|
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
|
+
—
|
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
|
+
—
|
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'>"</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'>"</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'>'</span><span class='tstring_content'>i</span><span class='tstring_end'>'</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'>"</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'>"</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'>'</span><span class='tstring_content'>f</span><span class='tstring_end'>'</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'>"</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'>"</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'>&&</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>fi</span><span class='tstring_end'>'</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'>"</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'>"</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'>"</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'>"</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'>'</span><span class='tstring_content'>u</span><span class='tstring_end'>'</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("#{name}=") 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] = 'f'
|
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 = {}) ⇒ <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
|
+
—
|
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
|
+
—
|
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) ⇒ <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
|
+
—
|
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'>'</span><span class='tstring_end'>'</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'>&&</span> <span class='id identifier rubyid__class_fetch_states'>_class_fetch_states</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>"</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'>"</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>f</span><span class='tstring_end'>'</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'>"</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'>"</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'>&&</span> <span class='id identifier rubyid__class_fetch_states'>_class_fetch_states</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>"</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'>"</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>i</span><span class='tstring_end'>'</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 }) ⇒ <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
|
+
—
|
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
|
+
—
|
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
|
+
—
|
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'>"</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'>"</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'>'</span><span class='tstring_content'>i</span><span class='tstring_end'>'</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'>"</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'>"</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'>'</span><span class='tstring_content'>f</span><span class='tstring_end'>'</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'>"</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'>"</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'>&&</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>fi</span><span class='tstring_end'>'</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'>"</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'>"</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'>"</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'>"</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'>'</span><span class='tstring_content'>u</span><span class='tstring_end'>'</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("#{name}=") 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 "Argument must be a HyperRecord::Collection or a Array"
|
1275
|
+
</span> <span class='comment'># end
|
1276
|
+
</span> <span class='comment'># @relations[name] = collection
|
1277
|
+
</span> <span class='comment'># @fetch_states[name] = 'f'
|
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 }) ⇒ <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
|
+
—
|
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
|
+
—
|
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
|
+
—
|
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'>"</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'>"</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'>'</span><span class='tstring_content'>i</span><span class='tstring_end'>'</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'>"</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'>"</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'>'</span><span class='tstring_content'>f</span><span class='tstring_end'>'</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'>"</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'>"</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'>&&</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>fi</span><span class='tstring_end'>'</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'>"</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'>"</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'>"</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'>"</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'>'</span><span class='tstring_content'>u</span><span class='tstring_end'>'</span></span>
|
1487
|
+
<span class='kw'>nil</span>
|
1488
|
+
<span class='kw'>end</span>
|
1489
|
+
<span class='comment'># define_method("#{name}=") 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 "Argument must be a HyperRecord::Collection or a Array"
|
1497
|
+
</span> <span class='comment'># end
|
1498
|
+
</span> <span class='comment'># @relations[name] = collection
|
1499
|
+
</span> <span class='comment'># @fetch_states[name] = 'f'
|
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 }) ⇒ <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
|
+
—
|
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
|
+
—
|
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
|
+
—
|
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'>"</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'>"</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'>'</span><span class='tstring_content'>i</span><span class='tstring_end'>'</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'>"</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'>"</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'>'</span><span class='tstring_content'>f</span><span class='tstring_end'>'</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'>"</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'>"</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'>&&</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>fi</span><span class='tstring_end'>'</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'>"</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'>"</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'>"</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'>"</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'>'</span><span class='tstring_content'>u</span><span class='tstring_end'>'</span></span>
|
1698
|
+
<span class='kw'>nil</span>
|
1699
|
+
<span class='kw'>end</span>
|
1700
|
+
<span class='comment'># define_method("#{name}=") 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] = 'f'
|
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 = {}) ⇒ <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
|
+
—
|
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
|
+
—
|
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> ⇒ <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
|
+
—
|
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'>'</span><span class='tstring_content'>i</span><span class='tstring_end'>'</span></span>
|
1878
|
+
<span class='id identifier rubyid__promise_get'>_promise_get</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</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'>"</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'>'</span><span class='tstring_content'>f</span><span class='tstring_end'>'</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'>"</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'>"</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 = {}) ⇒ <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
|
+
—
|
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
|
+
—
|
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) ⇒ <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
|
+
—
|
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
|
+
—
|
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 = {}) ⇒ <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
|
+
—
|
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
|
+
—
|
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'>"</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'>"</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) ⇒ <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> ⇒ <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> ⇒ <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'>"</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'>"</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: '...' }) ⇒ <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
|
+
—
|
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: '...' }</tt>)</em>
|
2440
|
+
|
2441
|
+
|
2442
|
+
—
|
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'>'</span><span class='tstring_content'>...</span><span class='tstring_end'>'</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'>"</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'>"</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'>'</span><span class='tstring_content'>i</span><span class='tstring_end'>'</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'>"</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'>"</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'>'</span><span class='tstring_content'>f</span><span class='tstring_end'>'</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'>"</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'>"</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'>&&</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>fi</span><span class='tstring_end'>'</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'>"</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'>"</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'>"</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'>"</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'>'</span><span class='tstring_content'>u</span><span class='tstring_end'>'</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> ⇒ <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: '...' }) ⇒ <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
|
+
—
|
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: '...' }</tt>)</em>
|
2647
|
+
|
2648
|
+
|
2649
|
+
—
|
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'>'</span><span class='tstring_content'>...</span><span class='tstring_end'>'</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'>"</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'>"</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'>'</span><span class='tstring_content'>i</span><span class='tstring_end'>'</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'>"</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't execute instance rest_method without id!</span><span class='tstring_end'>"</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'>"</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'>"</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'>'</span><span class='tstring_content'>f</span><span class='tstring_end'>'</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'>"</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'>"</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'>&&</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>fi</span><span class='tstring_end'>'</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'>"</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'>"</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'>"</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'>"</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'>'</span><span class='tstring_content'>u</span><span class='tstring_end'>'</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) ⇒ <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
|
+
—
|
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
|
+
—
|
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'>"</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'>"</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'>'</span><span class='tstring_content'>i</span><span class='tstring_end'>'</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'>"</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'>"</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'>'</span><span class='tstring_content'>f</span><span class='tstring_end'>'</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'>"</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'>"</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'>&&</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>fi</span><span class='tstring_end'>'</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'>"</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'>"</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'>"</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'>"</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'>'</span><span class='tstring_content'>u</span><span class='tstring_end'>'</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> ⇒ <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>
|