io_daemonizer 1 → 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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/io_daemonizer.rb +17 -12
  3. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 05df686f5b42a98c8dbacff27b10217d676674fa330598ba54cc22faf039b63a
4
- data.tar.gz: 4d85aa2e8ddc312820d2814d772cd1c5ffc5c06b5adf8a8cd9a813ba0d4988de
3
+ metadata.gz: 2fe90c198a168ddb60ba8664074e8ba81eb4e08fbfac69e86af72edea74e937f
4
+ data.tar.gz: a386e4e1e76bbf154944d579d9220a35bfe7123d4725ef20bc22a2c3950a3fd1
5
5
  SHA512:
6
- metadata.gz: 867eb556dc205e46c1af6c1e6efaa479ae6f98e6a67d280d8cbda40b20ccb775aabe56d00b9ed30a4890acaf02d739563ee12812f5beadfe27e98cebc00dbb87
7
- data.tar.gz: aae1d0c1d888ed618811f9711f70a4481f2f755d636136735860e3b5cb582fd2302b49a5b9eb848760d62521f23a06cc7970686e2cd5a3af3b9c95fccb01a516
6
+ metadata.gz: 2804cf8d50674070fe9bd9c6c8fb951bd6868acd7ee01a3862963b6e22f122ad09ea56113e892e93185a0d2caf58a30dcf24b570bcfbce86db62cc35f0a389d9
7
+ data.tar.gz: 291594bc93f1a5b269c8a668815ff3bc9f1ebc18cb01c164d014307701e1d72224e89b950b5ef1a4b02b7cdc655a22770ad90fda506b140357be90403d289df7
data/io_daemonizer.rb CHANGED
@@ -1,7 +1,8 @@
1
- # io_daemonizer v.1 https://github.com/joeyschoblaska/io_daemonizer
1
+ # io_daemonizer v.3 https://github.com/joeyschoblaska/io_daemonizer
2
2
 
3
3
  require "shellwords"
4
4
  require "socket"
5
+ require "stringio"
5
6
 
6
7
  class IODaemonizer
7
8
  PORT = ENV["IO_DAEMONIZER_PORT"] || 5289
@@ -9,10 +10,10 @@ class IODaemonizer
9
10
  def self.wrap(setup: -> {}, run: -> {})
10
11
  case ARGV[0]
11
12
  when "start"
12
- puts "starting server... "
13
+ puts "starting server..."
13
14
  Daemon.run(setup: setup, run: run)
14
15
  when "stop"
15
- puts "stopping server... "
16
+ puts "stopping server..."
16
17
  send_request(ARGV)
17
18
  else
18
19
  send_request(ARGV)
@@ -23,19 +24,20 @@ class IODaemonizer
23
24
 
24
25
  def self.send_request(args)
25
26
  TCPSocket.open("127.0.0.1", PORT) do |socket|
26
- socket.write args.shelljoin
27
+ socket.puts args.shelljoin
28
+ socket.write $stdin.tty? ? "" : $stdin.read
27
29
  socket.close_write
28
30
  STDOUT.write(socket.read(4096)) until socket.eof?
29
31
  end
30
32
  end
31
33
 
32
- def self.redirect(stdout: $stdout, stderr: $stderr)
33
- old_stdout, old_stderr = $stdout.dup, $stderr.dup
34
- $stdout, $stderr = stdout, stderr
34
+ def self.redirect(stdin: $stdin, stdout: $stdout, stderr: $stderr)
35
+ oldin, oldout, olderr = $stdin.dup, $stdout.dup, $stderr.dup
36
+ $stdin, $stdout, $stderr = stdin, stdout, stderr
35
37
 
36
38
  yield
37
39
  ensure
38
- $stdout, $stderr = old_stdout, old_stderr
40
+ $stdin, $stdout, $stderr = oldin, oldout, olderr
39
41
  end
40
42
 
41
43
  class Daemon
@@ -64,14 +66,17 @@ class IODaemonizer
64
66
  private
65
67
 
66
68
  def read_socket(socket)
67
- args = socket.read.shellsplit
69
+ raw_args, *body = socket.read.lines
70
+ args = raw_args.shellsplit
68
71
 
69
72
  if args[0] == "stop"
70
73
  @server.close
71
74
  else
72
- IODaemonizer.redirect(stdout: socket, stderr: socket) do
73
- @context.instance_exec args, &@run
74
- end
75
+ IODaemonizer.redirect(
76
+ stdin: StringIO.new(body.join),
77
+ stdout: socket,
78
+ stderr: socket
79
+ ) { @context.instance_exec args, &@run }
75
80
  end
76
81
  rescue => e
77
82
  socket.write e.inspect
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: io_daemonizer
3
3
  version: !ruby/object:Gem::Version
4
- version: '1'
4
+ version: '3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joey Schoblaska
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-05 00:00:00.000000000 Z
11
+ date: 2022-09-06 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Wrap a Ruby script that speaks IO in a daemon so that you only pay the
14
14
  startup overhead once.
@@ -37,7 +37,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
37
37
  - !ruby/object:Gem::Version
38
38
  version: '0'
39
39
  requirements: []
40
- rubygems_version: 3.2.3
40
+ rubygems_version: 3.3.3
41
41
  signing_key:
42
42
  specification_version: 4
43
43
  summary: IO Daemonizer