solo-rb 0.1.0 → 0.1.1
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 +4 -4
- data/bin/solo +4 -14
- data/lib/solo.rb +2 -32
- data/lib/solo/cli.rb +30 -0
- data/lib/solo/version.rb +1 -1
- metadata +3 -16
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4014fde68b2c883f67c864f9025b616653facd634df73a654f5564abe9dee8b7
|
|
4
|
+
data.tar.gz: cc85ce2b449fafbf0fa7f9a701f46aca481e4e2cae355777c73e464134d332f4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 87f55aabbd3bf5a8e9a11383abc8df1c8df8199e3a7154704b3e7ce1e5f9a7beed026daabe119cd5d602eb3d86bf742cc056867af0c54514f2594328fb235c85
|
|
7
|
+
data.tar.gz: 8303771ce25767bdecd3d50210d0bc73422e54e9780bb0566c769500ab269aafbb6a756f398a3d34095322333589d1b47d5d3a02127ff8e36448850b1e39aab9
|
data/bin/solo
CHANGED
|
@@ -1,18 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
lib = File.expand_path("lib", __dir__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
2
4
|
|
|
3
|
-
require "bundler/setup"
|
|
4
5
|
require "solo"
|
|
6
|
+
require "solo/cli"
|
|
5
7
|
|
|
6
|
-
|
|
7
|
-
opts = Solo.parse_opts
|
|
8
|
-
trap("INT") {
|
|
9
|
-
puts "Shutting down..." unless opts[:quiet]
|
|
10
|
-
exit
|
|
11
|
-
}
|
|
12
|
-
Solo.open_server(port: opts[:port]) do
|
|
13
|
-
system(*opts[:command])
|
|
14
|
-
end
|
|
15
|
-
rescue
|
|
16
|
-
STDERR.puts "#{$!}" unless opts[:quiet]
|
|
17
|
-
exit 1
|
|
18
|
-
end
|
|
8
|
+
Solo::CLI.call
|
data/lib/solo.rb
CHANGED
|
@@ -1,41 +1,11 @@
|
|
|
1
1
|
require "solo/version"
|
|
2
|
-
|
|
3
|
-
require 'rationalist'
|
|
4
2
|
require 'socket'
|
|
5
3
|
|
|
6
4
|
module Solo
|
|
7
|
-
class Error < StandardError; end
|
|
8
5
|
|
|
9
|
-
def self.
|
|
10
|
-
|
|
11
|
-
args,
|
|
12
|
-
boolean: ["quiet"],
|
|
13
|
-
default: { quiet: false },
|
|
14
|
-
alias: { q: "quiet", p: "port" },
|
|
15
|
-
stop_early: true
|
|
16
|
-
)
|
|
17
|
-
unless opts[:port] and (opts[:port].is_a? Integer) and (opts[:port] > 0)
|
|
18
|
-
STDERR.puts "Invalid port: #{opts[:port]}" unless opts[:quiet]
|
|
19
|
-
STDERR.puts "Usage: solo --port PORT [--quiet] -- COMMAND" unless opts[:quiet]
|
|
20
|
-
exit 1
|
|
21
|
-
end
|
|
22
|
-
if opts[:"_"].nil? or opts[:"_"].empty?
|
|
23
|
-
STDERR.puts "No command given" unless opts[:quiet]
|
|
24
|
-
STDERR.puts "Usage: solo --port PORT [--quiet] -- COMMAND" unless opts[:quiet]
|
|
25
|
-
exit 1
|
|
26
|
-
elsif opts[:"_"].length == 1
|
|
27
|
-
opts[:command] = opts[:"_"].first
|
|
28
|
-
else
|
|
29
|
-
opts[:command] = opts[:"_"]
|
|
30
|
-
end
|
|
31
|
-
opts
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def self.open_server port:, address: "127.0.0.1", &block
|
|
35
|
-
TCPServer.open(address, port) do |serv|
|
|
6
|
+
def self.call port, &block
|
|
7
|
+
TCPServer.open("127.0.0.1", port) do |serv|
|
|
36
8
|
block.call
|
|
37
9
|
end
|
|
38
10
|
end
|
|
39
|
-
|
|
40
11
|
end
|
|
41
|
-
|
data/lib/solo/cli.rb
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'optparse'
|
|
2
|
+
|
|
3
|
+
module Solo
|
|
4
|
+
module CLI
|
|
5
|
+
def self.call(argv=ARGV)
|
|
6
|
+
trap("INT") { puts "Shutting down..."; exit; }
|
|
7
|
+
begin
|
|
8
|
+
opts = parse_opts argv
|
|
9
|
+
Solo.call(opts[:port]) do
|
|
10
|
+
system(*argv)
|
|
11
|
+
end
|
|
12
|
+
rescue
|
|
13
|
+
STDERR.puts "#{$!}"
|
|
14
|
+
abort
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
def self.parse_opts argv
|
|
18
|
+
opts = {}
|
|
19
|
+
opts_parser = OptionParser.new do |parser|
|
|
20
|
+
parser.banner = "Usage: solo --port PORT COMMAND"
|
|
21
|
+
parser.on("-p", "--port [PORT]", Integer, "Set the PORT used to host the server")
|
|
22
|
+
end
|
|
23
|
+
opts_parser.parse!(argv, into: opts)
|
|
24
|
+
unless opts[:port] && opts[:port] > 0 && opts[:port] < 65565
|
|
25
|
+
raise ArgumentError.new("Invalid port: #{opts[:port]} \n#{opts_parser}")
|
|
26
|
+
end
|
|
27
|
+
opts
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
data/lib/solo/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: solo-rb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Travis Rasor
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-10-
|
|
11
|
+
date: 2019-10-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -52,20 +52,6 @@ dependencies:
|
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '5.0'
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: rationalist
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - "~>"
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '2.0'
|
|
62
|
-
type: :runtime
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - "~>"
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '2.0'
|
|
69
55
|
description: A port of Solo, a perl script, into a gem that prevents a program from
|
|
70
56
|
running more than one copy at a time
|
|
71
57
|
email:
|
|
@@ -77,6 +63,7 @@ extra_rdoc_files: []
|
|
|
77
63
|
files:
|
|
78
64
|
- bin/solo
|
|
79
65
|
- lib/solo.rb
|
|
66
|
+
- lib/solo/cli.rb
|
|
80
67
|
- lib/solo/version.rb
|
|
81
68
|
homepage: https://github.com/tlrasor/solo-rb
|
|
82
69
|
licenses:
|