serverless-rack 1.0.8 → 2.0.0
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 +6 -0
- data/lib/serverless_rack.rb +52 -19
- data/serverless-rack.gemspec +2 -2
- metadata +5 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 44575605f8497a6bd758b5405661b31ef566f624520bee5f58525c1185206aa7
|
|
4
|
+
data.tar.gz: 811d8b5b2a4e52feb8676bd1f1444c7754ece0baf0ff001e20745d2872bdafa6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f68dd626d7ad70481437cb47694f542c95afade328cdf67027c92dff6be035bb39f00e21c4336fa5bced3889029231f35dd274c9c259b60a277dd44aefcbda7a
|
|
7
|
+
data.tar.gz: 17f20b14150cb6260ac11185519a4810cdd4f587282a9c8f5aeb47080a262cc8027886d0cbfd509b887473e1a652a01c53105fb73b2c6ebee833a419f566f3e8
|
data/CHANGELOG.md
CHANGED
data/lib/serverless_rack.rb
CHANGED
|
@@ -63,13 +63,13 @@ end
|
|
|
63
63
|
|
|
64
64
|
def parse_headers(event)
|
|
65
65
|
if event.include? 'multiValueHeaders'
|
|
66
|
-
Rack::
|
|
66
|
+
Rack::Headers.new(
|
|
67
67
|
(event['multiValueHeaders'] || {}).transform_values do |value|
|
|
68
68
|
value.join("\n")
|
|
69
69
|
end
|
|
70
70
|
)
|
|
71
71
|
else
|
|
72
|
-
Rack::
|
|
72
|
+
Rack::Headers[event['headers'] || {}]
|
|
73
73
|
end
|
|
74
74
|
end
|
|
75
75
|
|
|
@@ -130,10 +130,47 @@ def text_mime_type?(headers:, text_mime_types:)
|
|
|
130
130
|
false
|
|
131
131
|
end
|
|
132
132
|
|
|
133
|
+
# Class to buffer a streaming response body
|
|
134
|
+
class ResponseInputStream
|
|
135
|
+
attr_reader :buffer
|
|
136
|
+
|
|
137
|
+
def initialize
|
|
138
|
+
@buffer = ''
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def self.[](streaming_body)
|
|
142
|
+
stream = new
|
|
143
|
+
streaming_body.call(stream)
|
|
144
|
+
stream.buffer
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def write(chunk)
|
|
148
|
+
@buffer += chunk
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def <<(chunk)
|
|
152
|
+
write(chunk)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def close; end
|
|
156
|
+
|
|
157
|
+
alias read buffer
|
|
158
|
+
|
|
159
|
+
def flush
|
|
160
|
+
@buffer = ''
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
133
164
|
def format_body(body:, headers:, text_mime_types:)
|
|
134
165
|
response_data = ''
|
|
135
166
|
begin
|
|
136
|
-
body.each
|
|
167
|
+
if body.respond_to?(:each)
|
|
168
|
+
body.each { |part| response_data += part }
|
|
169
|
+
elsif body.respond_to?(:to_ary)
|
|
170
|
+
body.to_ary.each { |part| response_data += part }
|
|
171
|
+
elsif body.respond_to?(:call)
|
|
172
|
+
response_data = ResponseInputStream[body]
|
|
173
|
+
end
|
|
137
174
|
ensure
|
|
138
175
|
body.close if body.respond_to?(:close)
|
|
139
176
|
end
|
|
@@ -157,6 +194,8 @@ def all_casings(input_string)
|
|
|
157
194
|
# Permute all casings of a given string.
|
|
158
195
|
# A pretty algoritm, via @Amber
|
|
159
196
|
# http://stackoverflow.com/questions/6792803/finding-all-possible-case-permutations-in-python
|
|
197
|
+
return enum_for(__method__, input_string) unless block_given?
|
|
198
|
+
|
|
160
199
|
if input_string.empty?
|
|
161
200
|
yield ''
|
|
162
201
|
else
|
|
@@ -175,32 +214,26 @@ def all_casings(input_string)
|
|
|
175
214
|
end
|
|
176
215
|
|
|
177
216
|
def format_split_headers(headers:)
|
|
178
|
-
|
|
179
|
-
|
|
217
|
+
# Rack::Headers will automatically lower-case new keys
|
|
218
|
+
# Use (and return) a regular hash literal instead
|
|
219
|
+
headers_hash = {}
|
|
180
220
|
|
|
181
221
|
# If there are headers multiple occurrences, e.g. Set-Cookie, create
|
|
182
222
|
# case-mutated variations in order to pass them through APIGW.
|
|
183
223
|
# 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?
|
|
224
|
+
headers.each do |key, value|
|
|
225
|
+
if value.is_a?(Array)
|
|
226
|
+
value.zip(all_casings(key)).each { |v, casing| headers_hash[casing] = v }
|
|
227
|
+
else
|
|
228
|
+
headers_hash[key] = value
|
|
194
229
|
end
|
|
195
230
|
end
|
|
196
231
|
|
|
197
|
-
{ 'headers' =>
|
|
232
|
+
{ 'headers' => headers_hash }
|
|
198
233
|
end
|
|
199
234
|
|
|
200
235
|
def format_grouped_headers(headers:)
|
|
201
|
-
{ 'multiValueHeaders' => headers.transform_values
|
|
202
|
-
value.split("\n")
|
|
203
|
-
end }
|
|
236
|
+
{ 'multiValueHeaders' => headers.transform_values { |v| v.is_a?(Array) ? v : [v] } }
|
|
204
237
|
end
|
|
205
238
|
|
|
206
239
|
def format_response(event:, status:, headers:, body:, text_mime_types:)
|
data/serverless-rack.gemspec
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = 'serverless-rack'
|
|
5
|
-
s.version = '
|
|
5
|
+
s.version = '2.0.0'
|
|
6
6
|
s.summary =
|
|
7
7
|
'Serverless plugin to deploy Ruby Rack applications (Sinatra/Padrino/Cuba etc.) '\
|
|
8
8
|
'and bundle gems'
|
|
@@ -24,5 +24,5 @@ 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
28
|
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.0
|
|
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-04-09 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.
|
|
@@ -42,7 +41,6 @@ homepage: https://github.com/logandk/serverless-rack
|
|
|
42
41
|
licenses:
|
|
43
42
|
- MIT
|
|
44
43
|
metadata: {}
|
|
45
|
-
post_install_message:
|
|
46
44
|
rdoc_options: []
|
|
47
45
|
require_paths:
|
|
48
46
|
- lib
|
|
@@ -57,8 +55,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
57
55
|
- !ruby/object:Gem::Version
|
|
58
56
|
version: '0'
|
|
59
57
|
requirements: []
|
|
60
|
-
rubygems_version: 3.
|
|
61
|
-
signing_key:
|
|
58
|
+
rubygems_version: 3.6.6
|
|
62
59
|
specification_version: 4
|
|
63
60
|
summary: Serverless plugin to deploy Ruby Rack applications (Sinatra/Padrino/Cuba
|
|
64
61
|
etc.) and bundle gems
|