diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 87af470e..452c3e57 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -30,43 +30,44 @@ jobs: ruby: - 2.6 - 2.7 - - 3.0 + - "3.0" - 3.1 - 3.2 - 3.3 - 3.4 gemfile: + - gems/rack-v1.rb - gems/rack-v2.rb + - gems/rack-v3.rb include: - experimental: false os: macos ruby: 3.4 gemfile: gems/rack-v2.rb + - experimental: false + os: macos + ruby: 3.4 + gemfile: gems/rack-v3.rb - experimental: true os: ubuntu ruby: head gemfile: gems/rack-v2.rb - experimental: true os: ubuntu - ruby: 2.7 - gemfile: gems/rack-v1.rb - - experimental: true - os: ubuntu - ruby: 3.4 - gemfile: gems/rack-v2.rb - - experimental: true - os: ubuntu - ruby: 3.4 + ruby: head gemfile: gems/rack-v3.rb - experimental: true os: ubuntu ruby: 3.4 gemfile: gems/rack-head.rb + exclude: + - { ruby: 3.3, gemfile: gems/rack-v1.rb } + - { ruby: 3.4, gemfile: gems/rack-v1.rb } steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 with: diff --git a/gems/rack-head.rb b/gems/rack-head.rb index d3001cbe..b898223b 100644 --- a/gems/rack-head.rb +++ b/gems/rack-head.rb @@ -3,3 +3,4 @@ eval_gemfile "../Gemfile" gem 'rack', github: 'rack/rack' +gem 'rackup' diff --git a/gems/rack-v3.rb b/gems/rack-v3.rb index 01923819..5f767d9d 100644 --- a/gems/rack-v3.rb +++ b/gems/rack-v3.rb @@ -3,3 +3,4 @@ eval_gemfile "../Gemfile" gem 'rack', "~> 3.0" +gem 'rackup' diff --git a/lib/rack/handler/thin.rb b/lib/rack/handler/thin.rb index bfa03cd5..0f374907 100644 --- a/lib/rack/handler/thin.rb +++ b/lib/rack/handler/thin.rb @@ -1,38 +1,13 @@ # frozen_string_literal: true -require "thin" -require "thin/server" -require "thin/logging" -require "thin/backends/tcp_server" +require 'rack/handler' +require_relative '../../thin/rackup/handler' module Rack module Handler - class Thin - def self.run(app, **options) - environment = ENV['RACK_ENV'] || 'development' - default_host = environment == 'development' ? 'localhost' : '0.0.0.0' - - host = options.delete(:Host) || default_host - port = options.delete(:Port) || 8080 - args = [host, port, app, options] - - server = ::Thin::Server.new(*args) - yield server if block_given? - - server.start - end - - def self.valid_options - environment = ENV['RACK_ENV'] || 'development' - default_host = environment == 'development' ? 'localhost' : '0.0.0.0' - - { - "Host=HOST" => "Hostname to listen on (default: #{default_host})", - "Port=PORT" => "Port to listen on (default: 8080)", - } - end + class Thin < ::Thin::Rackup::Handler end - register :thin, ::Rack::Handler::Thin + register :thin, Thin.to_s end end diff --git a/lib/rackup/handler/thin.rb b/lib/rackup/handler/thin.rb new file mode 100644 index 00000000..e3d7abb1 --- /dev/null +++ b/lib/rackup/handler/thin.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'rackup/handler' +require_relative '../../thin/rackup/handler' + +module Rackup + module Handler + class Thin < ::Thin::Rackup::Handler + end + + register :thin, Thin + end +end diff --git a/lib/thin/rackup/handler.rb b/lib/thin/rackup/handler.rb new file mode 100644 index 00000000..b66e6ba2 --- /dev/null +++ b/lib/thin/rackup/handler.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +module Thin + module Rackup + class Handler + def self.run(app, **options) + environment = ENV['RACK_ENV'] || 'development' + default_host = environment == 'development' ? 'localhost' : '0.0.0.0' + + host = options.delete(:Host) || default_host + port = options.delete(:Port) || 8080 + args = [host, port, app, options] + + server = ::Thin::Server.new(*args) + yield server if block_given? + + server.start + end + + def self.valid_options + environment = ENV['RACK_ENV'] || 'development' + default_host = environment == 'development' ? 'localhost' : '0.0.0.0' + + { + "Host=HOST" => "Hostname to listen on (default: #{default_host})", + "Port=PORT" => "Port to listen on (default: 8080)", + } + end + end + end +end