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 +4 -4
- data/README.md +12 -3
- data/lib/nodo/core.rb +5 -2
- data/lib/nodo/dependency.rb +10 -1
- data/lib/nodo/errors.rb +15 -5
- data/lib/nodo/version.rb +1 -1
- data/lib/nodo.rb +2 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7c6ed5581192d2d679c8d41e72925c58d68aec32831b2a556fdb3630c4357b7
|
4
|
+
data.tar.gz: 3da48a3ca955dedead870d27dcd73d96d74f62b09b31f18e124e3b4e626bd920
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
174
|
-
|
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
|
-
|
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:
|
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 =
|
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)
|
data/lib/nodo/dependency.rb
CHANGED
@@ -7,7 +7,16 @@ module Nodo
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def to_js
|
10
|
-
|
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
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
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
|
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
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'
|