Skip to content

Commit dbf793a

Browse files
authoredFeb 7, 2025··
Support rack 3.x and rackup (#435)
* Fixed registration of Thin with `rack`/`rackup`. * Updated CI to run on rack 1/2/3.
1 parent dac0260 commit dbf793a

File tree

6 files changed

+62
-40
lines changed

6 files changed

+62
-40
lines changed
 

‎.github/workflows/test.yml

+12-11
Original file line numberDiff line numberDiff line change
@@ -30,43 +30,44 @@ jobs:
3030
ruby:
3131
- 2.6
3232
- 2.7
33-
- 3.0
33+
- "3.0"
3434
- 3.1
3535
- 3.2
3636
- 3.3
3737
- 3.4
3838

3939
gemfile:
40+
- gems/rack-v1.rb
4041
- gems/rack-v2.rb
42+
- gems/rack-v3.rb
4143

4244
include:
4345
- experimental: false
4446
os: macos
4547
ruby: 3.4
4648
gemfile: gems/rack-v2.rb
49+
- experimental: false
50+
os: macos
51+
ruby: 3.4
52+
gemfile: gems/rack-v3.rb
4753
- experimental: true
4854
os: ubuntu
4955
ruby: head
5056
gemfile: gems/rack-v2.rb
5157
- experimental: true
5258
os: ubuntu
53-
ruby: 2.7
54-
gemfile: gems/rack-v1.rb
55-
- experimental: true
56-
os: ubuntu
57-
ruby: 3.4
58-
gemfile: gems/rack-v2.rb
59-
- experimental: true
60-
os: ubuntu
61-
ruby: 3.4
59+
ruby: head
6260
gemfile: gems/rack-v3.rb
6361
- experimental: true
6462
os: ubuntu
6563
ruby: 3.4
6664
gemfile: gems/rack-head.rb
65+
exclude:
66+
- { ruby: 3.3, gemfile: gems/rack-v1.rb }
67+
- { ruby: 3.4, gemfile: gems/rack-v1.rb }
6768

6869
steps:
69-
- uses: actions/checkout@v3
70+
- uses: actions/checkout@v4
7071

7172
- uses: ruby/setup-ruby@v1
7273
with:

‎gems/rack-head.rb

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
eval_gemfile "../Gemfile"
44

55
gem 'rack', github: 'rack/rack'
6+
gem 'rackup'

‎gems/rack-v3.rb

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
eval_gemfile "../Gemfile"
44

55
gem 'rack', "~> 3.0"
6+
gem 'rackup'

‎lib/rack/handler/thin.rb

+4-29
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,13 @@
11
# frozen_string_literal: true
22

3-
require "thin"
4-
require "thin/server"
5-
require "thin/logging"
6-
require "thin/backends/tcp_server"
3+
require 'rack/handler'
4+
require_relative '../../thin/rackup/handler'
75

86
module Rack
97
module Handler
10-
class Thin
11-
def self.run(app, **options)
12-
environment = ENV['RACK_ENV'] || 'development'
13-
default_host = environment == 'development' ? 'localhost' : '0.0.0.0'
14-
15-
host = options.delete(:Host) || default_host
16-
port = options.delete(:Port) || 8080
17-
args = [host, port, app, options]
18-
19-
server = ::Thin::Server.new(*args)
20-
yield server if block_given?
21-
22-
server.start
23-
end
24-
25-
def self.valid_options
26-
environment = ENV['RACK_ENV'] || 'development'
27-
default_host = environment == 'development' ? 'localhost' : '0.0.0.0'
28-
29-
{
30-
"Host=HOST" => "Hostname to listen on (default: #{default_host})",
31-
"Port=PORT" => "Port to listen on (default: 8080)",
32-
}
33-
end
8+
class Thin < ::Thin::Rackup::Handler
349
end
3510

36-
register :thin, ::Rack::Handler::Thin
11+
register :thin, Thin.to_s
3712
end
3813
end

‎lib/rackup/handler/thin.rb

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# frozen_string_literal: true
2+
3+
require 'rackup/handler'
4+
require_relative '../../thin/rackup/handler'
5+
6+
module Rackup
7+
module Handler
8+
class Thin < ::Thin::Rackup::Handler
9+
end
10+
11+
register :thin, Thin
12+
end
13+
end

‎lib/thin/rackup/handler.rb

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# frozen_string_literal: true
2+
3+
module Thin
4+
module Rackup
5+
class Handler
6+
def self.run(app, **options)
7+
environment = ENV['RACK_ENV'] || 'development'
8+
default_host = environment == 'development' ? 'localhost' : '0.0.0.0'
9+
10+
host = options.delete(:Host) || default_host
11+
port = options.delete(:Port) || 8080
12+
args = [host, port, app, options]
13+
14+
server = ::Thin::Server.new(*args)
15+
yield server if block_given?
16+
17+
server.start
18+
end
19+
20+
def self.valid_options
21+
environment = ENV['RACK_ENV'] || 'development'
22+
default_host = environment == 'development' ? 'localhost' : '0.0.0.0'
23+
24+
{
25+
"Host=HOST" => "Hostname to listen on (default: #{default_host})",
26+
"Port=PORT" => "Port to listen on (default: 8080)",
27+
}
28+
end
29+
end
30+
end
31+
end

0 commit comments

Comments
 (0)
Please sign in to comment.