io_daemonizer 1 → 3

Sign up to get free protection for your applications and to get access to all the features.
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