Skip to content

Commit 3beece2

Browse files
authored
Merge pull request #47 from university-of-york/patching-multivaluedheaders-issues
Ensure for events containing multiValueHeaders, the Rack::Headers return object is correctly initialised
2 parents dd36f13 + 931dfd5 commit 3beece2

4 files changed

Lines changed: 48 additions & 3 deletions

File tree

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# 2.0.1
2+
3+
- Correctly initialise `Rack::Headers` instance for events containing `multiValueHeaders`
4+
_Matthew Pickin_
5+
16
# 2.0.0
27

38
- Add support for Rack v3 (#44)

lib/serverless_rack.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,11 @@ def parse_body(event)
6565

6666
def parse_headers(event)
6767
if event.include? 'multiValueHeaders'
68-
Rack::Headers.new(
68+
Rack::Headers[
6969
(event['multiValueHeaders'] || {}).transform_values do |value|
7070
value.join("\n")
7171
end
72-
)
72+
]
7373
else
7474
Rack::Headers[event['headers'] || {}]
7575
end

serverless-rack.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Gem::Specification.new do |s|
44
s.name = 'serverless-rack'
5-
s.version = '2.0.0'
5+
s.version = '2.0.1'
66
s.summary =
77
'Serverless plugin to deploy Ruby Rack applications (Sinatra/Padrino/Cuba etc.) ' \
88
'and bundle gems'

spec/parse_headers_spec.rb

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../lib/serverless_rack'
4+
5+
RSpec.describe 'parse_headers' do
6+
let(:event) do
7+
{
8+
'headers' => {
9+
'Header1' => 'value1',
10+
'HEADER2' => 'value2'
11+
}
12+
}
13+
end
14+
15+
it 'responds to lower-case keys', :aggregate_failures do
16+
parsed_headers = parse_headers(event)
17+
18+
expect(parsed_headers['header1']).to eq 'value1'
19+
expect(parsed_headers['Header2']).to eq 'value2'
20+
end
21+
22+
context 'with multiValuedHeaders' do
23+
let(:event) do
24+
{
25+
'multiValueHeaders' => {
26+
'Header1' => %w[value1 value2],
27+
'HEADER2' => ['value3']
28+
}
29+
}
30+
end
31+
32+
it 'joins the multi-value headers into a string' do
33+
expect(parse_headers(event)['Header1']).to eq "value1\nvalue2"
34+
end
35+
36+
it 'responds to lower-case keys' do
37+
expect(parse_headers(event)['header2']).to eq 'value3'
38+
end
39+
end
40+
end

0 commit comments

Comments
 (0)