nodo 1.5.1 → 1.5.3

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