nodo 1.5.3 → 1.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/nodo/core.rb +15 -3
- data/lib/nodo/function.rb +3 -3
- data/lib/nodo/version.rb +1 -1
- data/lib/nodo.rb +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68a024656d2aaacddb3f52790316307d06acd432c0e5f43d149ad6c716888899
|
4
|
+
data.tar.gz: 07020ab3ca97f25f90e2e0f2b26ecdf43f78312a308852e6f5f0a50e6ad57d73
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 89c52ca6b172f94b4bc55730cad6d9934fe4c1fc914b0236665202ec26f5d98b77790336aed67af275fd2b4d5050dce4675b43d02639a9a5911d2836b651e6ae
|
7
|
+
data.tar.gz: 9a7fe1128ed3198d2ae4a936eda189d806f3a5e3221efb745d71b7b2a92dff546855e7f06a457648241860e1515ec0aae6ea8bc63703d64b0a9ba87a298174c5
|
data/lib/nodo/core.rb
CHANGED
@@ -12,6 +12,8 @@ module Nodo
|
|
12
12
|
@@mutex = Mutex.new
|
13
13
|
|
14
14
|
class << self
|
15
|
+
extend Forwardable
|
16
|
+
|
15
17
|
attr_accessor :class_defined
|
16
18
|
|
17
19
|
def inherited(subclass)
|
@@ -24,6 +26,10 @@ module Nodo
|
|
24
26
|
@instance ||= new
|
25
27
|
end
|
26
28
|
|
29
|
+
def class_function(*methods)
|
30
|
+
singleton_class.def_delegators(:instance, *methods)
|
31
|
+
end
|
32
|
+
|
27
33
|
def class_defined?
|
28
34
|
!!class_defined
|
29
35
|
end
|
@@ -56,8 +62,10 @@ module Nodo
|
|
56
62
|
self.dependencies = dependencies + mods.merge(deps).map { |name, package| Dependency.new(name, package) }
|
57
63
|
end
|
58
64
|
|
59
|
-
def function(name, code)
|
60
|
-
|
65
|
+
def function(name, _code = nil, timeout: 60, code: nil)
|
66
|
+
code = (code ||= _code).strip
|
67
|
+
raise ArgumentError, 'function code is required' if '' == code
|
68
|
+
self.functions = functions.merge(name => Function.new(name, _code || code, caller.first, timeout))
|
61
69
|
define_method(name) { |*args| call_js_method(name, args) }
|
62
70
|
end
|
63
71
|
|
@@ -181,12 +189,15 @@ module Nodo
|
|
181
189
|
request = Net::HTTP::Post.new("/#{clsid}/#{method}", 'Content-Type': 'application/json')
|
182
190
|
request.body = JSON.dump(args)
|
183
191
|
client = Client.new("unix://#{socket_path}")
|
192
|
+
client.read_timeout = function.timeout if function
|
184
193
|
response = client.request(request)
|
185
194
|
if response.is_a?(Net::HTTPOK)
|
186
195
|
parse_response(response)
|
187
196
|
else
|
188
197
|
handle_error(response, function)
|
189
198
|
end
|
199
|
+
rescue Net::ReadTimeout
|
200
|
+
raise TimeoutError, "function call #{self.class}##{method} timed out"
|
190
201
|
rescue Errno::EPIPE, IOError
|
191
202
|
# TODO: restart or something? If this happens the process is completely broken
|
192
203
|
raise Error, 'Node process failed'
|
@@ -201,7 +212,8 @@ module Nodo
|
|
201
212
|
end
|
202
213
|
|
203
214
|
def parse_response(response)
|
204
|
-
|
215
|
+
data = response.body.force_encoding('UTF-8')
|
216
|
+
JSON.parse(data) unless data == ''
|
205
217
|
end
|
206
218
|
|
207
219
|
def with_tempfile(name)
|
data/lib/nodo/function.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
module Nodo
|
2
2
|
class Function
|
3
|
-
attr_reader :name, :code, :source_location
|
3
|
+
attr_reader :name, :code, :source_location, :timeout
|
4
4
|
|
5
|
-
def initialize(name, code, source_location)
|
6
|
-
@name, @code, @source_location = name, code, source_location
|
5
|
+
def initialize(name, code, source_location, timeout)
|
6
|
+
@name, @code, @source_location, @timeout = name, code, source_location, timeout
|
7
7
|
end
|
8
8
|
|
9
9
|
def to_js
|
data/lib/nodo/version.rb
CHANGED
data/lib/nodo.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nodo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthias Grosser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-10-
|
11
|
+
date: 2021-10-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|