diff --git a/.github/workflows/coverage.yaml b/.github/workflows/coverage.yaml index 542f018..b4f5ebc 100644 --- a/.github/workflows/coverage.yaml +++ b/.github/workflows/coverage.yaml @@ -14,7 +14,7 @@ jobs: name: ${{matrix.ruby}} on ${{matrix.os}} runs-on: ${{matrix.os}}-latest env: - BUNDLER_GEMFILE: ${{matrix.gemfile}} + BUNDLE_GEMFILE: ${{matrix.gemfile}} strategy: matrix: diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index ee8fac6..610b74c 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -14,7 +14,7 @@ jobs: runs-on: ${{matrix.os}}-latest continue-on-error: ${{matrix.experimental}} env: - BUNDLER_GEMFILE: ${{matrix.gemfile}} + BUNDLE_GEMFILE: ${{matrix.gemfile}} strategy: matrix: diff --git a/.gitignore b/.gitignore index 09a72e0..6a0e22c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ /gems.locked /.covered.db /external + +*.lock \ No newline at end of file diff --git a/gems/gems.rb b/gems/gems.rb new file mode 100644 index 0000000..aa0bd1f --- /dev/null +++ b/gems/gems.rb @@ -0,0 +1,8 @@ +source "https://rubygems.org" + +gem "async-http" +gem "bake-test" +gem "bake-test-external" +gem "sus" +gem "sus-fixtures-async-http" +gem "covered" diff --git a/gems/rack-v1.rb b/gems/rack-v1.rb index d820dd3..1f0c821 100644 --- a/gems/rack-v1.rb +++ b/gems/rack-v1.rb @@ -3,6 +3,6 @@ # Released under the MIT License. # Copyright, 2022, by Samuel Williams. -eval_gemfile("../gems.rb") +eval_gemfile("gems.rb") gem "rack", "~> 1.0" diff --git a/gems/rack-v2.rb b/gems/rack-v2.rb index f2577f1..d774785 100644 --- a/gems/rack-v2.rb +++ b/gems/rack-v2.rb @@ -3,6 +3,6 @@ # Released under the MIT License. # Copyright, 2022, by Samuel Williams. -eval_gemfile("../gems.rb") +eval_gemfile("gems.rb") gem "rack", "~> 2.0" diff --git a/gems/rack-v3.rb b/gems/rack-v3.rb index 9a3c0dd..715f65d 100644 --- a/gems/rack-v3.rb +++ b/gems/rack-v3.rb @@ -3,6 +3,6 @@ # Released under the MIT License. # Copyright, 2022, by Samuel Williams. -eval_gemfile("../gems.rb") +eval_gemfile("gems.rb") gem "rack", "~> 3.0" diff --git a/lib/protocol/rack/adapter.rb b/lib/protocol/rack/adapter.rb index 70820a4..df289c5 100644 --- a/lib/protocol/rack/adapter.rb +++ b/lib/protocol/rack/adapter.rb @@ -11,7 +11,7 @@ module Protocol module Rack module Adapter - if ::Rack::RELEASE >= "3" + if ::Rack.release >= "3" IMPLEMENTATION = Rack3 else IMPLEMENTATION = Rack2 diff --git a/lib/protocol/rack/adapter/rack2.rb b/lib/protocol/rack/adapter/rack2.rb index cf5b16d..a05d22b 100644 --- a/lib/protocol/rack/adapter/rack2.rb +++ b/lib/protocol/rack/adapter/rack2.rb @@ -108,10 +108,12 @@ def wrap_headers(fields) if key.start_with?('rack.') meta[key] = value - else + elsif value.is_a?(String) value.split("\n").each do |value| headers[key] = value end + else + headers[key] = value end end diff --git a/test/protocol/rack/adapter.rb b/test/protocol/rack/adapter.rb index 3c642cc..4fe75bc 100644 --- a/test/protocol/rack/adapter.rb +++ b/test/protocol/rack/adapter.rb @@ -75,6 +75,21 @@ end end + with 'non-string header value' do + let(:app) do + lambda do |env| + [200, {'x-custom' => 123}, ["Hello World!"]] + end + end + + let(:response) {client.get("/")} + + it "get valid response" do + expect(response.read).to be == "Hello World!" + expect(response.headers['x-custom']).to be == ['123'] + end + end + with 'REQUEST_URI', timeout: 1 do let(:app) do lambda do |env|