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 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