nodo 1.5.1 → 1.5.3

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: c2a8ef54e67cf745b78353e740a440edf45ee300e97d50d7e0edd93abf33bf62
4
- data.tar.gz: 4c5196d63edf85242640050487a86b582fb2fe9d373b79408750973b88622a68
3
+ metadata.gz: e46009bcd3e3e8e5fd0f0a6f624c3f263caa09c64225878011e557333ffb8e64
4
+ data.tar.gz: 98eed61321bae14d89725f6884a16d2c3fccc2eb20f808781b10842e2f22ae25
5
5
  SHA512:
6
- metadata.gz: aad587338156426fd70ba262b01086056e70730aeff6774e70272c01898c9ba81e2937121226304dc00cd38f83917a788da5507160577747829a595a03a37e13
7
- data.tar.gz: 14abb31d37eb578bba1233afa22c6f1d5c79ea28d9cb48eefa052604a3d148494f58c7af019b6ec85682348d357fdef79d14fea2e4d90cb30de96a6222b5935f
6
+ metadata.gz: ce0e598a9e6cffb816b53ce802a1a412746d195e387424b3362cc765d1fbd03931322c734a3ee6817487151f9969f414e1d99cfc1a4e9bddce99a7d6c7d95e26
7
+ data.tar.gz: a628c3765b94bd32600f554c1e973703e90a9dbcb06764b3d3256eb6ceb519997b2241f1f7c02474b8859aa2b4ff0049c863bcf047d38fbeeb8ed1be5e1bedb2
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)](http://badge.fury.io/rb/nodo) [![build](https://github.com/mtgrosser/nodo/actions/workflows/build.yml/badge.svg)](https://github.com/mtgrosser/nodo/actions/workflows/build.yml)
2
2
 
3
3
  # Nōdo – call Node.js from Ruby
4
4
 
@@ -61,7 +61,7 @@ Install your modules to `node_modules`:
61
61
  $ yarn add uuid
62
62
  ```
63
63
 
64
- Then `require` your dependencies:
64
+ `require`ing your dependencies will make the library available as a `const` with the same name:
65
65
 
66
66
  ```ruby
67
67
  class Bar < Nodo::Core
@@ -78,8 +78,12 @@ bar = Bar.new
78
78
  bar.v4 => "b305f5c4-db9a-4504-b0c3-4e097a5ec8b9"
79
79
  ```
80
80
 
81
+
81
82
  ### Aliasing requires
82
83
 
84
+ If the library name cannot be used as name of the constant, the `const` name
85
+ can be given using hash syntax:
86
+
83
87
  ```ruby
84
88
  class FooBar < Nodo::Core
85
89
  require commonjs: '@rollup/plugin-commonjs'
data/lib/nodo/client.rb CHANGED
@@ -28,10 +28,10 @@ module Nodo
28
28
 
29
29
  def connect_unix
30
30
  s = Timeout.timeout(@open_timeout) { UNIXSocket.open(@socket_path) }
31
- @socket = Net::BufferedIO.new(s)
32
- @socket.read_timeout = @read_timeout
33
- @socket.continue_timeout = @continue_timeout
34
- @socket.debug_output = @debug_output
31
+ @socket = Net::BufferedIO.new(s, read_timeout: @read_timeout,
32
+ write_timeout: @write_timeout,
33
+ continue_timeout: @continue_timeout,
34
+ debug_output: @debug_output)
35
35
  on_connect
36
36
  end
37
37
  end
data/lib/nodo/core.rb CHANGED
@@ -12,7 +12,6 @@ module Nodo
12
12
  @@mutex = Mutex.new
13
13
 
14
14
  class << self
15
-
16
15
  attr_accessor :class_defined
17
16
 
18
17
  def inherited(subclass)
@@ -80,6 +79,8 @@ module Nodo
80
79
  process.exit(1);
81
80
  }
82
81
 
82
+ process.title = `nodo-core ${socket}`;
83
+
83
84
  const shutdown = () => {
84
85
  nodo.core.close(() => { process.exit(0) });
85
86
  };
@@ -104,16 +105,6 @@ module Nodo
104
105
  })()
105
106
  JS
106
107
  end
107
-
108
- protected
109
-
110
- def finalize(pid, tmpdir)
111
- proc do
112
- Process.kill(:SIGTERM, pid)
113
- Process.wait(pid)
114
- FileUtils.remove_entry(tmpdir) if File.directory?(tmpdir)
115
- end
116
- end
117
108
 
118
109
  private
119
110
 
@@ -155,23 +146,31 @@ module Nodo
155
146
  return if self.class.class_defined?
156
147
  call_js_method(DEFINE_METHOD, self.class.generate_class_code)
157
148
  self.class.class_defined = true
158
- # rescue => e
159
- # raise Error, e.message
160
149
  end
161
-
150
+
162
151
  def spawn_process
163
152
  @@tmpdir = Pathname.new(Dir.mktmpdir('nodo'))
164
153
  env = Nodo.env.merge('NODE_PATH' => Nodo.modules_root.to_s)
165
- @@node_pid = Process.spawn(env, Nodo.binary, '-e', self.class.generate_core_code, '--', socket_path.to_s)
166
- ObjectSpace.define_finalizer(self, self.class.send(:finalize, node_pid, tmpdir))
154
+ @@node_pid = Process.spawn(env, Nodo.binary, '-e', self.class.generate_core_code, '--', socket_path.to_s, err: :out)
155
+ at_exit do
156
+ Process.kill(:SIGTERM, node_pid) rescue Errno::ECHILD
157
+ Process.wait(node_pid) rescue Errno::ECHILD
158
+ FileUtils.remove_entry(tmpdir) if File.directory?(tmpdir)
159
+ end
167
160
  end
168
161
 
169
162
  def wait_for_socket
170
163
  start = Time.now
171
- until socket_path.exist?
172
- raise TimeoutError, "socket #{socket_path} not found" if Time.now - start > TIMEOUT
173
- sleep(0.2)
164
+ socket = nil
165
+ while Time.now - start < TIMEOUT
166
+ begin
167
+ break if socket = UNIXSocket.new(socket_path)
168
+ rescue Errno::ENOENT, Errno::ECONNREFUSED, Errno::ENOTDIR
169
+ sleep 0.2
170
+ end
174
171
  end
172
+ socket.close if socket
173
+ raise TimeoutError, "could not connect to socket #{socket_path}" unless socket
175
174
  end
176
175
 
177
176
  def call_js_method(method, args)
@@ -205,5 +204,14 @@ module Nodo
205
204
  JSON.parse(response.body.force_encoding('UTF-8'))
206
205
  end
207
206
 
207
+ def with_tempfile(name)
208
+ ext = File.extname(name)
209
+ result = nil
210
+ Tempfile.create([File.basename(name, ext), ext], tmpdir) do |file|
211
+ result = yield(file)
212
+ end
213
+ result
214
+ end
215
+
208
216
  end
209
217
  end
data/lib/nodo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Nodo
2
- VERSION = '1.5.1'
2
+ VERSION = '1.5.3'
3
3
  end
data/lib/nodo.rb CHANGED
@@ -2,6 +2,8 @@ require 'pathname'
2
2
  require 'json'
3
3
  require 'fileutils'
4
4
  require 'tmpdir'
5
+ require 'tempfile'
6
+ require 'socket'
5
7
 
6
8
  module Nodo
7
9
  class << self
@@ -21,4 +23,4 @@ require_relative 'nodo/constant'
21
23
  require_relative 'nodo/client'
22
24
  require_relative 'nodo/core'
23
25
 
24
- require_relative 'nodo/railtie' if defined?(Rails)
26
+ require_relative 'nodo/railtie' if defined?(Rails::Railtie)
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.5.1
4
+ version: 1.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthias Grosser
@@ -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.0.3
108
+ rubygems_version: 3.2.22
109
109
  signing_key:
110
110
  specification_version: 4
111
111
  summary: Call Node.js from Ruby