kabk 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of kabk might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/CHANGELOG.md +27 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +108 -0
- data/Kabk_logo.svg +33 -0
- data/LICENSE +21 -0
- data/README.md +101 -0
- data/doc/Kabk/Adapters/Base.html +854 -0
- data/doc/Kabk/Adapters/SequelAdapter.html +948 -0
- data/doc/Kabk/Adapters.html +120 -0
- data/doc/Kabk/ApiError.html +511 -0
- data/doc/Kabk/Auth/JwtStrategy.html +551 -0
- data/doc/Kabk/Auth.html +118 -0
- data/doc/Kabk/Concurrency.html +297 -0
- data/doc/Kabk/ConcurrencyConflictError.html +225 -0
- data/doc/Kabk/Error.html +140 -0
- data/doc/Kabk/ExportHandler.html +381 -0
- data/doc/Kabk/Field.html +2160 -0
- data/doc/Kabk/ForbiddenError.html +225 -0
- data/doc/Kabk/InvalidFieldError.html +136 -0
- data/doc/Kabk/InvalidOldPasswordError.html +225 -0
- data/doc/Kabk/NotFoundError.html +225 -0
- data/doc/Kabk/QueryBuilder.html +551 -0
- data/doc/Kabk/Registry.html +608 -0
- data/doc/Kabk/RelationHydrator.html +480 -0
- data/doc/Kabk/Resource.html +1986 -0
- data/doc/Kabk/ResourceBuilder.html +1002 -0
- data/doc/Kabk/RestEngine.html +879 -0
- data/doc/Kabk/SchemaRenderer.html +318 -0
- data/doc/Kabk/UnauthorizedError.html +225 -0
- data/doc/Kabk/UploadHandler.html +308 -0
- data/doc/Kabk/ValidationError.html +225 -0
- data/doc/Kabk/Validator.html +380 -0
- data/doc/Kabk.html +330 -0
- data/doc/_index.html +376 -0
- data/doc/class_list.html +54 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +206 -0
- data/doc/css/style.css +1089 -0
- data/doc/file.README.html +149 -0
- data/doc/file_list.html +59 -0
- data/doc/frames.html +22 -0
- data/doc/index.html +149 -0
- data/doc/js/app.js +801 -0
- data/doc/js/full_list.js +334 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +910 -0
- data/doc/top-level-namespace.html +112 -0
- data/docs/API_REFERENCE.md +241 -0
- data/lib/kabk/adapters/base.rb +45 -0
- data/lib/kabk/adapters/sequel_adapter.rb +125 -0
- data/lib/kabk/concurrency.rb +30 -0
- data/lib/kabk/errors.rb +62 -0
- data/lib/kabk/export_handler.rb +43 -0
- data/lib/kabk/field.rb +97 -0
- data/lib/kabk/query_builder.rb +72 -0
- data/lib/kabk/registry.rb +41 -0
- data/lib/kabk/relation_hydrator.rb +107 -0
- data/lib/kabk/resource.rb +88 -0
- data/lib/kabk/resource_builder.rb +93 -0
- data/lib/kabk/rest_engine.rb +84 -0
- data/lib/kabk/schema_renderer.rb +69 -0
- data/lib/kabk/upload_handler.rb +24 -0
- data/lib/kabk/validator.rb +64 -0
- data/lib/kabk/version.rb +6 -0
- data/lib/kabk.rb +51 -0
- metadata +193 -0
|
@@ -0,0 +1,480 @@
|
|
|
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
|
+
Class: Kabk::RelationHydrator
|
|
8
|
+
|
|
9
|
+
— Documentation by YARD 0.9.45
|
|
10
|
+
|
|
11
|
+
</title>
|
|
12
|
+
|
|
13
|
+
<link rel="stylesheet" href="../css/style.css" type="text/css">
|
|
14
|
+
|
|
15
|
+
<link rel="stylesheet" href="../css/common.css" type="text/css">
|
|
16
|
+
|
|
17
|
+
<script type="text/javascript">
|
|
18
|
+
pathId = "Kabk::RelationHydrator";
|
|
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 id="main_progress" aria-hidden="true"></div>
|
|
31
|
+
|
|
32
|
+
<div class="nav_wrap">
|
|
33
|
+
<iframe id="nav" src="../class_list.html?1"></iframe>
|
|
34
|
+
<div id="resizer"></div>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<div id="main" tabindex="-1">
|
|
38
|
+
<div id="header">
|
|
39
|
+
<div id="menu">
|
|
40
|
+
|
|
41
|
+
<a href="../_index.html">Index (R)</a> »
|
|
42
|
+
<span class='title'><span class='object_link'><a href="../Kabk.html" title="Kabk (module)">Kabk</a></span></span>
|
|
43
|
+
»
|
|
44
|
+
<span class="title">RelationHydrator</span>
|
|
45
|
+
|
|
46
|
+
</div>
|
|
47
|
+
|
|
48
|
+
<div id="search">
|
|
49
|
+
|
|
50
|
+
<a class="full_list_link" id="class_list_link"
|
|
51
|
+
href="../class_list.html">
|
|
52
|
+
|
|
53
|
+
<svg width="24" height="24">
|
|
54
|
+
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
|
|
55
|
+
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
|
|
56
|
+
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
|
|
57
|
+
</svg>
|
|
58
|
+
</a>
|
|
59
|
+
|
|
60
|
+
</div>
|
|
61
|
+
<div class="clear"></div>
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
<div id="content"><h1>Class: Kabk::RelationHydrator
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
</h1>
|
|
69
|
+
<div class="box_info">
|
|
70
|
+
|
|
71
|
+
<dl>
|
|
72
|
+
<dt>Inherits:</dt>
|
|
73
|
+
<dd>
|
|
74
|
+
<span class="inheritName">Object</span>
|
|
75
|
+
|
|
76
|
+
<ul class="fullTree">
|
|
77
|
+
<li>Object</li>
|
|
78
|
+
|
|
79
|
+
<li class="next">Kabk::RelationHydrator</li>
|
|
80
|
+
|
|
81
|
+
</ul>
|
|
82
|
+
<a href="#" class="inheritanceTree">show all</a>
|
|
83
|
+
|
|
84
|
+
</dd>
|
|
85
|
+
</dl>
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
<dl>
|
|
98
|
+
<dt>Defined in:</dt>
|
|
99
|
+
<dd>lib/kabk/relation_hydrator.rb
|
|
100
|
+
</dd>
|
|
101
|
+
</dl>
|
|
102
|
+
|
|
103
|
+
</div>
|
|
104
|
+
|
|
105
|
+
<h2>Overview</h2><div class="docstring">
|
|
106
|
+
<div class="discussion">
|
|
107
|
+
<p>Hydrates <code><field>_display</code> for relation fields to prevent N+1 queries.</p>
|
|
108
|
+
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
<div class="tags">
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
</div>
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
<h2>
|
|
123
|
+
Class Method Summary
|
|
124
|
+
<small><a href="#" class="summary_toggle">collapse</a></small>
|
|
125
|
+
</h2>
|
|
126
|
+
|
|
127
|
+
<ul class="summary">
|
|
128
|
+
|
|
129
|
+
<li class="public ">
|
|
130
|
+
<span class="summary_signature">
|
|
131
|
+
|
|
132
|
+
<a href="#format_dates!-class_method" title="format_dates! (class method)">.<strong>format_dates!</strong>(resource, record_hashes) ⇒ Object </a>
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
</span>
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
<span class="summary_desc"><div class='inline'></div></span>
|
|
147
|
+
|
|
148
|
+
</li>
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
<li class="public ">
|
|
152
|
+
<span class="summary_signature">
|
|
153
|
+
|
|
154
|
+
<a href="#hydrate-class_method" title="hydrate (class method)">.<strong>hydrate</strong>(resource, records) ⇒ Array<Hash> </a>
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
</span>
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
<span class="summary_desc"><div class='inline'><p>Hydrates a collection of records in-memory or via SQL joins/eager loading.</p></div></span>
|
|
169
|
+
|
|
170
|
+
</li>
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
</ul>
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
<div id="class_method_details" class="method_details_list">
|
|
180
|
+
<h2>Class Method Details</h2>
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
<div class="method_details first">
|
|
184
|
+
<h3 class="signature first" id="format_dates!-class_method">
|
|
185
|
+
|
|
186
|
+
.<strong>format_dates!</strong>(resource, record_hashes) ⇒ <tt>Object</tt>
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
</h3><table class="source_code">
|
|
193
|
+
<tr>
|
|
194
|
+
<td>
|
|
195
|
+
<pre class="lines">
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
82
|
|
199
|
+
83
|
|
200
|
+
84
|
|
201
|
+
85
|
|
202
|
+
86
|
|
203
|
+
87
|
|
204
|
+
88
|
|
205
|
+
89
|
|
206
|
+
90
|
|
207
|
+
91
|
|
208
|
+
92
|
|
209
|
+
93
|
|
210
|
+
94
|
|
211
|
+
95
|
|
212
|
+
96
|
|
213
|
+
97
|
|
214
|
+
98
|
|
215
|
+
99
|
|
216
|
+
100
|
|
217
|
+
101
|
|
218
|
+
102
|
|
219
|
+
103
|
|
220
|
+
104
|
|
221
|
+
105</pre>
|
|
222
|
+
</td>
|
|
223
|
+
<td>
|
|
224
|
+
<pre class="code"><span class="info file"># File 'lib/kabk/relation_hydrator.rb', line 82</span>
|
|
225
|
+
|
|
226
|
+
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_format_dates!'>format_dates!</span><span class='lparen'>(</span><span class='id identifier rubyid_resource'>resource</span><span class='comma'>,</span> <span class='id identifier rubyid_record_hashes'>record_hashes</span><span class='rparen'>)</span>
|
|
227
|
+
<span class='id identifier rubyid_date_fields'>date_fields</span> <span class='op'>=</span> <span class='id identifier rubyid_resource'>resource</span><span class='period'>.</span><span class='id identifier rubyid_fields'>fields</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_f'>f</span><span class='op'>|</span> <span class='qwords_beg'>%w[</span><span class='tstring_content'>date</span><span class='words_sep'> </span><span class='tstring_content'>datetime</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_f'>f</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span><span class='rparen'>)</span> <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&</span><span class='symbol'>:name</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&</span><span class='symbol'>:to_sym</span><span class='rparen'>)</span>
|
|
228
|
+
|
|
229
|
+
<span class='id identifier rubyid_record_hashes'>record_hashes</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_rh'>rh</span><span class='op'>|</span>
|
|
230
|
+
<span class='comment'># Include standard audit/concurrency fields if present and not explicitly defined as fields
|
|
231
|
+
</span> <span class='qsymbols_beg'>%i[</span><span class='tstring_content'>created_at</span><span class='words_sep'> </span><span class='tstring_content'>updated_at</span><span class='tstring_end'>]</span></span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_ts'>ts</span><span class='op'>|</span>
|
|
232
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_rh'>rh</span><span class='lbracket'>[</span><span class='id identifier rubyid_ts'>ts</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:iso8601</span><span class='rparen'>)</span>
|
|
233
|
+
<span class='id identifier rubyid_rh'>rh</span><span class='lbracket'>[</span><span class='id identifier rubyid_ts'>ts</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_rh'>rh</span><span class='lbracket'>[</span><span class='id identifier rubyid_ts'>ts</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_iso8601'>iso8601</span>
|
|
234
|
+
<span class='kw'>elsif</span> <span class='id identifier rubyid_rh'>rh</span><span class='lbracket'>[</span><span class='id identifier rubyid_ts'>ts</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Time</span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_rh'>rh</span><span class='lbracket'>[</span><span class='id identifier rubyid_ts'>ts</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Date</span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_rh'>rh</span><span class='lbracket'>[</span><span class='id identifier rubyid_ts'>ts</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>DateTime</span><span class='rparen'>)</span>
|
|
235
|
+
<span class='comment'># Fallback formatting if it responds to strftime
|
|
236
|
+
</span> <span class='id identifier rubyid_rh'>rh</span><span class='lbracket'>[</span><span class='id identifier rubyid_ts'>ts</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_rh'>rh</span><span class='lbracket'>[</span><span class='id identifier rubyid_ts'>ts</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_strftime'>strftime</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>%Y-%m-%dT%H:%M:%S.%LZ</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
|
|
237
|
+
<span class='kw'>end</span>
|
|
238
|
+
<span class='kw'>end</span>
|
|
239
|
+
|
|
240
|
+
<span class='id identifier rubyid_date_fields'>date_fields</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_df'>df</span><span class='op'>|</span>
|
|
241
|
+
<span class='id identifier rubyid_val'>val</span> <span class='op'>=</span> <span class='id identifier rubyid_rh'>rh</span><span class='lbracket'>[</span><span class='id identifier rubyid_df'>df</span><span class='rbracket'>]</span>
|
|
242
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_val'>val</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:iso8601</span><span class='rparen'>)</span>
|
|
243
|
+
<span class='id identifier rubyid_rh'>rh</span><span class='lbracket'>[</span><span class='id identifier rubyid_df'>df</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_val'>val</span><span class='period'>.</span><span class='id identifier rubyid_iso8601'>iso8601</span>
|
|
244
|
+
<span class='kw'>elsif</span> <span class='id identifier rubyid_val'>val</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Time</span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_val'>val</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Date</span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_val'>val</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>DateTime</span><span class='rparen'>)</span>
|
|
245
|
+
<span class='id identifier rubyid_rh'>rh</span><span class='lbracket'>[</span><span class='id identifier rubyid_df'>df</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_val'>val</span><span class='period'>.</span><span class='id identifier rubyid_strftime'>strftime</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>%Y-%m-%dT%H:%M:%S.%LZ</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
|
|
246
|
+
<span class='kw'>end</span>
|
|
247
|
+
<span class='kw'>end</span>
|
|
248
|
+
<span class='kw'>end</span>
|
|
249
|
+
<span class='kw'>end</span></pre>
|
|
250
|
+
</td>
|
|
251
|
+
</tr>
|
|
252
|
+
</table>
|
|
253
|
+
</div>
|
|
254
|
+
|
|
255
|
+
<div class="method_details ">
|
|
256
|
+
<h3 class="signature " id="hydrate-class_method">
|
|
257
|
+
|
|
258
|
+
.<strong>hydrate</strong>(resource, records) ⇒ <tt>Array<Hash></tt>
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
</h3><div class="docstring">
|
|
265
|
+
<div class="discussion">
|
|
266
|
+
<p>Hydrates a collection of records in-memory or via SQL joins/eager loading</p>
|
|
267
|
+
|
|
268
|
+
</div>
|
|
269
|
+
</div>
|
|
270
|
+
<div class="tags">
|
|
271
|
+
<p class="tag_title">Parameters:</p>
|
|
272
|
+
<ul class="param">
|
|
273
|
+
|
|
274
|
+
<li>
|
|
275
|
+
|
|
276
|
+
<span class='name'>resource</span>
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
<span class='type'>(<tt><span class='object_link'><a href="Resource.html" title="Kabk::Resource (class)">Kabk::Resource</a></span></tt>)</span>
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
</li>
|
|
284
|
+
|
|
285
|
+
<li>
|
|
286
|
+
|
|
287
|
+
<span class='name'>records</span>
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
<span class='type'>(<tt>Array<Hash></tt>, <tt>Array<Sequel::Model></tt>)</span>
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
</li>
|
|
295
|
+
|
|
296
|
+
</ul>
|
|
297
|
+
|
|
298
|
+
<p class="tag_title">Returns:</p>
|
|
299
|
+
<ul class="return">
|
|
300
|
+
|
|
301
|
+
<li>
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
<span class='type'>(<tt>Array<Hash></tt>)</span>
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
—
|
|
309
|
+
<div class='inline'><p>Hydrated records as hashes</p></div>
|
|
310
|
+
|
|
311
|
+
</li>
|
|
312
|
+
|
|
313
|
+
</ul>
|
|
314
|
+
|
|
315
|
+
</div><table class="source_code">
|
|
316
|
+
<tr>
|
|
317
|
+
<td>
|
|
318
|
+
<pre class="lines">
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
12
|
|
322
|
+
13
|
|
323
|
+
14
|
|
324
|
+
15
|
|
325
|
+
16
|
|
326
|
+
17
|
|
327
|
+
18
|
|
328
|
+
19
|
|
329
|
+
20
|
|
330
|
+
21
|
|
331
|
+
22
|
|
332
|
+
23
|
|
333
|
+
24
|
|
334
|
+
25
|
|
335
|
+
26
|
|
336
|
+
27
|
|
337
|
+
28
|
|
338
|
+
29
|
|
339
|
+
30
|
|
340
|
+
31
|
|
341
|
+
32
|
|
342
|
+
33
|
|
343
|
+
34
|
|
344
|
+
35
|
|
345
|
+
36
|
|
346
|
+
37
|
|
347
|
+
38
|
|
348
|
+
39
|
|
349
|
+
40
|
|
350
|
+
41
|
|
351
|
+
42
|
|
352
|
+
43
|
|
353
|
+
44
|
|
354
|
+
45
|
|
355
|
+
46
|
|
356
|
+
47
|
|
357
|
+
48
|
|
358
|
+
49
|
|
359
|
+
50
|
|
360
|
+
51
|
|
361
|
+
52
|
|
362
|
+
53
|
|
363
|
+
54
|
|
364
|
+
55
|
|
365
|
+
56
|
|
366
|
+
57
|
|
367
|
+
58
|
|
368
|
+
59
|
|
369
|
+
60
|
|
370
|
+
61
|
|
371
|
+
62
|
|
372
|
+
63
|
|
373
|
+
64
|
|
374
|
+
65
|
|
375
|
+
66
|
|
376
|
+
67
|
|
377
|
+
68
|
|
378
|
+
69
|
|
379
|
+
70
|
|
380
|
+
71
|
|
381
|
+
72
|
|
382
|
+
73
|
|
383
|
+
74
|
|
384
|
+
75
|
|
385
|
+
76
|
|
386
|
+
77
|
|
387
|
+
78
|
|
388
|
+
79
|
|
389
|
+
80</pre>
|
|
390
|
+
</td>
|
|
391
|
+
<td>
|
|
392
|
+
<pre class="code"><span class="info file"># File 'lib/kabk/relation_hydrator.rb', line 12</span>
|
|
393
|
+
|
|
394
|
+
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_hydrate'>hydrate</span><span class='lparen'>(</span><span class='id identifier rubyid_resource'>resource</span><span class='comma'>,</span> <span class='id identifier rubyid_records'>records</span><span class='rparen'>)</span>
|
|
395
|
+
<span class='kw'>return</span> <span class='lbracket'>[</span><span class='rbracket'>]</span> <span class='kw'>if</span> <span class='id identifier rubyid_records'>records</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
|
|
396
|
+
|
|
397
|
+
<span class='comment'># Convert all records to hashes immediately if they are models
|
|
398
|
+
</span> <span class='id identifier rubyid_record_hashes'>record_hashes</span> <span class='op'>=</span> <span class='id identifier rubyid_records'>records</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_r'>r</span><span class='op'>|</span> <span class='id identifier rubyid_r'>r</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> <span class='op'>?</span> <span class='id identifier rubyid_r'>r</span><span class='period'>.</span><span class='id identifier rubyid_dup'>dup</span> <span class='op'>:</span> <span class='id identifier rubyid_r'>r</span><span class='period'>.</span><span class='id identifier rubyid_values'>values</span> <span class='rbrace'>}</span>
|
|
399
|
+
|
|
400
|
+
<span class='id identifier rubyid_relation_fields'>relation_fields</span> <span class='op'>=</span> <span class='id identifier rubyid_resource'>resource</span><span class='period'>.</span><span class='id identifier rubyid_fields'>fields</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_f'>f</span><span class='op'>|</span> <span class='id identifier rubyid_f'>f</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>relation</span><span class='tstring_end'>"</span></span> <span class='op'>&&</span> <span class='id identifier rubyid_f'>f</span><span class='period'>.</span><span class='id identifier rubyid_relation'>relation</span> <span class='rbrace'>}</span>
|
|
401
|
+
|
|
402
|
+
<span class='id identifier rubyid_relation_fields'>relation_fields</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_field'>field</span><span class='op'>|</span>
|
|
403
|
+
<span class='id identifier rubyid_rel_meta'>rel_meta</span> <span class='op'>=</span> <span class='id identifier rubyid_field'>field</span><span class='period'>.</span><span class='id identifier rubyid_relation'>relation</span>
|
|
404
|
+
<span class='id identifier rubyid_target_resource'>target_resource</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Registry.html" title="Kabk::Registry (class)">Registry</a></span></span><span class='period'>.</span><span class='id identifier rubyid_instance'><span class='object_link'><a href="Registry.html#instance-class_method" title="Kabk::Registry.instance (method)">instance</a></span></span><span class='period'>.</span><span class='id identifier rubyid_get'><span class='object_link'><a href="Registry.html#get-instance_method" title="Kabk::Registry#get (method)">get</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_rel_meta'>rel_meta</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>resource</span><span class='tstring_end'>"</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_rel_meta'>rel_meta</span><span class='lbracket'>[</span><span class='symbol'>:resource</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
|
405
|
+
<span class='kw'>next</span> <span class='kw'>unless</span> <span class='id identifier rubyid_target_resource'>target_resource</span>
|
|
406
|
+
|
|
407
|
+
<span class='id identifier rubyid_target_model'>target_model</span> <span class='op'>=</span> <span class='id identifier rubyid_target_resource'>target_resource</span><span class='period'>.</span><span class='id identifier rubyid_model_class'>model_class</span>
|
|
408
|
+
<span class='id identifier rubyid_value_field'>value_field</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_rel_meta'>rel_meta</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>value_field</span><span class='tstring_end'>"</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_rel_meta'>rel_meta</span><span class='lbracket'>[</span><span class='symbol'>:value_field</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span>
|
|
409
|
+
<span class='id identifier rubyid_label_field'>label_field</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_rel_meta'>rel_meta</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>label_field</span><span class='tstring_end'>"</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_rel_meta'>rel_meta</span><span class='lbracket'>[</span><span class='symbol'>:label_field</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span>
|
|
410
|
+
<span class='id identifier rubyid_display_key'>display_key</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_rel_meta'>rel_meta</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>display_key</span><span class='tstring_end'>"</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_rel_meta'>rel_meta</span><span class='lbracket'>[</span><span class='symbol'>:display_key</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_field'>field</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>_display</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span>
|
|
411
|
+
<span class='id identifier rubyid_cardinality'>cardinality</span> <span class='op'>=</span> <span class='id identifier rubyid_rel_meta'>rel_meta</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>cardinality</span><span class='tstring_end'>"</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_rel_meta'>rel_meta</span><span class='lbracket'>[</span><span class='symbol'>:cardinality</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>many_to_one</span><span class='tstring_end'>"</span></span>
|
|
412
|
+
<span class='id identifier rubyid_field_sym'>field_sym</span> <span class='op'>=</span> <span class='id identifier rubyid_field'>field</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span>
|
|
413
|
+
|
|
414
|
+
<span class='comment'># Extract all keys to load
|
|
415
|
+
</span> <span class='id identifier rubyid_keys_to_load'>keys_to_load</span> <span class='op'>=</span> <span class='id identifier rubyid_record_hashes'>record_hashes</span><span class='period'>.</span><span class='id identifier rubyid_flat_map'>flat_map</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_rh'>rh</span><span class='op'>|</span>
|
|
416
|
+
<span class='id identifier rubyid_val'>val</span> <span class='op'>=</span> <span class='id identifier rubyid_rh'>rh</span><span class='lbracket'>[</span><span class='id identifier rubyid_field_sym'>field_sym</span><span class='rbracket'>]</span>
|
|
417
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_val'>val</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>String</span><span class='rparen'>)</span> <span class='op'>&&</span> <span class='id identifier rubyid_cardinality'>cardinality</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>many_to_many</span><span class='tstring_end'>"</span></span> <span class='op'>&&</span> <span class='id identifier rubyid_val'>val</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>String</span><span class='rparen'>)</span>
|
|
418
|
+
<span class='comment'># Handle JSON or comma-separated string values.
|
|
419
|
+
</span> <span class='id identifier rubyid_val'>val</span> <span class='op'>=</span> <span class='kw'>begin</span>
|
|
420
|
+
<span class='const'>JSON</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span><span class='id identifier rubyid_val'>val</span><span class='rparen'>)</span>
|
|
421
|
+
<span class='kw'>rescue</span> <span class='const'>StandardError</span>
|
|
422
|
+
<span class='id identifier rubyid_val'>val</span><span class='period'>.</span><span class='id identifier rubyid_split'>split</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>,</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
|
|
423
|
+
<span class='kw'>end</span>
|
|
424
|
+
<span class='kw'>end</span>
|
|
425
|
+
<span class='id identifier rubyid_val'>val</span>
|
|
426
|
+
<span class='kw'>end</span><span class='period'>.</span><span class='id identifier rubyid_flatten'>flatten</span><span class='period'>.</span><span class='id identifier rubyid_compact'>compact</span><span class='period'>.</span><span class='id identifier rubyid_uniq'>uniq</span>
|
|
427
|
+
|
|
428
|
+
<span class='kw'>next</span> <span class='kw'>if</span> <span class='id identifier rubyid_keys_to_load'>keys_to_load</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
|
|
429
|
+
|
|
430
|
+
<span class='comment'># Load relation map.
|
|
431
|
+
</span> <span class='comment'># Example: SELECT id, full_name FROM users WHERE id IN (...)
|
|
432
|
+
</span> <span class='id identifier rubyid_target_data'>target_data</span> <span class='op'>=</span> <span class='id identifier rubyid_target_model'>target_model</span><span class='period'>.</span><span class='id identifier rubyid_where'>where</span><span class='lparen'>(</span><span class='id identifier rubyid_value_field'>value_field</span> <span class='op'>=></span> <span class='id identifier rubyid_keys_to_load'>keys_to_load</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span><span class='lparen'>(</span><span class='id identifier rubyid_value_field'>value_field</span><span class='comma'>,</span> <span class='id identifier rubyid_label_field'>label_field</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_all'>all</span>
|
|
433
|
+
<span class='id identifier rubyid_target_map'>target_map</span> <span class='op'>=</span> <span class='id identifier rubyid_target_data'>target_data</span><span class='period'>.</span><span class='id identifier rubyid_each_with_object'>each_with_object</span><span class='lparen'>(</span><span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_row'>row</span><span class='comma'>,</span> <span class='id identifier rubyid_map'>map</span><span class='op'>|</span>
|
|
434
|
+
<span class='id identifier rubyid_map'>map</span><span class='lbracket'>[</span><span class='id identifier rubyid_row'>row</span><span class='lbracket'>[</span><span class='id identifier rubyid_value_field'>value_field</span><span class='rbracket'>]</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_row'>row</span><span class='lbracket'>[</span><span class='id identifier rubyid_label_field'>label_field</span><span class='rbracket'>]</span>
|
|
435
|
+
<span class='id identifier rubyid_map'>map</span><span class='lbracket'>[</span><span class='id identifier rubyid_row'>row</span><span class='lbracket'>[</span><span class='id identifier rubyid_value_field'>value_field</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_row'>row</span><span class='lbracket'>[</span><span class='id identifier rubyid_label_field'>label_field</span><span class='rbracket'>]</span> <span class='comment'># allow string keys too
|
|
436
|
+
</span> <span class='kw'>end</span>
|
|
437
|
+
|
|
438
|
+
<span class='comment'># Map back to records
|
|
439
|
+
</span> <span class='id identifier rubyid_record_hashes'>record_hashes</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_rh'>rh</span><span class='op'>|</span>
|
|
440
|
+
<span class='id identifier rubyid_val'>val</span> <span class='op'>=</span> <span class='id identifier rubyid_rh'>rh</span><span class='lbracket'>[</span><span class='id identifier rubyid_field_sym'>field_sym</span><span class='rbracket'>]</span>
|
|
441
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_cardinality'>cardinality</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>many_to_many</span><span class='tstring_end'>"</span></span>
|
|
442
|
+
<span class='id identifier rubyid_arr'>arr</span> <span class='op'>=</span> <span class='kw'>if</span> <span class='id identifier rubyid_val'>val</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Array</span><span class='rparen'>)</span>
|
|
443
|
+
<span class='id identifier rubyid_val'>val</span>
|
|
444
|
+
<span class='kw'>else</span>
|
|
445
|
+
<span class='kw'>begin</span>
|
|
446
|
+
<span class='const'>JSON</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span><span class='id identifier rubyid_val'>val</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rparen'>)</span>
|
|
447
|
+
<span class='kw'>rescue</span> <span class='const'>StandardError</span>
|
|
448
|
+
<span class='id identifier rubyid_val'>val</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_split'>split</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>,</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
|
|
449
|
+
<span class='kw'>end</span>
|
|
450
|
+
<span class='kw'>end</span>
|
|
451
|
+
<span class='id identifier rubyid_rh'>rh</span><span class='lbracket'>[</span><span class='id identifier rubyid_display_key'>display_key</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_arr'>arr</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_v'>v</span><span class='op'>|</span> <span class='id identifier rubyid_target_map'>target_map</span><span class='lbracket'>[</span><span class='id identifier rubyid_v'>v</span><span class='rbracket'>]</span> <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_compact'>compact</span> <span class='kw'>if</span> <span class='id identifier rubyid_arr'>arr</span>
|
|
452
|
+
<span class='kw'>elsif</span> <span class='id identifier rubyid_val'>val</span>
|
|
453
|
+
<span class='id identifier rubyid_rh'>rh</span><span class='lbracket'>[</span><span class='id identifier rubyid_display_key'>display_key</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_target_map'>target_map</span><span class='lbracket'>[</span><span class='id identifier rubyid_val'>val</span><span class='rbracket'>]</span>
|
|
454
|
+
<span class='kw'>end</span>
|
|
455
|
+
<span class='kw'>end</span>
|
|
456
|
+
<span class='kw'>end</span>
|
|
457
|
+
|
|
458
|
+
<span class='comment'># Format dates to ISO8601 per standard protocol.
|
|
459
|
+
</span> <span class='id identifier rubyid_format_dates!'>format_dates!</span><span class='lparen'>(</span><span class='id identifier rubyid_resource'>resource</span><span class='comma'>,</span> <span class='id identifier rubyid_record_hashes'>record_hashes</span><span class='rparen'>)</span>
|
|
460
|
+
|
|
461
|
+
<span class='id identifier rubyid_record_hashes'>record_hashes</span>
|
|
462
|
+
<span class='kw'>end</span></pre>
|
|
463
|
+
</td>
|
|
464
|
+
</tr>
|
|
465
|
+
</table>
|
|
466
|
+
</div>
|
|
467
|
+
|
|
468
|
+
</div>
|
|
469
|
+
|
|
470
|
+
</div>
|
|
471
|
+
|
|
472
|
+
<div id="footer">
|
|
473
|
+
Generated on Tue Aug 11 21:17:07 2026 by
|
|
474
|
+
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
475
|
+
0.9.45 (ruby-4.0.6).
|
|
476
|
+
</div>
|
|
477
|
+
|
|
478
|
+
</div>
|
|
479
|
+
</body>
|
|
480
|
+
</html>
|