nodo 1.6.0 → 1.6.1

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: 421dba598b565369d200c90c8b095786f7b0a98de7c97e88c6927b59b64591a0
4
- data.tar.gz: c6ba40e8873c90713edf4cc0887dcf64c3e7b9ea4629f4d97e3fc3c8c58218b9
3
+ metadata.gz: c7c6ed5581192d2d679c8d41e72925c58d68aec32831b2a556fdb3630c4357b7
4
+ data.tar.gz: 3da48a3ca955dedead870d27dcd73d96d74f62b09b31f18e124e3b4e626bd920
5
5
  SHA512:
6
- metadata.gz: 58410d1f53c78f40314ae24ea5f6e7d2aeca99f37aeeb6495ccdf0ee8a1fe903c956ad23462cba48ad38132df5614b3f354ee6c09638f52d47fe78e1e90d3064
7
- data.tar.gz: 8374444cbbc7257b206fb17abd3470df3488885ae843e414bca3e645cf6c9f9e9d91d6de6f354e5f7fe4a1a98d780f04562df89752286851f8727d86e3c88aa9
6
+ metadata.gz: 96168d93c24f3543926536d047785f230a588bb5f555550507d33f555f98cbc606465be9195b9af01fe4301c6c52931ea4ba9fb97f262ab2bfbeba015a3d67a0
7
+ data.tar.gz: 0bcf160a3b8a539979372fcc2f4141f4a1d26889053fcfed93e510e19d2009f30c5b9b64d598c460df93447f63bf8589fb908b5601b9fcfeb2a9d5623dbd4033
data/README.md CHANGED
@@ -170,8 +170,17 @@ end
170
170
 
171
171
  ### Limiting function execution time
172
172
 
173
- The default timeout for a single JS function call is 60 seconds due to the
174
- `Net::HTTP` default. It can be overridden on a per-function basis:
173
+ The default timeout for a single JS function call is 60 seconds and can be
174
+ set globally:
175
+
176
+ ```ruby
177
+ Nodo.timeout = 5
178
+ ```
179
+
180
+ If the execution of a single function call exceeds the timeout, `Nodo::TimeoutError`
181
+ is raised.
182
+
183
+ The timeout can also be set on a per-function basis:
175
184
 
176
185
  ```ruby
177
186
  class Foo < Nodo::Core
@@ -209,7 +218,7 @@ before instantiating any worker instances. The debug mode will be active during
209
218
  the current process run.
210
219
 
211
220
 
212
- #### Clean your Rails root
221
+ ### Clean your Rails root
213
222
 
214
223
  For Rails applications, Nodo enables you to move `node_modules`, `package.json` and
215
224
  `yarn.lock` into your application's `vendor` folder by setting the `NODE_PATH` in
data/lib/nodo/core.rb CHANGED
@@ -62,7 +62,7 @@ module Nodo
62
62
  self.dependencies = dependencies + mods.merge(deps).map { |name, package| Dependency.new(name, package) }
63
63
  end
64
64
 
65
- def function(name, _code = nil, timeout: 60, code: nil)
65
+ def function(name, _code = nil, timeout: Nodo.timeout, code: nil)
66
66
  raise ArgumentError, "reserved method name #{name.inspect}" if Nodo::Core.method_defined?(name) || name.to_s == DEFINE_METHOD
67
67
  code = (code ||= _code).strip
68
68
  raise ArgumentError, 'function code is required' if '' == code
@@ -215,7 +215,10 @@ module Nodo
215
215
  def handle_error(response, function)
216
216
  if response.body
217
217
  result = parse_response(response)
218
- error = JavaScriptError.new(result['error'], function) if result.is_a?(Hash) && result.key?('error')
218
+ error = if result.is_a?(Hash) && result['error'].is_a?(Hash)
219
+ attrs = result['error']
220
+ (attrs['nodo_dependency'] ? DependencyError : JavaScriptError).new(attrs, function)
221
+ end
219
222
  end
220
223
  error ||= CallError.new("Node returned #{response.code}")
221
224
  log_exception(error)
@@ -7,7 +7,16 @@ module Nodo
7
7
  end
8
8
 
9
9
  def to_js
10
- "const #{name} = require(#{package.to_json});\n"
10
+ <<~JS
11
+ const #{name} = (() => {
12
+ try {
13
+ return require(#{package.to_json});
14
+ } catch(e) {
15
+ e.nodo_dependency = #{package.to_json};
16
+ throw e;
17
+ }
18
+ })();
19
+ JS
11
20
  end
12
21
  end
13
22
  end
data/lib/nodo/errors.rb CHANGED
@@ -38,12 +38,22 @@ module Nodo
38
38
 
39
39
  def generate_message
40
40
  message = "#{attributes['message'] || 'Unknown error'}"
41
- if loc = attributes['loc']
42
- message << loc.inject(' in') { |s, (key, value)| s << " #{key}: #{value}" }
43
- end
44
- message
41
+ message << format_location(attributes['loc'])
42
+ end
43
+
44
+ def format_location(loc)
45
+ return '' unless loc
46
+ loc.inject(' in') { |s, (key, value)| s << " #{key}: #{value}" }
45
47
  end
46
48
  end
47
49
 
48
- class DependencyError < JavaScriptError; end
50
+ class DependencyError < JavaScriptError
51
+ private
52
+
53
+ def generate_message
54
+ message = "#{attributes['message'] || 'Dependency error'}\n"
55
+ message << "The specified dependency '#{attributes['nodo_dependency']}' could not be loaded. "
56
+ message << "Run 'yarn add #{attributes['nodo_dependency']}' to install it.\n"
57
+ end
58
+ end
49
59
  end
data/lib/nodo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Nodo
2
- VERSION = '1.6.0'
2
+ VERSION = '1.6.1'
3
3
  end
data/lib/nodo.rb CHANGED
@@ -9,13 +9,14 @@ require 'forwardable'
9
9
 
10
10
  module Nodo
11
11
  class << self
12
- attr_accessor :modules_root, :env, :binary, :logger, :debug
12
+ attr_accessor :modules_root, :env, :binary, :logger, :debug, :timeout
13
13
  end
14
14
  self.modules_root = './node_modules'
15
15
  self.env = {}
16
16
  self.binary = 'node'
17
17
  self.logger = Logger.new(STDOUT)
18
18
  self.debug = false
19
+ self.timeout = 60
19
20
  end
20
21
 
21
22
  require_relative 'nodo/version'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nodo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthias Grosser