solo-rb 0.1.0

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 (5) hide show
  1. checksums.yaml +7 -0
  2. data/bin/solo +18 -0
  3. data/lib/solo.rb +41 -0
  4. data/lib/solo/version.rb +3 -0
  5. metadata +106 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 13bb83ba0be61b946f7a7d5e536763cde28f50109a1b077c6666c3249da4f596
4
+ data.tar.gz: b9e2a15a899c976f8b46fd8185b9f1a51a543102238899a6f27d17f95ca5ace5
5
+ SHA512:
6
+ metadata.gz: 1f5d62274511d1bc30208be743c3f294eb39f918f431daed879d2147285c509e27b50c7e766ed54b4a36ba298432124ee72764cb69c55705d1aa238746b71195
7
+ data.tar.gz: f530459297eae2bb30aa7aa7f0cf3598a033bce4a84458fb910c7d83c00f8cf73d2d0cb23a8f195106299cb1ca235e85b304b19c2f7363558c2f1903ddf93985
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "solo"
5
+
6
+ begin
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
@@ -0,0 +1,41 @@
1
+ require "solo/version"
2
+
3
+ require 'rationalist'
4
+ require 'socket'
5
+
6
+ module Solo
7
+ class Error < StandardError; end
8
+
9
+ def self.parse_opts args=ARGV
10
+ opts = Rationalist.parse(
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|
36
+ block.call
37
+ end
38
+ end
39
+
40
+ end
41
+
@@ -0,0 +1,3 @@
1
+ module Solo
2
+ VERSION = "0.1.0"
3
+ end
metadata ADDED
@@ -0,0 +1,106 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: solo-rb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Travis Rasor
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-10-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
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
+ description: A port of Solo, a perl script, into a gem that prevents a program from
70
+ running more than one copy at a time
71
+ email:
72
+ - travis@thathanka.org
73
+ executables:
74
+ - solo
75
+ extensions: []
76
+ extra_rdoc_files: []
77
+ files:
78
+ - bin/solo
79
+ - lib/solo.rb
80
+ - lib/solo/version.rb
81
+ homepage: https://github.com/tlrasor/solo-rb
82
+ licenses:
83
+ - MIT
84
+ metadata:
85
+ homepage_uri: https://github.com/tlrasor/solo-rb
86
+ source_code_uri: https://github.com/tlrasor/solo-rb
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubygems_version: 3.0.3
103
+ signing_key:
104
+ specification_version: 4
105
+ summary: Prevents programs from running more than one copy at a time
106
+ test_files: []