local_pac 0.2.3 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +8 -6
- data/Gemfile.lock +10 -1
- data/README.md +5 -1
- data/bin/local_pac +16 -1
- data/lib/local_pac.rb +2 -0
- data/lib/local_pac/server.rb +8 -17
- data/lib/local_pac/server_commands/puma.rb +37 -0
- data/lib/local_pac/server_commands/rackup.rb +44 -0
- data/lib/local_pac/version.rb +1 -1
- data/share/archlinux/Makefile +2 -0
- data/share/archlinux/PKGBUILD +3 -1
- data/share/archlinux/startup.erb +2 -0
- data/spec/server_commands/puma_spec.rb +61 -0
- data/spec/server_commands/rackup_spec.rb +53 -0
- data/spec/server_spec.rb +59 -5
- metadata +8 -2
data/Gemfile
CHANGED
@@ -18,7 +18,6 @@ group :test do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
group :development do
|
21
|
-
gem 'awesome_print', require: false
|
22
21
|
gem 'debugger'
|
23
22
|
gem 'debugger-completion'
|
24
23
|
gem 'foreman', require: false
|
@@ -29,6 +28,7 @@ group :development do
|
|
29
28
|
gem 'redcarpet', require: false
|
30
29
|
gem 'tmrb', require: false
|
31
30
|
gem 'yard', require: false
|
31
|
+
gem 'inch', require: false
|
32
32
|
end
|
33
33
|
|
34
34
|
group :profile do
|
@@ -42,8 +42,10 @@ gem 'erubis', group: [:development, :test]
|
|
42
42
|
gem 'versionomy', group: [:development, :test], require: false
|
43
43
|
gem 'activesupport', '~> 4.0.0', group: [:development, :test], require: false
|
44
44
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
45
|
+
gem 'awesome_print', group: [:development, :test], require: 'ap'
|
46
|
+
|
47
|
+
group :webserver do
|
48
|
+
group :puma do
|
49
|
+
gem 'puma'
|
50
|
+
end
|
51
|
+
end
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
local_pac (0.2.
|
4
|
+
local_pac (0.2.3)
|
5
5
|
activesupport
|
6
6
|
addressable
|
7
7
|
bootstrap-sass
|
@@ -108,6 +108,10 @@ GEM
|
|
108
108
|
tilt
|
109
109
|
hike (1.2.3)
|
110
110
|
i18n (0.6.9)
|
111
|
+
inch (0.3.1)
|
112
|
+
sparkr (>= 0.2.0)
|
113
|
+
term-ansicolor
|
114
|
+
yard (~> 0.8.7)
|
111
115
|
json (1.8.1)
|
112
116
|
libv8 (3.16.14.3)
|
113
117
|
method_source (0.8.2)
|
@@ -139,6 +143,8 @@ GEM
|
|
139
143
|
pry-doc (0.5.1)
|
140
144
|
pry (>= 0.9)
|
141
145
|
yard (>= 0.8)
|
146
|
+
puma (2.7.1)
|
147
|
+
rack (>= 1.1, < 2.0)
|
142
148
|
rack (1.5.2)
|
143
149
|
rack-contrib (1.1.0)
|
144
150
|
rack (>= 0.9.1)
|
@@ -179,6 +185,7 @@ GEM
|
|
179
185
|
rack-protection (~> 1.4)
|
180
186
|
tilt (~> 1.3, >= 1.3.4)
|
181
187
|
slop (3.4.7)
|
188
|
+
sparkr (0.4.1)
|
182
189
|
sprockets (2.10.1)
|
183
190
|
hike (~> 1.2)
|
184
191
|
multi_json (~> 1.0)
|
@@ -232,11 +239,13 @@ DEPENDENCIES
|
|
232
239
|
foreman
|
233
240
|
fuubar
|
234
241
|
github-markup
|
242
|
+
inch
|
235
243
|
local_pac!
|
236
244
|
poltergeist
|
237
245
|
pry
|
238
246
|
pry-debugger
|
239
247
|
pry-doc
|
248
|
+
puma
|
240
249
|
rack-test
|
241
250
|
rake
|
242
251
|
redcarpet
|
data/README.md
CHANGED
@@ -97,7 +97,7 @@ makepkg -is
|
|
97
97
|
% firefox http://localhost:8000/v1/lookup/proxy.pac
|
98
98
|
```
|
99
99
|
|
100
|
-
### Getting started
|
100
|
+
### Getting started (Work in Progress)
|
101
101
|
|
102
102
|
Make sure that you place a config file for `local_pac` in one of the following
|
103
103
|
places or let `local_pac` generate a file on default values (see below).
|
@@ -310,6 +310,10 @@ option | value
|
|
310
310
|
A good website to support you writing proxy.pac-files is:
|
311
311
|
http://findproxyforurl.com.
|
312
312
|
|
313
|
+
## Documentation
|
314
|
+
|
315
|
+
http://www.rubydoc.info/github/dg-vrnetze/local_pac/frames
|
316
|
+
|
313
317
|
## Future
|
314
318
|
|
315
319
|
* Improve API to support further functionality
|
data/bin/local_pac
CHANGED
@@ -18,6 +18,7 @@ module LocalPac
|
|
18
18
|
option :access_log, type: :string, desc: 'File to write access log to'
|
19
19
|
option :listen, type: :string, default: 'tcp://localhost:8000', desc: 'Listen for requests'
|
20
20
|
option :rack_environment, type: :string, default: 'production', desc: 'Rack environment for application'
|
21
|
+
option :with, type: :string, default: 'puma', desc: 'Server used to serve proxy pac'
|
21
22
|
def serve
|
22
23
|
LocalPac.config = LocalPac::Config.new(options[:config_file]) if options[:config_file]
|
23
24
|
LocalPac.config.access_log = options[:access_log] if options[:access_log]
|
@@ -30,7 +31,21 @@ module LocalPac
|
|
30
31
|
LocalPac.ui_logger.debug('Options: ' + options.to_s)
|
31
32
|
LocalPac.ui_logger.debug("Config:\n" + LocalPac.config.to_s)
|
32
33
|
|
33
|
-
|
34
|
+
command_klass = case options[:with].to_sym
|
35
|
+
when :puma
|
36
|
+
ServerCommands::Puma
|
37
|
+
when :rackup
|
38
|
+
ServerCommands::Rackup
|
39
|
+
else
|
40
|
+
ServerCommands::Rackup
|
41
|
+
end
|
42
|
+
|
43
|
+
command = command_klass.new(
|
44
|
+
listen: options[:listen],
|
45
|
+
environment: options[:rack_environment],
|
46
|
+
)
|
47
|
+
|
48
|
+
Server.new(command).start
|
34
49
|
end
|
35
50
|
|
36
51
|
desc 'init', 'Create files/directories to use local_pac in dir or $PWD'
|
data/lib/local_pac.rb
CHANGED
@@ -55,6 +55,8 @@ require 'local_pac/actions/print_title'
|
|
55
55
|
require 'local_pac/actions/reload_configuration'
|
56
56
|
require 'local_pac/actions/reload_local_storage'
|
57
57
|
require 'local_pac/actions/add_examples_to_local_storage'
|
58
|
+
require 'local_pac/server_commands/rackup'
|
59
|
+
require 'local_pac/server_commands/puma'
|
58
60
|
require 'local_pac/cli/helper'
|
59
61
|
require 'local_pac/cli/reload'
|
60
62
|
require 'local_pac/initializer'
|
data/lib/local_pac/server.rb
CHANGED
@@ -1,28 +1,19 @@
|
|
1
1
|
# encoding:utf-8
|
2
2
|
module LocalPac
|
3
3
|
class Server
|
4
|
-
attr_reader :port, :host, :path, :environment
|
5
4
|
|
6
|
-
|
7
|
-
uri = URI.parse(listen)
|
5
|
+
private
|
8
6
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
attr_reader :command
|
8
|
+
|
9
|
+
public
|
10
|
+
|
11
|
+
def initialize(command = ServerCommands::Rackup.new)
|
12
|
+
@command = command
|
14
13
|
end
|
15
14
|
|
16
15
|
def start
|
17
|
-
|
18
|
-
cmd << 'rackup'
|
19
|
-
cmd << "-E #{environment}"
|
20
|
-
cmd << "-P #{LocalPac.config.pid_file}"
|
21
|
-
cmd << "-o #{host}"
|
22
|
-
cmd << "-p #{port}"
|
23
|
-
cmd << ::File.expand_path('../../../config.ru', __FILE__)
|
24
|
-
|
25
|
-
exec(cmd.join(" "))
|
16
|
+
exec command.to_s
|
26
17
|
end
|
27
18
|
end
|
28
19
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module LocalPac
|
3
|
+
module ServerCommands
|
4
|
+
class Puma
|
5
|
+
|
6
|
+
private
|
7
|
+
|
8
|
+
attr_reader :environment, :pid_file, :config_file, :listen, :worker_count
|
9
|
+
|
10
|
+
public
|
11
|
+
|
12
|
+
def initialize(options = {})
|
13
|
+
@environment = options.fetch(:environment, :development)
|
14
|
+
@pid_file = options.fetch(:pid_file, LocalPac.config.pid_file)
|
15
|
+
@config_file = options.fetch(:config_file, ::File.expand_path('../../../../config.ru', __FILE__))
|
16
|
+
@listen = options.fetch(:listen, 'tcp://127.0.0.1:8080')
|
17
|
+
@worker_count = options.fetch(:worker_count, nil)
|
18
|
+
|
19
|
+
rescue KeyError => e
|
20
|
+
raise ArgumentError, e.message
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_s
|
24
|
+
cmd = []
|
25
|
+
|
26
|
+
cmd << 'puma'
|
27
|
+
cmd << "-e #{environment}" if environment
|
28
|
+
cmd << "--pidfile #{pid_file}" if pid_file
|
29
|
+
cmd << "-b #{listen}" if listen
|
30
|
+
cmd << "-w #{worker_count}" if worker_count
|
31
|
+
cmd << config_file if config_file
|
32
|
+
|
33
|
+
cmd.join(" ")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module LocalPac
|
3
|
+
module ServerCommands
|
4
|
+
class Rackup
|
5
|
+
|
6
|
+
private
|
7
|
+
|
8
|
+
attr_reader :environment, :pid_file, :config_file, :host, :port
|
9
|
+
|
10
|
+
public
|
11
|
+
|
12
|
+
def initialize(options = {})
|
13
|
+
@environment = options.fetch(:environment, :development)
|
14
|
+
@pid_file = options.fetch(:pid_file, LocalPac.config.pid_file)
|
15
|
+
@config_file = options.fetch(:config_file, ::File.expand_path('../../../../config.ru', __FILE__))
|
16
|
+
listen = options.fetch(:listen, '127.0.0.1:8080')
|
17
|
+
|
18
|
+
begin
|
19
|
+
uri = Addressable::URI.heuristic_parse(listen)
|
20
|
+
rescue StandardError => e
|
21
|
+
fail Exceptions::ServerListenStatementInvalid, "I cannot parse the listen statement: #{listen}. It is invalid: #{e.message}"
|
22
|
+
end
|
23
|
+
|
24
|
+
@port = uri.port
|
25
|
+
@host = uri.host
|
26
|
+
rescue KeyError => e
|
27
|
+
raise ArgumentError, e.message
|
28
|
+
end
|
29
|
+
|
30
|
+
def to_s
|
31
|
+
cmd = []
|
32
|
+
|
33
|
+
cmd << 'rackup'
|
34
|
+
cmd << "-E #{environment}" if environment
|
35
|
+
cmd << "-P #{pid_file}" if pid_file
|
36
|
+
cmd << "-o #{host}" if host
|
37
|
+
cmd << "-p #{port}" if port
|
38
|
+
cmd << config_file if config_file
|
39
|
+
|
40
|
+
cmd.join(" ")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/local_pac/version.rb
CHANGED
data/share/archlinux/Makefile
CHANGED
data/share/archlinux/PKGBUILD
CHANGED
@@ -34,10 +34,12 @@ package() {
|
|
34
34
|
|
35
35
|
msg "Starting download of gems. Don't get alert if the download takes a lot of time. Since rubygems 2.2.0 a new algorithm to resolve dependencies is used. Upgrade to > 2.2.0 via sudo /usr/bin/gem update --system to improve performance."
|
36
36
|
|
37
|
-
GEM_HOME="${pkgdir}${_library_dir}" GEM_ROOT="${pkgdir}${_library_dir}" GEM_PATH="${pkgdir}${_library_dir}" /usr/bin/gem install --env-shebang --wrappers --no-ri --no-rdoc --no-prerelease --install-dir ${pkgdir}${_library_dir} $pkgname
|
37
|
+
GEM_HOME="${pkgdir}${_library_dir}" GEM_ROOT="${pkgdir}${_library_dir}" GEM_PATH="${pkgdir}${_library_dir}" /usr/bin/gem install --env-shebang --wrappers --no-ri --no-rdoc --no-prerelease --install-dir ${pkgdir}${_library_dir} $pkgname -v $pkgver
|
38
|
+
GEM_HOME="${pkgdir}${_library_dir}" GEM_ROOT="${pkgdir}${_library_dir}" GEM_PATH="${pkgdir}${_library_dir}" /usr/bin/gem install --env-shebang --wrappers --no-ri --no-rdoc --no-prerelease --install-dir ${pkgdir}${_library_dir} puma
|
38
39
|
|
39
40
|
install -D -m 644 ${pkgdir}${_share_dir}/archlinux/config.yaml ${pkgdir}${_examples_dir}/config.yaml.example
|
40
41
|
|
42
|
+
set -x
|
41
43
|
SOFTWARE_BINARY=$_library_dir/gems/${pkgname}-${pkgver}/bin/${pkgname} SOFTWARE_LIB=/usr/lib/local_pac filegen ${pkgdir}${_share_dir}/archlinux/startup.erb > ${pkgdir}${_bin_dir}/${pkgname}
|
42
44
|
|
43
45
|
chmod a+x ${pkgdir}/${_bin_dir}/${pkgname}
|
data/share/archlinux/startup.erb
CHANGED
@@ -0,0 +1,61 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
describe ServerCommands::Puma do
|
3
|
+
|
4
|
+
context '#initialize' do
|
5
|
+
it 'requires a listen statement' do
|
6
|
+
pid_file = create_file 'pid', $$
|
7
|
+
config_file = create_file 'config.ru'
|
8
|
+
|
9
|
+
expect {
|
10
|
+
ServerCommands::Puma.new(
|
11
|
+
listen: 'localhost:8080',
|
12
|
+
pid_file: pid_file,
|
13
|
+
config_file: config_file,
|
14
|
+
)
|
15
|
+
}.not_to raise_error
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context '#to_s' do
|
20
|
+
it 'has defaults' do
|
21
|
+
command = ServerCommands::Puma.new
|
22
|
+
expect(command.to_s).to eq("puma -e development --pidfile #{LocalPac.config.pid_file} -b tcp://127.0.0.1:8080 #{File.expand_path('../../../config.ru', __FILE__)}")
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'respects changed environment' do
|
26
|
+
command = ServerCommands::Puma.new(
|
27
|
+
environment: 'super_env'
|
28
|
+
)
|
29
|
+
|
30
|
+
expect(command.to_s).to include('-e super_env')
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'respects changed pid file' do
|
34
|
+
pid_file = create_file 'pid', $$
|
35
|
+
|
36
|
+
command = ServerCommands::Puma.new(
|
37
|
+
pid_file: pid_file,
|
38
|
+
)
|
39
|
+
|
40
|
+
expect(command.to_s).to include("--pidfile #{pid_file}")
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'respects changed config_file' do
|
44
|
+
config_file = create_file 'config.ru'
|
45
|
+
|
46
|
+
command = ServerCommands::Puma.new(
|
47
|
+
config_file: config_file,
|
48
|
+
)
|
49
|
+
|
50
|
+
expect(command.to_s).to include(config_file)
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'respects changed worker count' do
|
54
|
+
command = ServerCommands::Puma.new(
|
55
|
+
worker_count: 20,
|
56
|
+
)
|
57
|
+
|
58
|
+
expect(command.to_s).to include('-w 20')
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
describe ServerCommands::Rackup do
|
3
|
+
|
4
|
+
context '#initialize' do
|
5
|
+
it 'requires a listen statement' do
|
6
|
+
pid_file = create_file 'pid', $$
|
7
|
+
config_file = create_file 'config.ru'
|
8
|
+
|
9
|
+
expect {
|
10
|
+
ServerCommands::Rackup.new(
|
11
|
+
listen: 'localhost:8080',
|
12
|
+
pid_file: pid_file,
|
13
|
+
config_file: config_file,
|
14
|
+
)
|
15
|
+
}.not_to raise_error
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context '#to_s' do
|
20
|
+
it 'has defaults' do
|
21
|
+
command = ServerCommands::Rackup.new
|
22
|
+
expect(command.to_s).to eq("rackup -E development -P #{LocalPac.config.pid_file} -o 127.0.0.1 -p 8080 #{File.expand_path('../../../config.ru', __FILE__)}")
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'respects changed environment' do
|
26
|
+
command = ServerCommands::Rackup.new(
|
27
|
+
environment: '-E super_env'
|
28
|
+
)
|
29
|
+
|
30
|
+
expect(command.to_s).to include('-E super_env')
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'respects changed pid file' do
|
34
|
+
pid_file = create_file 'pid', $$
|
35
|
+
|
36
|
+
command = ServerCommands::Rackup.new(
|
37
|
+
pid_file: pid_file,
|
38
|
+
)
|
39
|
+
|
40
|
+
expect(command.to_s).to include("-P #{pid_file}")
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'respects changed config_file' do
|
44
|
+
config_file = create_file 'config.ru'
|
45
|
+
|
46
|
+
command = ServerCommands::Rackup.new(
|
47
|
+
config_file: config_file,
|
48
|
+
)
|
49
|
+
|
50
|
+
expect(command.to_s).to include(config_file)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/spec/server_spec.rb
CHANGED
@@ -3,16 +3,70 @@ require 'spec_helper'
|
|
3
3
|
|
4
4
|
describe Server do
|
5
5
|
context '#initialize' do
|
6
|
-
it 'requires
|
6
|
+
it 'requires a command' do
|
7
|
+
command = double('Command')
|
8
|
+
|
7
9
|
expect {
|
8
|
-
Server.new(
|
10
|
+
Server.new(command)
|
9
11
|
}.not_to raise_error
|
10
12
|
end
|
11
13
|
|
12
|
-
it '
|
14
|
+
it 'uses rackup by default' do
|
13
15
|
expect {
|
14
|
-
Server.new
|
15
|
-
}.
|
16
|
+
Server.new
|
17
|
+
}.not_to raise_error
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context '#start' do
|
22
|
+
it 'starts the server' do
|
23
|
+
create_file 'app.rb', <<-EOS.strip_heredoc
|
24
|
+
require 'sinatra'
|
25
|
+
|
26
|
+
trap 'USR1' do
|
27
|
+
$stderr.puts "Exit"
|
28
|
+
Kernel.exit!
|
29
|
+
end
|
30
|
+
|
31
|
+
class App < Sinatra::Base
|
32
|
+
get '/' do
|
33
|
+
'Hello World'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
EOS
|
37
|
+
|
38
|
+
config_file = create_file 'config.ru', <<-EOS.strip_heredoc
|
39
|
+
$LOAD_PATH << File.expand_path('..', __FILE__)
|
40
|
+
|
41
|
+
#$stderr = StringIO.new
|
42
|
+
#$stdout = StringIO.new
|
43
|
+
|
44
|
+
require 'app'
|
45
|
+
run App
|
46
|
+
EOS
|
47
|
+
|
48
|
+
command = double('Command')
|
49
|
+
allow(command).to receive(:to_s).and_return("rackup -E development -o 127.0.0.1 -p 9999 #{config_file} 2>/dev/null >&1")
|
50
|
+
|
51
|
+
server = Server.new(command)
|
52
|
+
|
53
|
+
unless child_pid = Kernel.fork
|
54
|
+
server.start
|
55
|
+
end
|
56
|
+
|
57
|
+
begin
|
58
|
+
tries ||= 3
|
59
|
+
|
60
|
+
response = with_environment({}, clear: true) do
|
61
|
+
Excon.get('http://127.0.0.1:9999')
|
62
|
+
end
|
63
|
+
rescue Excon::Errors::SocketError
|
64
|
+
sleep 1
|
65
|
+
retry unless (tries -= 1).zero?
|
66
|
+
end
|
67
|
+
|
68
|
+
Process.kill :USR1, child_pid
|
69
|
+
expect(response.body).to eq('Hello World')
|
16
70
|
end
|
17
71
|
end
|
18
72
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: local_pac
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-03-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
@@ -485,6 +485,8 @@ files:
|
|
485
485
|
- lib/local_pac/router.rb
|
486
486
|
- lib/local_pac/runner.rb
|
487
487
|
- lib/local_pac/server.rb
|
488
|
+
- lib/local_pac/server_commands/puma.rb
|
489
|
+
- lib/local_pac/server_commands/rackup.rb
|
488
490
|
- lib/local_pac/spec_helper.rb
|
489
491
|
- lib/local_pac/spec_helper_file_server.rb
|
490
492
|
- lib/local_pac/template_file.rb
|
@@ -537,6 +539,8 @@ files:
|
|
537
539
|
- spec/proxy_pac/pac_result_spec.rb
|
538
540
|
- spec/proxy_pac_result_parser_spec.rb
|
539
541
|
- spec/runner_spec.rb
|
542
|
+
- spec/server_commands/puma_spec.rb
|
543
|
+
- spec/server_commands/rackup_spec.rb
|
540
544
|
- spec/server_spec.rb
|
541
545
|
- spec/spec_helper.rb
|
542
546
|
- spec/spec_helper_features.rb
|
@@ -617,6 +621,8 @@ test_files:
|
|
617
621
|
- spec/proxy_pac/pac_result_spec.rb
|
618
622
|
- spec/proxy_pac_result_parser_spec.rb
|
619
623
|
- spec/runner_spec.rb
|
624
|
+
- spec/server_commands/puma_spec.rb
|
625
|
+
- spec/server_commands/rackup_spec.rb
|
620
626
|
- spec/server_spec.rb
|
621
627
|
- spec/spec_helper.rb
|
622
628
|
- spec/spec_helper_features.rb
|