lib/sinatra/runner.rb in sinatra-contrib-2.2.4 vs lib/sinatra/runner.rb in sinatra-contrib-3.0.0
- old
+ new
@@ -1,5 +1,7 @@
+# frozen_string_literal: true
+
require 'open-uri'
require 'net/http'
require 'timeout'
module Sinatra
@@ -26,11 +28,11 @@
#
# require 'sinatra/runner'
#
# class Runner < Sinatra::Runner
# def app_file
- # File.expand_path("../server.rb", __FILE__)
+ # File.expand_path("server.rb", __dir__)
# end
# end
#
# Override Runner#app_file, #command, #port, #protocol and #ping_path for customization.
#
@@ -47,32 +49,33 @@
# runner.kill
#
# For an example, check https://github.com/apotonick/roar/blob/master/test/integration/runner.rb
class Runner
def app_file
- File.expand_path("../server.rb", __FILE__)
+ File.expand_path('server.rb', __dir__)
end
def run
@pipe = start
@started = Time.now
warn "#{server} up and running on port #{port}" if ping
end
def kill
return unless pipe
- Process.kill("KILL", pipe.pid)
+
+ Process.kill('KILL', pipe.pid)
rescue NotImplementedError
system "kill -9 #{pipe.pid}"
rescue Errno::ESRCH
end
def get(url)
Timeout.timeout(1) { get_url("#{protocol}://127.0.0.1:#{port}#{url}") }
end
- def get_stream(url = "/stream", &block)
+ def get_stream(url = '/stream', &block)
Net::HTTP.start '127.0.0.1', port do |http|
request = Net::HTTP::Get.new url
http.request request do |response|
response.read_body(&block)
end
@@ -87,61 +90,67 @@
end
end
end
def log
- @log ||= ""
- loop { @log << pipe.read_nonblock(1) }
+ @log ||= ''
+ loop { @log << pipe.read_nonblock(1) }
rescue Exception
@log
end
- private
+ private
+
attr_accessor :pipe
def start
IO.popen(command)
end
- def command # to be overwritten
+ # to be overwritten
+ def command
"bundle exec ruby #{app_file} -p #{port} -e production"
end
- def ping(timeout=30)
+ def ping(timeout = 30)
loop do
return if alive?
+
if Time.now - @started > timeout
- $stderr.puts command, log
- fail "timeout"
+ warn command, log
+ raise 'timeout'
else
sleep 0.1
end
end
end
def alive?
3.times { get(ping_path) }
true
- rescue Errno::ECONNREFUSED, Errno::ECONNRESET, EOFError, SystemCallError, OpenURI::HTTPError, Timeout::Error
+ rescue EOFError, SystemCallError, OpenURI::HTTPError, Timeout::Error
false
end
- def ping_path # to be overwritten
+ # to be overwritten
+ def ping_path
'/ping'
end
- def port # to be overwritten
+ # to be overwritten
+ def port
4567
end
def protocol
- "http"
+ 'http'
end
def get_url(url)
uri = URI.parse(url)
- return uri.read unless protocol == "https"
+ return uri.read unless protocol == 'https'
+
get_https_url(uri)
end
def get_https_url(uri)
http = Net::HTTP.new(uri.host, uri.port)