hyper-resource 1.0.0.lap42 → 1.0.0.lap43
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c900a50935ad8ee04c936e060ffbaacfdc8e7f6905ce08b262547f00cc194840
|
4
|
+
data.tar.gz: 75f3ed8b57e4bafd58d43596d30a339a15fca9caf0d1b600e89fcc17ed6631a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 778be7dd25209e8f2d8bd443471bff11053edceaf8c6a70ae593393a71ef72d788c8c9ca49cd56d4ad254a46c01166b2a1f5ae8ec9ae2f9f119e0bfd248d6a07
|
7
|
+
data.tar.gz: '096a369c3e717cbfd20af88742acaddca0ca9c1947dd0d698d77c4269ba9bf47e8dbf7ebe86ff9bcaf71385b26798de5f9cff84a8744c143b00f7c4b155f00b0'
|
@@ -289,6 +289,38 @@ module HyperRecord
|
|
289
289
|
@reflections ||= {}
|
290
290
|
end
|
291
291
|
|
292
|
+
def rest_class_method(name, options = { default_result: '...' })
|
293
|
+
rest_methods[name] = options
|
294
|
+
rest_methods[name][:class_method] = true
|
295
|
+
singleton_class.send(:define_method, name) do |*args|
|
296
|
+
_register_class_observer
|
297
|
+
if rest_methods[name][:force] || !rest_methods[name].has_key?(:result)
|
298
|
+
_promise_get_or_patch("#{resource_base_uri}/methods/#{name}.json?timestamp=#{`Date.now() + Math.random()`}", *args).then do |response_json|
|
299
|
+
rest_methods[name][:result] = response_json[:result] # result is parsed json
|
300
|
+
_notify_class_observers
|
301
|
+
rest_methods[name][:result]
|
302
|
+
end.fail do |response|
|
303
|
+
error_message = "#{self.to_s}.#{name}, a rest_method, failed to fetch records!"
|
304
|
+
`console.error(error_message)`
|
305
|
+
response
|
306
|
+
end
|
307
|
+
end
|
308
|
+
if rest_methods[name].has_key?(:result)
|
309
|
+
rest_methods[name][:result]
|
310
|
+
else
|
311
|
+
rest_methods[name][:default_result]
|
312
|
+
end
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
316
|
+
def rest_class_method_force_updates(method_name)
|
317
|
+
rest_methods[method_name][:force] = true
|
318
|
+
end
|
319
|
+
|
320
|
+
def rest_class_method_unforce_updates(method_name)
|
321
|
+
rest_methods[method_name][:force] = false
|
322
|
+
end
|
323
|
+
|
292
324
|
def rest_method(name, options = { default_result: '...' })
|
293
325
|
rest_methods[name] = options
|
294
326
|
define_method(name) do |*args|
|
@@ -1,5 +1,18 @@
|
|
1
1
|
module HyperRecord
|
2
2
|
module ServerClassMethods
|
3
|
+
def rest_class_method(name, options = { default_result: '...' }, &block)
|
4
|
+
rest_methods[name] = options
|
5
|
+
rest_methods[name][:params] = block.arity
|
6
|
+
rest_methods[name][:class_method] = true
|
7
|
+
singleton_class.send(:define_method, name) do |*args|
|
8
|
+
if args.size > 0
|
9
|
+
block.call(*args)
|
10
|
+
else
|
11
|
+
block.call
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
3
16
|
def rest_method(name, options = { default_result: '...' }, &block)
|
4
17
|
rest_methods[name] = options
|
5
18
|
rest_methods[name][:params] = block.arity
|
@@ -1,29 +1,50 @@
|
|
1
1
|
class Hyperloop::Resource::MethodsController < ApplicationController
|
2
2
|
include Hyperloop::Resource::SecurityGuards
|
3
|
-
|
3
|
+
|
4
4
|
def index
|
5
|
-
|
6
|
-
|
7
|
-
if
|
8
|
-
@methods =
|
9
|
-
@
|
5
|
+
model_klass = guarded_record_class_from_param(model_klass_param)
|
6
|
+
|
7
|
+
if model_klass
|
8
|
+
@methods = model_klass.rest_methods
|
9
|
+
@model_name = model_klass.to_s.underscore.to_sym
|
10
10
|
end
|
11
|
-
respond_to { |format| format.json { render(json: {}, status: :unprocessable_entity) if
|
11
|
+
respond_to { |format| format.json { render(json: {}, status: :unprocessable_entity) if model_klass.nil? }}
|
12
12
|
end
|
13
13
|
|
14
14
|
def show
|
15
|
-
@record, id = guarded_record_from_params(params)
|
16
|
-
method_name = params[:id].to_sym
|
17
15
|
result = { error: 'A error occured, wrong method?' }
|
18
16
|
error = true
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
17
|
+
mc_param = params[:model_klass]
|
18
|
+
if mc_param
|
19
|
+
# rest_class_method
|
20
|
+
mc_param = mc_param.chop if mc_param.end_with?('s')
|
21
|
+
@model_klass = guarded_record_class_from_param(mc_param)
|
22
|
+
method_name = params[:id].to_sym
|
23
|
+
if @model_klass.rest_methods.has_key?(method_name)
|
24
|
+
if @model_klass.rest_methods[method_name][:class_method]
|
25
|
+
begin
|
26
|
+
result = @model_klass.send(method_name)
|
27
|
+
error = false
|
28
|
+
rescue Exception => e
|
29
|
+
Rails.logger.debug e.message
|
30
|
+
result = { error: e.message }
|
31
|
+
error = true
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
else
|
36
|
+
# rest_method
|
37
|
+
@record, id = guarded_record_from_params(params)
|
38
|
+
method_name = params[:id].to_sym
|
39
|
+
if @record.class.rest_methods.has_key?(method_name)
|
40
|
+
begin
|
41
|
+
result = @record.send(method_name)
|
42
|
+
error = false
|
43
|
+
rescue Exception => e
|
44
|
+
Rails.logger.debug e.message
|
45
|
+
result = { error: e.message }
|
46
|
+
error = true
|
47
|
+
end
|
27
48
|
end
|
28
49
|
end
|
29
50
|
respond_to do |format|
|
@@ -34,18 +55,38 @@ class Hyperloop::Resource::MethodsController < ApplicationController
|
|
34
55
|
end
|
35
56
|
|
36
57
|
def update
|
37
|
-
@record, id = guarded_record_from_params(params)
|
38
|
-
method_name = params[:id].to_sym
|
39
58
|
result = { error: 'A error occured, wrong method?' }
|
40
59
|
error = true
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
60
|
+
mc_param = params[:model_klass]
|
61
|
+
if mc_param
|
62
|
+
# rest_class_method
|
63
|
+
mc_param = mc_param.chop if mc_param.end_with?('s')
|
64
|
+
@model_klass = guarded_record_class_from_param(mc_param)
|
65
|
+
method_name = params[:id].to_sym
|
66
|
+
if @model_klass.rest_methods.has_key?(method_name)
|
67
|
+
if @model_klass.rest_methods[method_name][:class_method]
|
68
|
+
begin
|
69
|
+
result = @model_klass.send(method_name, params[:params])
|
70
|
+
error = false
|
71
|
+
rescue Exception => e
|
72
|
+
Rails.logger.debug e.message
|
73
|
+
result = { error: e.message }
|
74
|
+
error = true
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
else
|
79
|
+
@record, id = guarded_record_from_params(params)
|
80
|
+
method_name = params[:id].to_sym
|
81
|
+
if @record.class.rest_methods.has_key?(method_name)
|
82
|
+
begin
|
83
|
+
result = @record.send(method_name, params[:params])
|
84
|
+
error = false
|
85
|
+
rescue Exception => e
|
86
|
+
Rails.logger.debug e.message
|
87
|
+
result = { error: e.message }
|
88
|
+
error = true
|
89
|
+
end
|
49
90
|
end
|
50
91
|
end
|
51
92
|
respond_to do |format|
|
@@ -55,9 +96,4 @@ class Hyperloop::Resource::MethodsController < ApplicationController
|
|
55
96
|
end
|
56
97
|
end
|
57
98
|
|
58
|
-
|
59
|
-
|
60
|
-
def record_class_param
|
61
|
-
params.require(:record_class)
|
62
|
-
end
|
63
|
-
end
|
99
|
+
end
|