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)