nodo 1.6.3 → 1.6.5

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: 42cd6c0e3e07674ceb2f10dd670c490b7f23ed6534f22f978a40e0b91d529570
4
- data.tar.gz: b560df0c25e2b72842e6d6d5be610503252069bfd1741fb2cd9228066d28f91e
3
+ metadata.gz: 85e8ece889660e457a3473919da402124d9688011c3dbe5f69015e9f5e258465
4
+ data.tar.gz: 32ed8d2c1905c22cc68cf2734272f0d743890be066add8ce8de1a72132c6c3f4
5
5
  SHA512:
6
- metadata.gz: 012ed2197c0ea3e519884b3295a62986158326027adb08c484fbf87903874763594fe72236bebcc01f47a919a4893ef92cdc7a14b1f8ad02da7ea527ae5eab38
7
- data.tar.gz: 6a953be3a789671c966248dcc385740c5964ad0bbb370411d93cdc44ee7ea129c14537d73c08e7a44eb4c19ca1bc2b5465873bec65fd4d56884ba9ed339981d6
6
+ metadata.gz: 1c6a6af11b36730dae8bc00d31a17a96f0fbe0fe3a5ddc3da5df636efcdc648a6890e37aee63c7f0b67fc000ce354247eaa61cde12557eb9a3126b6cd0d9a291
7
+ data.tar.gz: b12074e9a1312694fcb46246eb2d66d418054b3f518be6dc5b2469a908b8b7e35d55d4a30b77144005b2b898c193ed062473ee4916239022c9d32361a5e324c4
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- [![Gem Version](https://badge.fury.io/rb/nodo.svg)](http://badge.fury.io/rb/nodo)
1
+ [![Gem Version](https://badge.fury.io/rb/nodo.svg)](https://badge.fury.io/rb/nodo)
2
2
  [![build](https://github.com/mtgrosser/nodo/actions/workflows/build.yml/badge.svg)](https://github.com/mtgrosser/nodo/actions/workflows/build.yml)
3
3
 
4
4
  # Nōdo – call Node.js from Ruby
@@ -54,6 +54,26 @@ foo.say_hi('Nodo')
54
54
  => "Hello Nodo!"
55
55
  ```
56
56
 
57
+ JS code can also be supplied using the `code:` keyword argument:
58
+
59
+ ```ruby
60
+ function :hello, code: "() => 'world'"
61
+ ```
62
+
63
+ ### Async functions
64
+
65
+ `Nodo` supports calling `async` functions from Ruby.
66
+ The Ruby call will happen synchronously, i.e. it will block until the JS
67
+ function resolves:
68
+
69
+ ```ruby
70
+ class SyncFoo < Nodo::Core
71
+ function :do_something, <<~JS
72
+ async () => { return await asyncFunc(); }
73
+ JS
74
+ end
75
+ ```
76
+
57
77
  ### Using npm modules
58
78
 
59
79
  Install your modules to `node_modules`:
@@ -79,7 +99,6 @@ bar = Bar.new
79
99
  bar.v4 => "b305f5c4-db9a-4504-b0c3-4e097a5ec8b9"
80
100
  ```
81
101
 
82
-
83
102
  ### Aliasing requires
84
103
 
85
104
  If the library name cannot be used as name of the constant, the `const` name
@@ -91,24 +110,22 @@ class FooBar < Nodo::Core
91
110
  end
92
111
  ```
93
112
 
94
- ### Alternate function definition syntax
113
+ ### Dynamic ESM imports
95
114
 
96
- JS code can also be supplied using the `code:` keyword argument:
115
+ ES modules can be imported dynamically using `nodo.import()`:
97
116
 
98
117
  ```ruby
99
- function :hello, code: "() => 'world'"
100
- ```
101
-
102
- ### Setting NODE_PATH
103
-
104
- By default, `./node_modules` is used as the `NODE_PATH`.
105
-
106
- To set a custom path:
107
- ```ruby
108
- Nodo.modules_root = 'path/to/node_modules'
118
+ class DynamicFoo < Nodo::Core
119
+ function :v4, <<~JS
120
+ async () => {
121
+ const uuid = await nodo.import('uuid');
122
+ return await uuid.v4()
123
+ }
124
+ JS
125
+ end
109
126
  ```
110
127
 
111
- Also see: [Clean your Rails root](#Clean-your-Rails-root)
128
+ Note that the availability of dynamic imports depends on your Node version.
112
129
 
113
130
  ### Defining JS constants
114
131
 
@@ -171,20 +188,6 @@ SubFoo.new.bar => "callingsuperclass"
171
188
  SubSubFoo.new.bar => "callingsubsubclass"
172
189
  ```
173
190
 
174
- ### Async functions
175
-
176
- `Nodo` supports calling `async` functions from Ruby.
177
- The Ruby call will happen synchronously, i.e. it will block until the JS
178
- function resolves:
179
-
180
- ```ruby
181
- class SyncFoo < Nodo::Core
182
- function :do_something, <<~JS
183
- async () => { return await asyncFunc(); }
184
- JS
185
- end
186
- ```
187
-
188
191
  ### Deferred function definition
189
192
 
190
193
  By default, the function code string literal is created when the class
@@ -241,6 +244,17 @@ Foo.new.sleep(2)
241
244
  => Nodo::TimeoutError raised
242
245
  ```
243
246
 
247
+ ### Setting NODE_PATH
248
+
249
+ By default, `./node_modules` is used as the `NODE_PATH`.
250
+
251
+ To set a custom path:
252
+ ```ruby
253
+ Nodo.modules_root = 'path/to/node_modules'
254
+ ```
255
+
256
+ Also see: [Clean your Rails root](#Clean-your-Rails-root)
257
+
244
258
  ### Logging
245
259
 
246
260
  By default, JS errors will be logged to `STDOUT`.
@@ -253,7 +267,6 @@ Nodo.logger = Logger.new('nodo.log')
253
267
 
254
268
  In Rails applications, `Rails.logger` will automatically be set.
255
269
 
256
-
257
270
  ### Debugging
258
271
 
259
272
  To get verbose debug output, set
@@ -339,3 +352,15 @@ With this new default, all `yarn` operations should be done after `cd`ing to `ve
339
352
 
340
353
  This repo provides an [adapted version](https://github.com/mtgrosser/nodo/blob/master/install/yarn.rake)
341
354
  of the `yarn:install` rake task which will automatically take care of the vendored module location.
355
+
356
+
357
+ ## Working with web mocking frameworks like WebMock
358
+
359
+ Nodo uses HTTP via UNIX sockets to connect to its Node process. This may lead to
360
+ conflicts during tests when using `WebMock` or other tools which interfere with
361
+ `Net::HTTP`. In order to work with WebMock, you need to enable its `allow_localhost`
362
+ option:
363
+
364
+ ```ruby
365
+ WebMock.disable_net_connect!(allow_localhost: true)
366
+ ```
data/lib/nodo/core.rb CHANGED
@@ -221,7 +221,7 @@ module Nodo
221
221
  socket = nil
222
222
  while Time.now - start < LAUNCH_TIMEOUT
223
223
  begin
224
- break if socket = UNIXSocket.new(socket_path)
224
+ break if socket = UNIXSocket.new(socket_path.to_s)
225
225
  rescue Errno::ENOENT, Errno::ECONNREFUSED, Errno::ENOTDIR
226
226
  Kernel.sleep(0.2)
227
227
  end
data/lib/nodo/nodo.js CHANGED
@@ -9,7 +9,7 @@ module.exports = (function() {
9
9
  const path = require('path');
10
10
  const fs = require('fs');
11
11
  const performance = require('perf_hooks').performance;
12
-
12
+
13
13
  let server, closing;
14
14
  const classes = {};
15
15
  const contexts = {};
@@ -48,7 +48,11 @@ module.exports = (function() {
48
48
  console.log(`[Nodo] ${message}`);
49
49
  }
50
50
  }
51
-
51
+
52
+ async function import_module(specifier) {
53
+ return await import(specifier);
54
+ }
55
+
52
56
  const core = {
53
57
  run: (socket) => {
54
58
  debug('Starting up...');
@@ -135,5 +139,5 @@ module.exports = (function() {
135
139
  }
136
140
  };
137
141
 
138
- return { core: core, debug: debug };
142
+ return { core: core, debug: debug, import: import_module };
139
143
  })();
data/lib/nodo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Nodo
2
- VERSION = '1.6.3'
2
+ VERSION = '1.6.5'
3
3
  end
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.3
4
+ version: 1.6.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthias Grosser
@@ -11,56 +11,56 @@ cert_chain: []
11
11
  date: 2021-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
18
  version: '0'
20
- type: :development
19
+ name: bundler
21
20
  prerelease: false
21
+ type: :development
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
29
28
  requirement: !ruby/object:Gem::Requirement
30
29
  requirements:
31
30
  - - ">="
32
31
  - !ruby/object:Gem::Version
33
32
  version: '0'
34
- type: :development
33
+ name: rake
35
34
  prerelease: false
35
+ type: :development
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: byebug
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - ">="
46
45
  - !ruby/object:Gem::Version
47
46
  version: '0'
48
- type: :development
47
+ name: byebug
49
48
  prerelease: false
49
+ type: :development
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: minitest
57
56
  requirement: !ruby/object:Gem::Requirement
58
57
  requirements:
59
58
  - - ">="
60
59
  - !ruby/object:Gem::Version
61
60
  version: '0'
62
- type: :development
61
+ name: minitest
63
62
  prerelease: false
63
+ type: :development
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
@@ -105,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
105
  - !ruby/object:Gem::Version
106
106
  version: '0'
107
107
  requirements: []
108
- rubygems_version: 3.2.22
108
+ rubygems_version: 3.3.25
109
109
  signing_key:
110
110
  specification_version: 4
111
111
  summary: Call Node.js from Ruby