nodo 1.6.0 → 1.6.1

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