serverless-rack 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -2
- data/README.md +1 -1
- data/lib/serverless_rack.rb +32 -6
- data/serverless-rack.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e2ee06d74ace889ea61ad77a3c208075d81822482bed898d298bca6da2814d6
|
4
|
+
data.tar.gz: f8e09735728d88f2dec09c3ae0fd934569120d51dc5c5e082223e2bce7aae32c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da480222e126f675db95a97930f4b74b04553c2471d262d454db69121b5ffb76ea56d0c8b5bb5822b5ceb8d7c54fc106139de7c552cede33094c28f170eb8fd0
|
7
|
+
data.tar.gz: 2d75c999716059e286376c8998663223d7eb4f834f195692bdf3609bd00499f15e4f24dee8b4d085efe4d33b08fffa0a4c91026c7c98addd3e2793088d57b1a7
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,13 @@
|
|
1
|
+
# 1.0.1
|
2
|
+
|
3
|
+
- Support additional bundler arguments to be passed when using docker (#2)
|
4
|
+
- Support multi-value query string parameters
|
5
|
+
- Support multi-value headers in request and response
|
6
|
+
|
1
7
|
# 1.0.0
|
2
8
|
|
3
|
-
Feature parity with `serverless-wsgi`.
|
9
|
+
- Feature parity with `serverless-wsgi`.
|
4
10
|
|
5
11
|
# 0.0.1
|
6
12
|
|
7
|
-
Initial release.
|
13
|
+
- Initial release.
|
data/README.md
CHANGED
@@ -327,7 +327,7 @@ from the browser is usually the preferred approach.
|
|
327
327
|
### Raw context and event
|
328
328
|
|
329
329
|
The raw context and event from AWS Lambda are both accessible through the Rack
|
330
|
-
request. The following example shows how to access them when using
|
330
|
+
request. The following example shows how to access them when using Sinatra:
|
331
331
|
|
332
332
|
```ruby
|
333
333
|
require 'sinatra'
|
data/lib/serverless_rack.rb
CHANGED
@@ -41,6 +41,14 @@ def parse_path_info(event)
|
|
41
41
|
event['path']
|
42
42
|
end
|
43
43
|
|
44
|
+
def parse_query_string(event)
|
45
|
+
if event.include? 'multiValueQueryStringParameters'
|
46
|
+
Rack::Utils.build_query(event['multiValueQueryStringParameters'] || {})
|
47
|
+
else
|
48
|
+
Rack::Utils.build_query(event['queryStringParameters'] || {})
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
44
52
|
def parse_body(event)
|
45
53
|
if event['isBase64Encoded']
|
46
54
|
Base64.decode64(event['body'])
|
@@ -49,6 +57,16 @@ def parse_body(event)
|
|
49
57
|
end
|
50
58
|
end
|
51
59
|
|
60
|
+
def parse_headers(event)
|
61
|
+
if event.include? 'multiValueHeaders'
|
62
|
+
Rack::Utils::HeaderHash.new((event['multiValueHeaders'] || {}).map do |key, value|
|
63
|
+
[key, value.join("\n")]
|
64
|
+
end.to_h)
|
65
|
+
else
|
66
|
+
Rack::Utils::HeaderHash.new(event['headers'] || {})
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
52
70
|
def parse_http_headers(headers)
|
53
71
|
headers = headers.map do |key, value|
|
54
72
|
["HTTP_#{key.upcase.tr('-', '_')}", value]
|
@@ -66,7 +84,7 @@ def build_environ(event:, context:, headers:, body:)
|
|
66
84
|
'REQUEST_METHOD' => event['httpMethod'],
|
67
85
|
'SCRIPT_NAME' => parse_script_name(event, headers),
|
68
86
|
'PATH_INFO' => parse_path_info(event),
|
69
|
-
'QUERY_STRING' =>
|
87
|
+
'QUERY_STRING' => parse_query_string(event),
|
70
88
|
'SERVER_NAME' => headers['Host'] || 'lambda',
|
71
89
|
'SERVER_PORT' => headers['X-Forwarded-Port'] || '80',
|
72
90
|
'CONTENT_LENGTH' => body.bytesize.to_s,
|
@@ -146,7 +164,7 @@ def all_casings(input_string)
|
|
146
164
|
end
|
147
165
|
end
|
148
166
|
|
149
|
-
def
|
167
|
+
def format_split_headers(headers:)
|
150
168
|
headers = headers.to_hash
|
151
169
|
|
152
170
|
# If there are headers multiple occurrences, e.g. Set-Cookie, create
|
@@ -168,12 +186,20 @@ def format_headers(headers:)
|
|
168
186
|
{ 'headers' => headers }
|
169
187
|
end
|
170
188
|
|
189
|
+
def format_grouped_headers(headers:)
|
190
|
+
{ 'multiValueHeaders' => headers.map do |key, value|
|
191
|
+
[key, value.split("\n")]
|
192
|
+
end.to_h }
|
193
|
+
end
|
194
|
+
|
171
195
|
def format_response(event:, status:, headers:, body:, text_mime_types:)
|
172
196
|
response = { 'statusCode' => status }
|
173
197
|
|
174
|
-
|
175
|
-
|
176
|
-
|
198
|
+
if event.include? 'multiValueHeaders'
|
199
|
+
response.merge!(format_grouped_headers(headers: headers))
|
200
|
+
else
|
201
|
+
response.merge!(format_split_headers(headers: headers))
|
202
|
+
end
|
177
203
|
|
178
204
|
response.merge!(
|
179
205
|
format_status_description(event: event, status: status)
|
@@ -197,7 +223,7 @@ def handle_request(app:, event:, context:, config: {})
|
|
197
223
|
build_environ(
|
198
224
|
event: event,
|
199
225
|
context: context,
|
200
|
-
headers:
|
226
|
+
headers: parse_headers(event),
|
201
227
|
body: parse_body(event)
|
202
228
|
)
|
203
229
|
)
|
data/serverless-rack.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: serverless-rack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Logan Raarup
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-03-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|