serverless-rack 1.0.8 → 2.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 +11 -0
- data/Gemfile +1 -1
- data/lib/serverless_rack.rb +56 -21
- data/serverless-rack.gemspec +6 -5
- metadata +7 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: be489aaf76e07b06fe136a1bd37c0786224c219d0575ec483c4e8ccc89a4c0de
|
|
4
|
+
data.tar.gz: 74b96b86ce73ba7d5956f34e51d5f9a246b54958ed562c2c267bab1ad67a5f69
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: db6bdf6bb1eaa00c898511ff440989de2ec792541e4d76104f671284a1c9a7211aec6ddb217e474dc03bf245f3a44b470b7369c0c93a97cecbca4ce8f2c1b601
|
|
7
|
+
data.tar.gz: '025582f781343b70fdcdc9c3891c9d5be2b44dc9c567b8c78cfc1c5933da52965e921d363332ad425a8e05787c4051c41c1c7e8ef2614df870a93f6b28daad46'
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
# 2.0.1
|
|
2
|
+
|
|
3
|
+
- Correctly initialise `Rack::Headers` instance for events containing `multiValueHeaders`
|
|
4
|
+
_Matthew Pickin_
|
|
5
|
+
|
|
6
|
+
# 2.0.0
|
|
7
|
+
|
|
8
|
+
- Add support for Rack v3 (#44)
|
|
9
|
+
|
|
10
|
+
_Lissa Moriarty_, _Matthew Pickin_
|
|
11
|
+
|
|
1
12
|
# 1.0.8
|
|
2
13
|
|
|
3
14
|
- Add types to command arguments to avoid deprecation warnings (#25)
|
data/Gemfile
CHANGED
data/lib/serverless_rack.rb
CHANGED
|
@@ -17,7 +17,9 @@ TEXT_MIME_TYPES = [
|
|
|
17
17
|
].freeze
|
|
18
18
|
|
|
19
19
|
def base_path
|
|
20
|
-
|
|
20
|
+
return if ENV.fetch('API_GATEWAY_BASE_PATH', '').empty?
|
|
21
|
+
|
|
22
|
+
"/#{ENV.fetch('API_GATEWAY_BASE_PATH')}"
|
|
21
23
|
end
|
|
22
24
|
|
|
23
25
|
def keepalive_event?(event)
|
|
@@ -63,13 +65,13 @@ end
|
|
|
63
65
|
|
|
64
66
|
def parse_headers(event)
|
|
65
67
|
if event.include? 'multiValueHeaders'
|
|
66
|
-
Rack::
|
|
68
|
+
Rack::Headers[
|
|
67
69
|
(event['multiValueHeaders'] || {}).transform_values do |value|
|
|
68
70
|
value.join("\n")
|
|
69
71
|
end
|
|
70
|
-
|
|
72
|
+
]
|
|
71
73
|
else
|
|
72
|
-
Rack::
|
|
74
|
+
Rack::Headers[event['headers'] || {}]
|
|
73
75
|
end
|
|
74
76
|
end
|
|
75
77
|
|
|
@@ -130,10 +132,47 @@ def text_mime_type?(headers:, text_mime_types:)
|
|
|
130
132
|
false
|
|
131
133
|
end
|
|
132
134
|
|
|
135
|
+
# Class to buffer a streaming response body
|
|
136
|
+
class ResponseInputStream
|
|
137
|
+
attr_reader :buffer
|
|
138
|
+
|
|
139
|
+
def initialize
|
|
140
|
+
@buffer = ''
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def self.[](streaming_body)
|
|
144
|
+
stream = new
|
|
145
|
+
streaming_body.call(stream)
|
|
146
|
+
stream.buffer
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def write(chunk)
|
|
150
|
+
@buffer += chunk
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def <<(chunk)
|
|
154
|
+
write(chunk)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def close; end
|
|
158
|
+
|
|
159
|
+
alias read buffer
|
|
160
|
+
|
|
161
|
+
def flush
|
|
162
|
+
@buffer = ''
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
133
166
|
def format_body(body:, headers:, text_mime_types:)
|
|
134
167
|
response_data = ''
|
|
135
168
|
begin
|
|
136
|
-
body.each
|
|
169
|
+
if body.respond_to?(:each)
|
|
170
|
+
body.each { |part| response_data += part }
|
|
171
|
+
elsif body.respond_to?(:to_ary)
|
|
172
|
+
body.to_ary.each { |part| response_data += part }
|
|
173
|
+
elsif body.respond_to?(:call)
|
|
174
|
+
response_data = ResponseInputStream[body]
|
|
175
|
+
end
|
|
137
176
|
ensure
|
|
138
177
|
body.close if body.respond_to?(:close)
|
|
139
178
|
end
|
|
@@ -157,6 +196,8 @@ def all_casings(input_string)
|
|
|
157
196
|
# Permute all casings of a given string.
|
|
158
197
|
# A pretty algoritm, via @Amber
|
|
159
198
|
# http://stackoverflow.com/questions/6792803/finding-all-possible-case-permutations-in-python
|
|
199
|
+
return enum_for(__method__, input_string) unless block_given?
|
|
200
|
+
|
|
160
201
|
if input_string.empty?
|
|
161
202
|
yield ''
|
|
162
203
|
else
|
|
@@ -175,32 +216,26 @@ def all_casings(input_string)
|
|
|
175
216
|
end
|
|
176
217
|
|
|
177
218
|
def format_split_headers(headers:)
|
|
178
|
-
|
|
179
|
-
|
|
219
|
+
# Rack::Headers will automatically lower-case new keys
|
|
220
|
+
# Use (and return) a regular hash literal instead
|
|
221
|
+
headers_hash = {}
|
|
180
222
|
|
|
181
223
|
# If there are headers multiple occurrences, e.g. Set-Cookie, create
|
|
182
224
|
# case-mutated variations in order to pass them through APIGW.
|
|
183
225
|
# This is a hack that's currently needed.
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
headers.delete(key)
|
|
190
|
-
|
|
191
|
-
all_casings(key) do |casing|
|
|
192
|
-
headers[casing] = values.shift
|
|
193
|
-
break if values.empty?
|
|
226
|
+
headers.each do |key, value|
|
|
227
|
+
if value.is_a?(Array)
|
|
228
|
+
value.zip(all_casings(key)).each { |v, casing| headers_hash[casing] = v }
|
|
229
|
+
else
|
|
230
|
+
headers_hash[key] = value
|
|
194
231
|
end
|
|
195
232
|
end
|
|
196
233
|
|
|
197
|
-
{ 'headers' =>
|
|
234
|
+
{ 'headers' => headers_hash }
|
|
198
235
|
end
|
|
199
236
|
|
|
200
237
|
def format_grouped_headers(headers:)
|
|
201
|
-
{ 'multiValueHeaders' => headers.transform_values
|
|
202
|
-
value.split("\n")
|
|
203
|
-
end }
|
|
238
|
+
{ 'multiValueHeaders' => headers.transform_values { |v| v.is_a?(Array) ? v : [v] } }
|
|
204
239
|
end
|
|
205
240
|
|
|
206
241
|
def format_response(event:, status:, headers:, body:, text_mime_types:)
|
data/serverless-rack.gemspec
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = 'serverless-rack'
|
|
5
|
-
s.version = '
|
|
5
|
+
s.version = '2.0.1'
|
|
6
6
|
s.summary =
|
|
7
|
-
'Serverless plugin to deploy Ruby Rack applications (Sinatra/Padrino/Cuba etc.) '\
|
|
7
|
+
'Serverless plugin to deploy Ruby Rack applications (Sinatra/Padrino/Cuba etc.) ' \
|
|
8
8
|
'and bundle gems'
|
|
9
9
|
s.description =
|
|
10
|
-
'A Serverless v1.x plugin to build your deploy Ruby Rack applications using '\
|
|
11
|
-
'Serverless. Compatible Rack application frameworks include Sinatra, '\
|
|
10
|
+
'A Serverless v1.x plugin to build your deploy Ruby Rack applications using ' \
|
|
11
|
+
'Serverless. Compatible Rack application frameworks include Sinatra, ' \
|
|
12
12
|
'Cuba and Padrino.'
|
|
13
13
|
s.authors = ['Logan Raarup']
|
|
14
14
|
s.email = 'logan@logan.dk'
|
|
@@ -24,5 +24,6 @@ Gem::Specification.new do |s|
|
|
|
24
24
|
s.license = 'MIT'
|
|
25
25
|
|
|
26
26
|
s.required_ruby_version = '>= 2.4.0'
|
|
27
|
-
s.add_dependency 'rack', '~>
|
|
27
|
+
s.add_dependency 'rack', '~> 3.0'
|
|
28
|
+
s.metadata['rubygems_mfa_required'] = 'true'
|
|
28
29
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: serverless-rack
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Logan Raarup
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 2026-05-01 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: rack
|
|
@@ -16,14 +15,14 @@ dependencies:
|
|
|
16
15
|
requirements:
|
|
17
16
|
- - "~>"
|
|
18
17
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
18
|
+
version: '3.0'
|
|
20
19
|
type: :runtime
|
|
21
20
|
prerelease: false
|
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
22
|
requirements:
|
|
24
23
|
- - "~>"
|
|
25
24
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
25
|
+
version: '3.0'
|
|
27
26
|
description: A Serverless v1.x plugin to build your deploy Ruby Rack applications
|
|
28
27
|
using Serverless. Compatible Rack application frameworks include Sinatra, Cuba and
|
|
29
28
|
Padrino.
|
|
@@ -41,8 +40,8 @@ files:
|
|
|
41
40
|
homepage: https://github.com/logandk/serverless-rack
|
|
42
41
|
licenses:
|
|
43
42
|
- MIT
|
|
44
|
-
metadata:
|
|
45
|
-
|
|
43
|
+
metadata:
|
|
44
|
+
rubygems_mfa_required: 'true'
|
|
46
45
|
rdoc_options: []
|
|
47
46
|
require_paths:
|
|
48
47
|
- lib
|
|
@@ -57,8 +56,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
57
56
|
- !ruby/object:Gem::Version
|
|
58
57
|
version: '0'
|
|
59
58
|
requirements: []
|
|
60
|
-
rubygems_version: 3.
|
|
61
|
-
signing_key:
|
|
59
|
+
rubygems_version: 3.6.6
|
|
62
60
|
specification_version: 4
|
|
63
61
|
summary: Serverless plugin to deploy Ruby Rack applications (Sinatra/Padrino/Cuba
|
|
64
62
|
etc.) and bundle gems
|