hyper-resource 1.0.0.lap88 → 1.0.0.lap89
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/docs/HyperRecord.html +1 -1
- data/docs/HyperRecord/ClassMethods.html +596 -399
- data/docs/HyperRecord/ClientInstanceMethods.html +91 -65
- data/docs/HyperRecord/Collection.html +1 -1
- data/docs/HyperRecord/DummyValue.html +1 -1
- data/docs/HyperRecord/PubSub.html +61 -61
- data/docs/HyperRecord/PubSub/ClassMethods.html +175 -133
- data/docs/HyperRecord/ServerClassMethods.html +174 -43
- data/docs/Hyperloop.html +1 -1
- data/docs/Hyperloop/Resource.html +2 -2
- data/docs/Hyperloop/Resource/ClientDrivers.html +15 -3
- data/docs/Hyperloop/Resource/HTTP.html +1 -1
- data/docs/Hyperloop/Resource/MethodsController.html +1 -1
- data/docs/Hyperloop/Resource/PropertiesController.html +1 -1
- data/docs/Hyperloop/Resource/PubSub.html +175 -133
- data/docs/Hyperloop/Resource/PubSub/ClassMethods.html +1 -1
- data/docs/Hyperloop/Resource/RelationsController.html +1 -1
- data/docs/Hyperloop/Resource/ScopesController.html +1 -1
- data/docs/Hyperloop/Resource/SecurityError.html +1 -1
- data/docs/Hyperloop/Resource/SecurityGuards.html +1 -1
- data/docs/Hyperloop/Resource/SecurityGuards/ClassMethods.html +1 -1
- data/docs/_index.html +1 -1
- data/docs/file.API.html +1 -1
- data/docs/file.JSON_format.html +1 -1
- data/docs/file.PubSub.html +1 -1
- data/docs/file.README.html +216 -2
- data/docs/index.html +216 -2
- data/docs/method_list.html +110 -94
- data/docs/top-level-namespace.html +1 -1
- data/lib/hyper_record/server_class_methods.rb +1 -11
- data/lib/hyperloop/resource/version.rb +1 -1
- metadata +2 -2
@@ -519,7 +519,7 @@
|
|
519
519
|
</div>
|
520
520
|
|
521
521
|
<div id="footer">
|
522
|
-
Generated on
|
522
|
+
Generated on Tue Aug 14 17:40:33 2018 by
|
523
523
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
524
524
|
0.9.13 (ruby-2.5.1).
|
525
525
|
</div>
|
@@ -370,7 +370,7 @@
|
|
370
370
|
</div>
|
371
371
|
|
372
372
|
<div id="footer">
|
373
|
-
Generated on
|
373
|
+
Generated on Tue Aug 14 17:40:33 2018 by
|
374
374
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
375
375
|
0.9.13 (ruby-2.5.1).
|
376
376
|
</div>
|
@@ -114,7 +114,7 @@
|
|
114
114
|
</div>
|
115
115
|
|
116
116
|
<div id="footer">
|
117
|
-
Generated on
|
117
|
+
Generated on Tue Aug 14 17:40:33 2018 by
|
118
118
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
119
119
|
0.9.13 (ruby-2.5.1).
|
120
120
|
</div>
|
@@ -289,7 +289,7 @@
|
|
289
289
|
</div>
|
290
290
|
|
291
291
|
<div id="footer">
|
292
|
-
Generated on
|
292
|
+
Generated on Tue Aug 14 17:40:32 2018 by
|
293
293
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
294
294
|
0.9.13 (ruby-2.5.1).
|
295
295
|
</div>
|
@@ -216,7 +216,7 @@
|
|
216
216
|
</div>
|
217
217
|
|
218
218
|
<div id="footer">
|
219
|
-
Generated on
|
219
|
+
Generated on Tue Aug 14 17:40:32 2018 by
|
220
220
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
221
221
|
0.9.13 (ruby-2.5.1).
|
222
222
|
</div>
|
data/docs/_index.html
CHANGED
@@ -292,7 +292,7 @@
|
|
292
292
|
</div>
|
293
293
|
|
294
294
|
<div id="footer">
|
295
|
-
Generated on
|
295
|
+
Generated on Tue Aug 14 17:40:30 2018 by
|
296
296
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
297
297
|
0.9.13 (ruby-2.5.1).
|
298
298
|
</div>
|
data/docs/file.API.html
CHANGED
@@ -128,7 +128,7 @@ end
|
|
128
128
|
</div></div>
|
129
129
|
|
130
130
|
<div id="footer">
|
131
|
-
Generated on
|
131
|
+
Generated on Tue Aug 14 17:40:31 2018 by
|
132
132
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
133
133
|
0.9.13 (ruby-2.5.1).
|
134
134
|
</div>
|
data/docs/file.JSON_format.html
CHANGED
@@ -124,7 +124,7 @@
|
|
124
124
|
</div></div>
|
125
125
|
|
126
126
|
<div id="footer">
|
127
|
-
Generated on
|
127
|
+
Generated on Tue Aug 14 17:40:31 2018 by
|
128
128
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
129
129
|
0.9.13 (ruby-2.5.1).
|
130
130
|
</div>
|
data/docs/file.PubSub.html
CHANGED
@@ -76,7 +76,7 @@ updated.</p>
|
|
76
76
|
</div></div>
|
77
77
|
|
78
78
|
<div id="footer">
|
79
|
-
Generated on
|
79
|
+
Generated on Tue Aug 14 17:40:31 2018 by
|
80
80
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
81
81
|
0.9.13 (ruby-2.5.1).
|
82
82
|
</div>
|
data/docs/file.README.html
CHANGED
@@ -68,6 +68,10 @@ clients when using Hyperloop and Rails.</p>
|
|
68
68
|
<p><a href="http://www.youtube.com/watch?v=fPSpESBbeMQ"><img
|
69
69
|
src="http://img.youtube.com/vi/fPSpESBbeMQ/0.jpg"></a></p>
|
70
70
|
|
71
|
+
<p><a href="https://janbiedermann.github.io/hyper-resource">Documentation</a></p>
|
72
|
+
|
73
|
+
<p>Supports Pusher and ActionCable (thanks @gabrielrios)</p>
|
74
|
+
|
71
75
|
<h2 id="label-Motivation">Motivation</h2>
|
72
76
|
<ul><li>
|
73
77
|
<p>To co-exist with a resource based REST API</p>
|
@@ -178,11 +182,221 @@ up your code and the client an server can share the same Models.</p>
|
|
178
182
|
|
179
183
|
<h2 id="label-Implementation">Implementation</h2>
|
180
184
|
|
181
|
-
<
|
185
|
+
<h2 id="label-Implementation">Implementation</h2>
|
186
|
+
|
187
|
+
<p>Hyperloop needs to be installed and working before you install
|
188
|
+
HyperResource. These instructions are likely to change/be simplified as
|
189
|
+
this Gem matures.</p>
|
190
|
+
<ul><li>
|
191
|
+
<p>Add the gems (make sure its the latest version)</p>
|
192
|
+
</li></ul>
|
193
|
+
|
194
|
+
<p><code>gem 'hyper-resource', '1.0.0.lap86'</code> <code>gem
|
195
|
+
'opal-jquery', github: 'janbiedermann/opal-jquery', branch:
|
196
|
+
'why_to_n'</code> <code>gem 'opal-activesupport', github:
|
197
|
+
'opal/opal-activesupport', branch: 'master'</code></p>
|
198
|
+
<ul><li>
|
199
|
+
<p>Require HyperResource in your <code>hyperloop_webpack_loader.rb</code> file</p>
|
200
|
+
</li></ul>
|
201
|
+
|
202
|
+
<p><code>require 'hyper-resource'</code> <code>require
|
203
|
+
'opal-jquery'</code></p>
|
204
|
+
<ul><li>
|
205
|
+
<p>Update your <code>application_record.rb</code> file and move it to the
|
206
|
+
<code>hyperloop/models</code> folder</p>
|
207
|
+
</li></ul>
|
208
|
+
|
209
|
+
<p><code> # application_record.rb if RUBY_ENGINE == 'opal' class
|
210
|
+
ApplicationRecord def self.inherited(base)
|
211
|
+
base.include(HyperRecord) end end else class ApplicationRecord <
|
212
|
+
ActiveRecord::Base # when updating this part, also update the
|
213
|
+
ApplicationRecord in app/models/application_record.rb # for rails eager
|
214
|
+
loading in production, so production doesn't fail
|
215
|
+
self.abstract_class = true extend HyperRecord::ServerClassMethods
|
216
|
+
include HyperRecord::PubSub end end </code></p>
|
217
|
+
<ul><li>
|
218
|
+
<p>Move the models you want on the client to the <code>hyperloop/models</code>
|
219
|
+
folder</p>
|
220
|
+
</li><li>
|
221
|
+
<p>Make sure you guard anything in your model which you do not want on the
|
222
|
+
client:</p>
|
223
|
+
</li></ul>
|
224
|
+
|
225
|
+
<pre class="code ruby"><code class="ruby"><span class='kw'>unless</span> <span class='const'>RUBY_ENGINE</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>opal</span><span class='tstring_end'>'</span></span>
|
226
|
+
<span class='comment'># herein stuff that you do not want on the client (Devise, etc)
|
227
|
+
</span><span class='kw'>end</span>
|
228
|
+
</code></pre>
|
229
|
+
<ul><li>
|
230
|
+
<p>Add Pusher to your gemfile</p>
|
231
|
+
</li></ul>
|
232
|
+
|
233
|
+
<p><code>gem pusher</code></p>
|
234
|
+
<ul><li>
|
235
|
+
<p>Add it with Yarn</p>
|
236
|
+
</li></ul>
|
237
|
+
|
238
|
+
<p><code>yarn add pusher-js</code></p>
|
239
|
+
<ul><li>
|
240
|
+
<p>Then import in your <code>app.js</code></p>
|
241
|
+
</li></ul>
|
242
|
+
|
243
|
+
<p><code>import Pusher from 'pusher-js';</code> <code>global.Pusher =
|
244
|
+
Pusher;</code></p>
|
245
|
+
<ul><li>
|
246
|
+
<p>Add your api endpoint to <code>hyperloop.rb</code></p>
|
247
|
+
</li></ul>
|
248
|
+
|
249
|
+
<p><code>config.resource_api_base_path = '/api'</code></p>
|
250
|
+
<ul><li>
|
251
|
+
<p>Create you API controllers as normal - ensure they return JSON in this
|
252
|
+
format</p>
|
253
|
+
</li></ul>
|
254
|
+
|
255
|
+
<pre class="code ruby"><code class="ruby"><span class='lbrace'>{</span>
|
256
|
+
<span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>members</span><span class='label_end'>":</span><span class='lbracket'>[</span>
|
257
|
+
<span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>member</span><span class='label_end'>":</span><span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>id</span><span class='label_end'>":</span><span class='int'>1</span><span class='comma'>,</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>email</span><span class='label_end'>":</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>a@b.com</span><span class='tstring_end'>"</span></span><span class='comma'>,</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>first_name</span><span class='label_end'>":</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>John</span><span class='tstring_end'>"</span></span><span class='comma'>,</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>last_name</span><span class='label_end'>":</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Smith</span><span class='tstring_end'>"</span></span><span class='rbrace'>}</span><span class='rbrace'>}</span><span class='comma'>,</span>
|
258
|
+
<span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>member</span><span class='label_end'>":</span><span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>id</span><span class='label_end'>":</span><span class='int'>2</span><span class='comma'>,</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>email</span><span class='label_end'>":</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>b@c.com</span><span class='tstring_end'>"</span></span><span class='comma'>,</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>first_name</span><span class='label_end'>":</span><span class='id identifier rubyid_null'>null</span><span class='comma'>,</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>last_name</span><span class='label_end'>":</span><span class='id identifier rubyid_null'>null</span><span class='rbrace'>}</span><span class='rbrace'>}</span>
|
259
|
+
<span class='rbracket'>]</span>
|
260
|
+
<span class='rbrace'>}</span>
|
261
|
+
</code></pre>
|
262
|
+
|
263
|
+
<p>Rabl gem example view:</p>
|
264
|
+
|
265
|
+
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_collection'>collection</span> <span class='ivar'>@members</span><span class='comma'>,</span> <span class='label'>root:</span> <span class='symbol'>:members</span>
|
266
|
+
<span class='id identifier rubyid_attributes'>attributes</span> <span class='symbol'>:id</span><span class='comma'>,</span>
|
267
|
+
<span class='symbol'>:email</span><span class='comma'>,</span>
|
268
|
+
<span class='symbol'>:first_name</span><span class='comma'>,</span>
|
269
|
+
<span class='symbol'>:last_name</span>
|
270
|
+
</code></pre>
|
271
|
+
<ul><li>
|
272
|
+
<p>Create your API controller and make sure to implement <code>show</code> as
|
273
|
+
this is called by HyperResource. Please see the example controller below
|
274
|
+
for details on pub_sub</p>
|
275
|
+
</li></ul>
|
276
|
+
|
277
|
+
<pre class="code ruby"><code class="ruby"><span class='kw'>module</span> <span class='const'>Api</span>
|
278
|
+
<span class='kw'>class</span> <span class='const'>PersonasController</span> <span class='op'><</span> <span class='const'>ApplicationController</span>
|
279
|
+
<span class='comment'># GET /api/personas.json
|
280
|
+
</span> <span class='kw'>def</span> <span class='id identifier rubyid_index'>index</span>
|
281
|
+
<span class='id identifier rubyid_authorize'>authorize</span><span class='lparen'>(</span><span class='const'>Persona</span><span class='rparen'>)</span>
|
282
|
+
|
283
|
+
<span class='ivar'>@personas</span> <span class='op'>=</span> <span class='const'>Persona</span><span class='period'>.</span><span class='id identifier rubyid_all'>all</span>
|
284
|
+
<span class='id identifier rubyid_subscribe_scope'>subscribe_scope</span><span class='lparen'>(</span><span class='ivar'>@personas</span><span class='comma'>,</span> <span class='const'>Persona</span><span class='comma'>,</span> <span class='symbol'>:all</span><span class='rparen'>)</span>
|
285
|
+
<span class='id identifier rubyid_respond_to'>respond_to</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_format'>format</span><span class='op'>|</span>
|
286
|
+
<span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_json'>json</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
|
287
|
+
<span class='kw'>end</span>
|
288
|
+
<span class='kw'>end</span>
|
289
|
+
|
290
|
+
<span class='comment'># GET /api/personas/123.json
|
291
|
+
</span> <span class='kw'>def</span> <span class='id identifier rubyid_show'>show</span>
|
292
|
+
<span class='ivar'>@persona</span> <span class='op'>=</span> <span class='const'>Persona</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span><span class='lparen'>(</span><span class='id identifier rubyid_params'>params</span><span class='lbracket'>[</span><span class='symbol'>:id</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
293
|
+
|
294
|
+
<span class='id identifier rubyid_authorize'>authorize</span><span class='lparen'>(</span><span class='ivar'>@persona</span><span class='rparen'>)</span>
|
295
|
+
|
296
|
+
<span class='id identifier rubyid_subscribe_record'>subscribe_record</span><span class='lparen'>(</span><span class='ivar'>@persona</span><span class='rparen'>)</span>
|
297
|
+
<span class='id identifier rubyid_respond_to'>respond_to</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_format'>format</span><span class='op'>|</span>
|
298
|
+
<span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_json'>json</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
|
299
|
+
<span class='kw'>end</span>
|
300
|
+
<span class='kw'>end</span>
|
301
|
+
|
302
|
+
<span class='comment'># POST /api/plans/1/personas.json
|
303
|
+
</span> <span class='kw'>def</span> <span class='id identifier rubyid_create'>create</span>
|
304
|
+
<span class='id identifier rubyid_authorize'>authorize</span><span class='lparen'>(</span><span class='const'>Persona</span><span class='rparen'>)</span>
|
305
|
+
|
306
|
+
<span class='ivar'>@persona</span> <span class='op'>=</span> <span class='const'>Persona</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_persona_params'>persona_params</span><span class='rparen'>)</span>
|
307
|
+
|
308
|
+
<span class='id identifier rubyid_subscribe_record'>subscribe_record</span><span class='lparen'>(</span><span class='ivar'>@persona</span><span class='rparen'>)</span>
|
309
|
+
<span class='id identifier rubyid_respond_to'>respond_to</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_format'>format</span><span class='op'>|</span>
|
310
|
+
<span class='kw'>if</span> <span class='ivar'>@persona</span><span class='period'>.</span><span class='id identifier rubyid_save'>save</span>
|
311
|
+
<span class='id identifier rubyid_subscribe_record'>subscribe_record</span><span class='lparen'>(</span><span class='ivar'>@persona</span><span class='rparen'>)</span>
|
312
|
+
<span class='id identifier rubyid_publish_scope'>publish_scope</span><span class='lparen'>(</span><span class='const'>Persona</span><span class='comma'>,</span> <span class='symbol'>:all</span><span class='rparen'>)</span>
|
313
|
+
<span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_json'>json</span> <span class='lbrace'>{</span> <span class='id identifier rubyid_render'>render</span> <span class='symbol'>:show</span><span class='comma'>,</span> <span class='label'>status:</span> <span class='symbol'>:created</span> <span class='rbrace'>}</span>
|
314
|
+
<span class='kw'>else</span>
|
315
|
+
<span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_json'>json</span> <span class='lbrace'>{</span> <span class='id identifier rubyid_render'>render</span> <span class='label'>json:</span> <span class='ivar'>@persona</span><span class='period'>.</span><span class='id identifier rubyid_errors'>errors</span><span class='comma'>,</span> <span class='label'>status:</span> <span class='symbol'>:unprocessable_entity</span> <span class='rbrace'>}</span>
|
316
|
+
<span class='kw'>end</span>
|
317
|
+
<span class='kw'>end</span>
|
318
|
+
<span class='kw'>end</span>
|
319
|
+
|
320
|
+
<span class='comment'># PATCH/PUT /api/personas/1.json
|
321
|
+
</span> <span class='kw'>def</span> <span class='id identifier rubyid_update'>update</span>
|
322
|
+
<span class='ivar'>@persona</span> <span class='op'>=</span> <span class='const'>Persona</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span><span class='lparen'>(</span><span class='id identifier rubyid_params'>params</span><span class='lbracket'>[</span><span class='symbol'>:id</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
323
|
+
<span class='ivar'>@persona</span><span class='period'>.</span><span class='id identifier rubyid_assign_attributes'>assign_attributes</span><span class='lparen'>(</span><span class='id identifier rubyid_persona_params'>persona_params</span><span class='rparen'>)</span>
|
324
|
+
|
325
|
+
<span class='id identifier rubyid_authorize'>authorize</span><span class='lparen'>(</span><span class='ivar'>@persona</span><span class='rparen'>)</span>
|
326
|
+
|
327
|
+
<span class='id identifier rubyid_respond_to'>respond_to</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_format'>format</span><span class='op'>|</span>
|
328
|
+
<span class='kw'>if</span> <span class='ivar'>@persona</span><span class='period'>.</span><span class='id identifier rubyid_update'>update</span><span class='lparen'>(</span><span class='id identifier rubyid_persona_params'>persona_params</span><span class='rparen'>)</span>
|
329
|
+
<span class='id identifier rubyid_pub_sub_record'>pub_sub_record</span><span class='lparen'>(</span><span class='ivar'>@persona</span><span class='rparen'>)</span>
|
330
|
+
<span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_json'>json</span> <span class='lbrace'>{</span> <span class='id identifier rubyid_render'>render</span> <span class='symbol'>:show</span><span class='comma'>,</span> <span class='label'>status:</span> <span class='symbol'>:ok</span> <span class='rbrace'>}</span>
|
331
|
+
<span class='kw'>else</span>
|
332
|
+
<span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_json'>json</span> <span class='lbrace'>{</span> <span class='id identifier rubyid_render'>render</span> <span class='label'>json:</span> <span class='ivar'>@persona</span><span class='period'>.</span><span class='id identifier rubyid_errors'>errors</span><span class='comma'>,</span> <span class='label'>status:</span> <span class='symbol'>:unprocessable_entity</span> <span class='rbrace'>}</span>
|
333
|
+
<span class='kw'>end</span>
|
334
|
+
<span class='kw'>end</span>
|
335
|
+
<span class='kw'>end</span>
|
336
|
+
|
337
|
+
<span class='comment'># DELETE /personas/1.json
|
338
|
+
</span> <span class='kw'>def</span> <span class='id identifier rubyid_destroy'>destroy</span>
|
339
|
+
<span class='ivar'>@persona</span> <span class='op'>=</span> <span class='const'>Persona</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span><span class='lparen'>(</span><span class='id identifier rubyid_params'>params</span><span class='lbracket'>[</span><span class='symbol'>:id</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
340
|
+
<span class='comment'># authorize @persona
|
341
|
+
</span>
|
342
|
+
<span class='ivar'>@persona</span><span class='period'>.</span><span class='id identifier rubyid_destroy'>destroy</span>
|
343
|
+
<span class='id identifier rubyid_publish_record'>publish_record</span><span class='lparen'>(</span><span class='ivar'>@persona</span><span class='rparen'>)</span>
|
344
|
+
<span class='id identifier rubyid_respond_to'>respond_to</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_format'>format</span><span class='op'>|</span>
|
345
|
+
<span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_json'>json</span> <span class='lbrace'>{</span> <span class='id identifier rubyid_head'>head</span> <span class='symbol'>:no_content</span> <span class='rbrace'>}</span>
|
346
|
+
<span class='kw'>end</span>
|
347
|
+
<span class='kw'>end</span>
|
348
|
+
|
349
|
+
<span class='id identifier rubyid_private'>private</span>
|
350
|
+
|
351
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_persona_params'>persona_params</span>
|
352
|
+
<span class='id identifier rubyid_permitted_keys'>permitted_keys</span> <span class='op'>=</span> <span class='const'>Persona</span><span class='period'>.</span><span class='id identifier rubyid_attribute_names'>attribute_names</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>
|
353
|
+
<span class='qsymbols_beg'>%i[</span><span class='tstring_content'>id</span><span class='words_sep'> </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_key'>key</span><span class='op'>|</span>
|
354
|
+
<span class='id identifier rubyid_permitted_keys'>permitted_keys</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
|
355
|
+
<span class='kw'>end</span>
|
356
|
+
<span class='id identifier rubyid_params'>params</span><span class='period'>.</span><span class='id identifier rubyid_require'>require</span><span class='lparen'>(</span><span class='symbol'>:data</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_permit'>permit</span><span class='lparen'>(</span><span class='id identifier rubyid_permitted_keys'>permitted_keys</span><span class='rparen'>)</span>
|
357
|
+
<span class='kw'>end</span>
|
358
|
+
<span class='kw'>end</span>
|
359
|
+
<span class='kw'>end</span>
|
360
|
+
</code></pre>
|
361
|
+
<ul><li>
|
362
|
+
<p>Install Redis and add the following to your <code>hyperloop.rb</code></p>
|
363
|
+
</li></ul>
|
364
|
+
|
365
|
+
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_config'>config</span><span class='period'>.</span><span class='id identifier rubyid_redis_instance'>redis_instance</span> <span class='op'>=</span> <span class='kw'>if</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>REDIS_URL</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span>
|
366
|
+
<span class='const'>Redis</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='label'>url:</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>REDIS_URL</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
367
|
+
<span class='kw'>else</span>
|
368
|
+
<span class='const'>Redis</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
|
369
|
+
<span class='kw'>end</span>
|
370
|
+
</code></pre>
|
371
|
+
<ul><li>
|
372
|
+
<p>Add the following to your <code>ApplicationController</code></p>
|
373
|
+
</li></ul>
|
374
|
+
|
375
|
+
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_include'>include</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/PubSub.html" title="Hyperloop::Resource::PubSub (module)">PubSub</a></span></span>
|
376
|
+
</code></pre>
|
377
|
+
<ul><li>
|
378
|
+
<p>Add these routes:</p>
|
379
|
+
</li></ul>
|
380
|
+
|
381
|
+
<pre class="code ruby"><code class="ruby">namespace :api, defaults: { format: :json } do
|
382
|
+
|
383
|
+
# introspection
|
384
|
+
# get '/:model_klass/relations', to: 'relations#index'
|
385
|
+
# get '/:model_klass/methods', to: 'methods#index'
|
386
|
+
# get '/:model_klass/methods/:id', to: 'methods#show'
|
387
|
+
# patch '/:model_klass/methods/:id', to: 'methods#update'
|
388
|
+
# get '/:model_klass/properties', to: 'properties#index'
|
389
|
+
get '/:model_klass/scopes', to: 'scopes#index'
|
390
|
+
get '/:model_klass/scopes/:id', to: 'scopes#show'
|
391
|
+
patch '/:model_klass/scopes/:id', to: 'scopes#update'
|
392
|
+
</code></pre>
|
393
|
+
<ul><li>
|
394
|
+
<p>Add the <code>ScopesController</code> as per the example in this Gem</p>
|
395
|
+
</li></ul>
|
182
396
|
</div></div>
|
183
397
|
|
184
398
|
<div id="footer">
|
185
|
-
Generated on
|
399
|
+
Generated on Tue Aug 14 17:40:31 2018 by
|
186
400
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
187
401
|
0.9.13 (ruby-2.5.1).
|
188
402
|
</div>
|
data/docs/index.html
CHANGED
@@ -68,6 +68,10 @@ clients when using Hyperloop and Rails.</p>
|
|
68
68
|
<p><a href="http://www.youtube.com/watch?v=fPSpESBbeMQ"><img
|
69
69
|
src="http://img.youtube.com/vi/fPSpESBbeMQ/0.jpg"></a></p>
|
70
70
|
|
71
|
+
<p><a href="https://janbiedermann.github.io/hyper-resource">Documentation</a></p>
|
72
|
+
|
73
|
+
<p>Supports Pusher and ActionCable (thanks @gabrielrios)</p>
|
74
|
+
|
71
75
|
<h2 id="label-Motivation">Motivation</h2>
|
72
76
|
<ul><li>
|
73
77
|
<p>To co-exist with a resource based REST API</p>
|
@@ -178,11 +182,221 @@ up your code and the client an server can share the same Models.</p>
|
|
178
182
|
|
179
183
|
<h2 id="label-Implementation">Implementation</h2>
|
180
184
|
|
181
|
-
<
|
185
|
+
<h2 id="label-Implementation">Implementation</h2>
|
186
|
+
|
187
|
+
<p>Hyperloop needs to be installed and working before you install
|
188
|
+
HyperResource. These instructions are likely to change/be simplified as
|
189
|
+
this Gem matures.</p>
|
190
|
+
<ul><li>
|
191
|
+
<p>Add the gems (make sure its the latest version)</p>
|
192
|
+
</li></ul>
|
193
|
+
|
194
|
+
<p><code>gem 'hyper-resource', '1.0.0.lap86'</code> <code>gem
|
195
|
+
'opal-jquery', github: 'janbiedermann/opal-jquery', branch:
|
196
|
+
'why_to_n'</code> <code>gem 'opal-activesupport', github:
|
197
|
+
'opal/opal-activesupport', branch: 'master'</code></p>
|
198
|
+
<ul><li>
|
199
|
+
<p>Require HyperResource in your <code>hyperloop_webpack_loader.rb</code> file</p>
|
200
|
+
</li></ul>
|
201
|
+
|
202
|
+
<p><code>require 'hyper-resource'</code> <code>require
|
203
|
+
'opal-jquery'</code></p>
|
204
|
+
<ul><li>
|
205
|
+
<p>Update your <code>application_record.rb</code> file and move it to the
|
206
|
+
<code>hyperloop/models</code> folder</p>
|
207
|
+
</li></ul>
|
208
|
+
|
209
|
+
<p><code> # application_record.rb if RUBY_ENGINE == 'opal' class
|
210
|
+
ApplicationRecord def self.inherited(base)
|
211
|
+
base.include(HyperRecord) end end else class ApplicationRecord <
|
212
|
+
ActiveRecord::Base # when updating this part, also update the
|
213
|
+
ApplicationRecord in app/models/application_record.rb # for rails eager
|
214
|
+
loading in production, so production doesn't fail
|
215
|
+
self.abstract_class = true extend HyperRecord::ServerClassMethods
|
216
|
+
include HyperRecord::PubSub end end </code></p>
|
217
|
+
<ul><li>
|
218
|
+
<p>Move the models you want on the client to the <code>hyperloop/models</code>
|
219
|
+
folder</p>
|
220
|
+
</li><li>
|
221
|
+
<p>Make sure you guard anything in your model which you do not want on the
|
222
|
+
client:</p>
|
223
|
+
</li></ul>
|
224
|
+
|
225
|
+
<pre class="code ruby"><code class="ruby"><span class='kw'>unless</span> <span class='const'>RUBY_ENGINE</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>opal</span><span class='tstring_end'>'</span></span>
|
226
|
+
<span class='comment'># herein stuff that you do not want on the client (Devise, etc)
|
227
|
+
</span><span class='kw'>end</span>
|
228
|
+
</code></pre>
|
229
|
+
<ul><li>
|
230
|
+
<p>Add Pusher to your gemfile</p>
|
231
|
+
</li></ul>
|
232
|
+
|
233
|
+
<p><code>gem pusher</code></p>
|
234
|
+
<ul><li>
|
235
|
+
<p>Add it with Yarn</p>
|
236
|
+
</li></ul>
|
237
|
+
|
238
|
+
<p><code>yarn add pusher-js</code></p>
|
239
|
+
<ul><li>
|
240
|
+
<p>Then import in your <code>app.js</code></p>
|
241
|
+
</li></ul>
|
242
|
+
|
243
|
+
<p><code>import Pusher from 'pusher-js';</code> <code>global.Pusher =
|
244
|
+
Pusher;</code></p>
|
245
|
+
<ul><li>
|
246
|
+
<p>Add your api endpoint to <code>hyperloop.rb</code></p>
|
247
|
+
</li></ul>
|
248
|
+
|
249
|
+
<p><code>config.resource_api_base_path = '/api'</code></p>
|
250
|
+
<ul><li>
|
251
|
+
<p>Create you API controllers as normal - ensure they return JSON in this
|
252
|
+
format</p>
|
253
|
+
</li></ul>
|
254
|
+
|
255
|
+
<pre class="code ruby"><code class="ruby"><span class='lbrace'>{</span>
|
256
|
+
<span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>members</span><span class='label_end'>":</span><span class='lbracket'>[</span>
|
257
|
+
<span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>member</span><span class='label_end'>":</span><span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>id</span><span class='label_end'>":</span><span class='int'>1</span><span class='comma'>,</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>email</span><span class='label_end'>":</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>a@b.com</span><span class='tstring_end'>"</span></span><span class='comma'>,</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>first_name</span><span class='label_end'>":</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>John</span><span class='tstring_end'>"</span></span><span class='comma'>,</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>last_name</span><span class='label_end'>":</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Smith</span><span class='tstring_end'>"</span></span><span class='rbrace'>}</span><span class='rbrace'>}</span><span class='comma'>,</span>
|
258
|
+
<span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>member</span><span class='label_end'>":</span><span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>id</span><span class='label_end'>":</span><span class='int'>2</span><span class='comma'>,</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>email</span><span class='label_end'>":</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>b@c.com</span><span class='tstring_end'>"</span></span><span class='comma'>,</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>first_name</span><span class='label_end'>":</span><span class='id identifier rubyid_null'>null</span><span class='comma'>,</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>last_name</span><span class='label_end'>":</span><span class='id identifier rubyid_null'>null</span><span class='rbrace'>}</span><span class='rbrace'>}</span>
|
259
|
+
<span class='rbracket'>]</span>
|
260
|
+
<span class='rbrace'>}</span>
|
261
|
+
</code></pre>
|
262
|
+
|
263
|
+
<p>Rabl gem example view:</p>
|
264
|
+
|
265
|
+
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_collection'>collection</span> <span class='ivar'>@members</span><span class='comma'>,</span> <span class='label'>root:</span> <span class='symbol'>:members</span>
|
266
|
+
<span class='id identifier rubyid_attributes'>attributes</span> <span class='symbol'>:id</span><span class='comma'>,</span>
|
267
|
+
<span class='symbol'>:email</span><span class='comma'>,</span>
|
268
|
+
<span class='symbol'>:first_name</span><span class='comma'>,</span>
|
269
|
+
<span class='symbol'>:last_name</span>
|
270
|
+
</code></pre>
|
271
|
+
<ul><li>
|
272
|
+
<p>Create your API controller and make sure to implement <code>show</code> as
|
273
|
+
this is called by HyperResource. Please see the example controller below
|
274
|
+
for details on pub_sub</p>
|
275
|
+
</li></ul>
|
276
|
+
|
277
|
+
<pre class="code ruby"><code class="ruby"><span class='kw'>module</span> <span class='const'>Api</span>
|
278
|
+
<span class='kw'>class</span> <span class='const'>PersonasController</span> <span class='op'><</span> <span class='const'>ApplicationController</span>
|
279
|
+
<span class='comment'># GET /api/personas.json
|
280
|
+
</span> <span class='kw'>def</span> <span class='id identifier rubyid_index'>index</span>
|
281
|
+
<span class='id identifier rubyid_authorize'>authorize</span><span class='lparen'>(</span><span class='const'>Persona</span><span class='rparen'>)</span>
|
282
|
+
|
283
|
+
<span class='ivar'>@personas</span> <span class='op'>=</span> <span class='const'>Persona</span><span class='period'>.</span><span class='id identifier rubyid_all'>all</span>
|
284
|
+
<span class='id identifier rubyid_subscribe_scope'>subscribe_scope</span><span class='lparen'>(</span><span class='ivar'>@personas</span><span class='comma'>,</span> <span class='const'>Persona</span><span class='comma'>,</span> <span class='symbol'>:all</span><span class='rparen'>)</span>
|
285
|
+
<span class='id identifier rubyid_respond_to'>respond_to</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_format'>format</span><span class='op'>|</span>
|
286
|
+
<span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_json'>json</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
|
287
|
+
<span class='kw'>end</span>
|
288
|
+
<span class='kw'>end</span>
|
289
|
+
|
290
|
+
<span class='comment'># GET /api/personas/123.json
|
291
|
+
</span> <span class='kw'>def</span> <span class='id identifier rubyid_show'>show</span>
|
292
|
+
<span class='ivar'>@persona</span> <span class='op'>=</span> <span class='const'>Persona</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span><span class='lparen'>(</span><span class='id identifier rubyid_params'>params</span><span class='lbracket'>[</span><span class='symbol'>:id</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
293
|
+
|
294
|
+
<span class='id identifier rubyid_authorize'>authorize</span><span class='lparen'>(</span><span class='ivar'>@persona</span><span class='rparen'>)</span>
|
295
|
+
|
296
|
+
<span class='id identifier rubyid_subscribe_record'>subscribe_record</span><span class='lparen'>(</span><span class='ivar'>@persona</span><span class='rparen'>)</span>
|
297
|
+
<span class='id identifier rubyid_respond_to'>respond_to</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_format'>format</span><span class='op'>|</span>
|
298
|
+
<span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_json'>json</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
|
299
|
+
<span class='kw'>end</span>
|
300
|
+
<span class='kw'>end</span>
|
301
|
+
|
302
|
+
<span class='comment'># POST /api/plans/1/personas.json
|
303
|
+
</span> <span class='kw'>def</span> <span class='id identifier rubyid_create'>create</span>
|
304
|
+
<span class='id identifier rubyid_authorize'>authorize</span><span class='lparen'>(</span><span class='const'>Persona</span><span class='rparen'>)</span>
|
305
|
+
|
306
|
+
<span class='ivar'>@persona</span> <span class='op'>=</span> <span class='const'>Persona</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_persona_params'>persona_params</span><span class='rparen'>)</span>
|
307
|
+
|
308
|
+
<span class='id identifier rubyid_subscribe_record'>subscribe_record</span><span class='lparen'>(</span><span class='ivar'>@persona</span><span class='rparen'>)</span>
|
309
|
+
<span class='id identifier rubyid_respond_to'>respond_to</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_format'>format</span><span class='op'>|</span>
|
310
|
+
<span class='kw'>if</span> <span class='ivar'>@persona</span><span class='period'>.</span><span class='id identifier rubyid_save'>save</span>
|
311
|
+
<span class='id identifier rubyid_subscribe_record'>subscribe_record</span><span class='lparen'>(</span><span class='ivar'>@persona</span><span class='rparen'>)</span>
|
312
|
+
<span class='id identifier rubyid_publish_scope'>publish_scope</span><span class='lparen'>(</span><span class='const'>Persona</span><span class='comma'>,</span> <span class='symbol'>:all</span><span class='rparen'>)</span>
|
313
|
+
<span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_json'>json</span> <span class='lbrace'>{</span> <span class='id identifier rubyid_render'>render</span> <span class='symbol'>:show</span><span class='comma'>,</span> <span class='label'>status:</span> <span class='symbol'>:created</span> <span class='rbrace'>}</span>
|
314
|
+
<span class='kw'>else</span>
|
315
|
+
<span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_json'>json</span> <span class='lbrace'>{</span> <span class='id identifier rubyid_render'>render</span> <span class='label'>json:</span> <span class='ivar'>@persona</span><span class='period'>.</span><span class='id identifier rubyid_errors'>errors</span><span class='comma'>,</span> <span class='label'>status:</span> <span class='symbol'>:unprocessable_entity</span> <span class='rbrace'>}</span>
|
316
|
+
<span class='kw'>end</span>
|
317
|
+
<span class='kw'>end</span>
|
318
|
+
<span class='kw'>end</span>
|
319
|
+
|
320
|
+
<span class='comment'># PATCH/PUT /api/personas/1.json
|
321
|
+
</span> <span class='kw'>def</span> <span class='id identifier rubyid_update'>update</span>
|
322
|
+
<span class='ivar'>@persona</span> <span class='op'>=</span> <span class='const'>Persona</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span><span class='lparen'>(</span><span class='id identifier rubyid_params'>params</span><span class='lbracket'>[</span><span class='symbol'>:id</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
323
|
+
<span class='ivar'>@persona</span><span class='period'>.</span><span class='id identifier rubyid_assign_attributes'>assign_attributes</span><span class='lparen'>(</span><span class='id identifier rubyid_persona_params'>persona_params</span><span class='rparen'>)</span>
|
324
|
+
|
325
|
+
<span class='id identifier rubyid_authorize'>authorize</span><span class='lparen'>(</span><span class='ivar'>@persona</span><span class='rparen'>)</span>
|
326
|
+
|
327
|
+
<span class='id identifier rubyid_respond_to'>respond_to</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_format'>format</span><span class='op'>|</span>
|
328
|
+
<span class='kw'>if</span> <span class='ivar'>@persona</span><span class='period'>.</span><span class='id identifier rubyid_update'>update</span><span class='lparen'>(</span><span class='id identifier rubyid_persona_params'>persona_params</span><span class='rparen'>)</span>
|
329
|
+
<span class='id identifier rubyid_pub_sub_record'>pub_sub_record</span><span class='lparen'>(</span><span class='ivar'>@persona</span><span class='rparen'>)</span>
|
330
|
+
<span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_json'>json</span> <span class='lbrace'>{</span> <span class='id identifier rubyid_render'>render</span> <span class='symbol'>:show</span><span class='comma'>,</span> <span class='label'>status:</span> <span class='symbol'>:ok</span> <span class='rbrace'>}</span>
|
331
|
+
<span class='kw'>else</span>
|
332
|
+
<span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_json'>json</span> <span class='lbrace'>{</span> <span class='id identifier rubyid_render'>render</span> <span class='label'>json:</span> <span class='ivar'>@persona</span><span class='period'>.</span><span class='id identifier rubyid_errors'>errors</span><span class='comma'>,</span> <span class='label'>status:</span> <span class='symbol'>:unprocessable_entity</span> <span class='rbrace'>}</span>
|
333
|
+
<span class='kw'>end</span>
|
334
|
+
<span class='kw'>end</span>
|
335
|
+
<span class='kw'>end</span>
|
336
|
+
|
337
|
+
<span class='comment'># DELETE /personas/1.json
|
338
|
+
</span> <span class='kw'>def</span> <span class='id identifier rubyid_destroy'>destroy</span>
|
339
|
+
<span class='ivar'>@persona</span> <span class='op'>=</span> <span class='const'>Persona</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span><span class='lparen'>(</span><span class='id identifier rubyid_params'>params</span><span class='lbracket'>[</span><span class='symbol'>:id</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
340
|
+
<span class='comment'># authorize @persona
|
341
|
+
</span>
|
342
|
+
<span class='ivar'>@persona</span><span class='period'>.</span><span class='id identifier rubyid_destroy'>destroy</span>
|
343
|
+
<span class='id identifier rubyid_publish_record'>publish_record</span><span class='lparen'>(</span><span class='ivar'>@persona</span><span class='rparen'>)</span>
|
344
|
+
<span class='id identifier rubyid_respond_to'>respond_to</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_format'>format</span><span class='op'>|</span>
|
345
|
+
<span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_json'>json</span> <span class='lbrace'>{</span> <span class='id identifier rubyid_head'>head</span> <span class='symbol'>:no_content</span> <span class='rbrace'>}</span>
|
346
|
+
<span class='kw'>end</span>
|
347
|
+
<span class='kw'>end</span>
|
348
|
+
|
349
|
+
<span class='id identifier rubyid_private'>private</span>
|
350
|
+
|
351
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_persona_params'>persona_params</span>
|
352
|
+
<span class='id identifier rubyid_permitted_keys'>permitted_keys</span> <span class='op'>=</span> <span class='const'>Persona</span><span class='period'>.</span><span class='id identifier rubyid_attribute_names'>attribute_names</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>
|
353
|
+
<span class='qsymbols_beg'>%i[</span><span class='tstring_content'>id</span><span class='words_sep'> </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_key'>key</span><span class='op'>|</span>
|
354
|
+
<span class='id identifier rubyid_permitted_keys'>permitted_keys</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
|
355
|
+
<span class='kw'>end</span>
|
356
|
+
<span class='id identifier rubyid_params'>params</span><span class='period'>.</span><span class='id identifier rubyid_require'>require</span><span class='lparen'>(</span><span class='symbol'>:data</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_permit'>permit</span><span class='lparen'>(</span><span class='id identifier rubyid_permitted_keys'>permitted_keys</span><span class='rparen'>)</span>
|
357
|
+
<span class='kw'>end</span>
|
358
|
+
<span class='kw'>end</span>
|
359
|
+
<span class='kw'>end</span>
|
360
|
+
</code></pre>
|
361
|
+
<ul><li>
|
362
|
+
<p>Install Redis and add the following to your <code>hyperloop.rb</code></p>
|
363
|
+
</li></ul>
|
364
|
+
|
365
|
+
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_config'>config</span><span class='period'>.</span><span class='id identifier rubyid_redis_instance'>redis_instance</span> <span class='op'>=</span> <span class='kw'>if</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>REDIS_URL</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span>
|
366
|
+
<span class='const'>Redis</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='label'>url:</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>REDIS_URL</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
367
|
+
<span class='kw'>else</span>
|
368
|
+
<span class='const'>Redis</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
|
369
|
+
<span class='kw'>end</span>
|
370
|
+
</code></pre>
|
371
|
+
<ul><li>
|
372
|
+
<p>Add the following to your <code>ApplicationController</code></p>
|
373
|
+
</li></ul>
|
374
|
+
|
375
|
+
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_include'>include</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/PubSub.html" title="Hyperloop::Resource::PubSub (module)">PubSub</a></span></span>
|
376
|
+
</code></pre>
|
377
|
+
<ul><li>
|
378
|
+
<p>Add these routes:</p>
|
379
|
+
</li></ul>
|
380
|
+
|
381
|
+
<pre class="code ruby"><code class="ruby">namespace :api, defaults: { format: :json } do
|
382
|
+
|
383
|
+
# introspection
|
384
|
+
# get '/:model_klass/relations', to: 'relations#index'
|
385
|
+
# get '/:model_klass/methods', to: 'methods#index'
|
386
|
+
# get '/:model_klass/methods/:id', to: 'methods#show'
|
387
|
+
# patch '/:model_klass/methods/:id', to: 'methods#update'
|
388
|
+
# get '/:model_klass/properties', to: 'properties#index'
|
389
|
+
get '/:model_klass/scopes', to: 'scopes#index'
|
390
|
+
get '/:model_klass/scopes/:id', to: 'scopes#show'
|
391
|
+
patch '/:model_klass/scopes/:id', to: 'scopes#update'
|
392
|
+
</code></pre>
|
393
|
+
<ul><li>
|
394
|
+
<p>Add the <code>ScopesController</code> as per the example in this Gem</p>
|
395
|
+
</li></ul>
|
182
396
|
</div></div>
|
183
397
|
|
184
398
|
<div id="footer">
|
185
|
-
Generated on
|
399
|
+
Generated on Tue Aug 14 17:40:30 2018 by
|
186
400
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
187
401
|
0.9.13 (ruby-2.5.1).
|
188
402
|
</div>
|