nodo 1.5.3 → 1.5.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e46009bcd3e3e8e5fd0f0a6f624c3f263caa09c64225878011e557333ffb8e64
4
- data.tar.gz: 98eed61321bae14d89725f6884a16d2c3fccc2eb20f808781b10842e2f22ae25
3
+ metadata.gz: 68a024656d2aaacddb3f52790316307d06acd432c0e5f43d149ad6c716888899
4
+ data.tar.gz: 07020ab3ca97f25f90e2e0f2b26ecdf43f78312a308852e6f5f0a50e6ad57d73
5
5
  SHA512:
6
- metadata.gz: ce0e598a9e6cffb816b53ce802a1a412746d195e387424b3362cc765d1fbd03931322c734a3ee6817487151f9969f414e1d99cfc1a4e9bddce99a7d6c7d95e26
7
- data.tar.gz: a628c3765b94bd32600f554c1e973703e90a9dbcb06764b3d3256eb6ceb519997b2241f1f7c02474b8859aa2b4ff0049c863bcf047d38fbeeb8ed1be5e1bedb2
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
- self.functions = functions.merge(name => Function.new(name, code, caller.first))
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
- JSON.parse(response.body.force_encoding('UTF-8'))
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
@@ -1,3 +1,3 @@
1
1
  module Nodo
2
- VERSION = '1.5.3'
2
+ VERSION = '1.5.4'
3
3
  end
data/lib/nodo.rb CHANGED
@@ -4,6 +4,7 @@ require 'fileutils'
4
4
  require 'tmpdir'
5
5
  require 'tempfile'
6
6
  require 'socket'
7
+ require 'forwardable'
7
8
 
8
9
  module Nodo
9
10
  class << self
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.3
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-03 00:00:00.000000000 Z
11
+ date: 2021-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler