Skip to content

Commit 5539fa1

Browse files
authored
Improve compatibility of non-string header values. (#7)
* Add failing test case. * Ignore non-string values.
1 parent 9cfb405 commit 5539fa1

File tree

10 files changed

+34
-7
lines changed

10 files changed

+34
-7
lines changed

.github/workflows/coverage.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
name: ${{matrix.ruby}} on ${{matrix.os}}
1515
runs-on: ${{matrix.os}}-latest
1616
env:
17-
BUNDLER_GEMFILE: ${{matrix.gemfile}}
17+
BUNDLE_GEMFILE: ${{matrix.gemfile}}
1818

1919
strategy:
2020
matrix:

.github/workflows/test.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
runs-on: ${{matrix.os}}-latest
1515
continue-on-error: ${{matrix.experimental}}
1616
env:
17-
BUNDLER_GEMFILE: ${{matrix.gemfile}}
17+
BUNDLE_GEMFILE: ${{matrix.gemfile}}
1818

1919
strategy:
2020
matrix:

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,5 @@
33
/gems.locked
44
/.covered.db
55
/external
6+
7+
*.lock

gems/gems.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
source "https://rubygems.org"
2+
3+
gem "async-http"
4+
gem "bake-test"
5+
gem "bake-test-external"
6+
gem "sus"
7+
gem "sus-fixtures-async-http"
8+
gem "covered"

gems/rack-v1.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
# Released under the MIT License.
44
# Copyright, 2022, by Samuel Williams.
55

6-
eval_gemfile("../gems.rb")
6+
eval_gemfile("gems.rb")
77

88
gem "rack", "~> 1.0"

gems/rack-v2.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
# Released under the MIT License.
44
# Copyright, 2022, by Samuel Williams.
55

6-
eval_gemfile("../gems.rb")
6+
eval_gemfile("gems.rb")
77

88
gem "rack", "~> 2.0"

gems/rack-v3.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
# Released under the MIT License.
44
# Copyright, 2022, by Samuel Williams.
55

6-
eval_gemfile("../gems.rb")
6+
eval_gemfile("gems.rb")
77

88
gem "rack", "~> 3.0"

lib/protocol/rack/adapter.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
module Protocol
1212
module Rack
1313
module Adapter
14-
if ::Rack::RELEASE >= "3"
14+
if ::Rack.release >= "3"
1515
IMPLEMENTATION = Rack3
1616
else
1717
IMPLEMENTATION = Rack2

lib/protocol/rack/adapter/rack2.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,12 @@ def wrap_headers(fields)
108108

109109
if key.start_with?('rack.')
110110
meta[key] = value
111-
else
111+
elsif value.is_a?(String)
112112
value.split("\n").each do |value|
113113
headers[key] = value
114114
end
115+
else
116+
headers[key] = value
115117
end
116118
end
117119

test/protocol/rack/adapter.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,21 @@
7575
end
7676
end
7777

78+
with 'non-string header value' do
79+
let(:app) do
80+
lambda do |env|
81+
[200, {'x-custom' => 123}, ["Hello World!"]]
82+
end
83+
end
84+
85+
let(:response) {client.get("/")}
86+
87+
it "get valid response" do
88+
expect(response.read).to be == "Hello World!"
89+
expect(response.headers['x-custom']).to be == ['123']
90+
end
91+
end
92+
7893
with 'REQUEST_URI', timeout: 1 do
7994
let(:app) do
8095
lambda do |env|

0 commit comments

Comments
 (0)