diff --git a/CHANGELOG.md b/CHANGELOG.md index fc3e083..1b2093b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +# 2.0.1 + +- Correctly initialise `Rack::Headers` instance for events containing `multiValueHeaders` + _Matthew Pickin_ + # 2.0.0 - Add support for Rack v3 (#44) diff --git a/lib/serverless_rack.rb b/lib/serverless_rack.rb index 16a9d2d..d9f7af0 100644 --- a/lib/serverless_rack.rb +++ b/lib/serverless_rack.rb @@ -65,11 +65,11 @@ def parse_body(event) def parse_headers(event) if event.include? 'multiValueHeaders' - Rack::Headers.new( + Rack::Headers[ (event['multiValueHeaders'] || {}).transform_values do |value| value.join("\n") end - ) + ] else Rack::Headers[event['headers'] || {}] end diff --git a/serverless-rack.gemspec b/serverless-rack.gemspec index eb7ca02..ea10e9d 100644 --- a/serverless-rack.gemspec +++ b/serverless-rack.gemspec @@ -2,7 +2,7 @@ Gem::Specification.new do |s| s.name = 'serverless-rack' - s.version = '2.0.0' + s.version = '2.0.1' s.summary = 'Serverless plugin to deploy Ruby Rack applications (Sinatra/Padrino/Cuba etc.) ' \ 'and bundle gems' diff --git a/spec/parse_headers_spec.rb b/spec/parse_headers_spec.rb new file mode 100644 index 0000000..b05f837 --- /dev/null +++ b/spec/parse_headers_spec.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +require_relative '../lib/serverless_rack' + +RSpec.describe 'parse_headers' do + let(:event) do + { + 'headers' => { + 'Header1' => 'value1', + 'HEADER2' => 'value2' + } + } + end + + it 'responds to lower-case keys', :aggregate_failures do + parsed_headers = parse_headers(event) + + expect(parsed_headers['header1']).to eq 'value1' + expect(parsed_headers['Header2']).to eq 'value2' + end + + context 'with multiValuedHeaders' do + let(:event) do + { + 'multiValueHeaders' => { + 'Header1' => %w[value1 value2], + 'HEADER2' => ['value3'] + } + } + end + + it 'joins the multi-value headers into a string' do + expect(parse_headers(event)['Header1']).to eq "value1\nvalue2" + end + + it 'responds to lower-case keys' do + expect(parse_headers(event)['header2']).to eq 'value3' + end + end +end