serverless-rack 1.0.7 → 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 +28 -0
- data/README.md +1 -1
- data/lib/serverless_rack.rb +61 -21
- 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
|
@@ -1,3 +1,31 @@
|
|
|
1
|
+
# 2.0.0
|
|
2
|
+
|
|
3
|
+
- Add support for Rack v3 (#44)
|
|
4
|
+
|
|
5
|
+
_Lissa Moriarty_, _Matthew Pickin_
|
|
6
|
+
|
|
7
|
+
# 1.0.8
|
|
8
|
+
|
|
9
|
+
- Add types to command arguments to avoid deprecation warnings (#25)
|
|
10
|
+
|
|
11
|
+
_Dave Nicolson_
|
|
12
|
+
|
|
13
|
+
- Properly close Rack response body (#26)
|
|
14
|
+
|
|
15
|
+
_Zac Bristow_
|
|
16
|
+
|
|
17
|
+
- Spawn commands correctly on Windows (#29)
|
|
18
|
+
|
|
19
|
+
_Shalvah_
|
|
20
|
+
|
|
21
|
+
- Add missing stringio requirement (#31)
|
|
22
|
+
|
|
23
|
+
_Hirohisa Mitsuishi_
|
|
24
|
+
|
|
25
|
+
- Add user flag to docker option (#32)
|
|
26
|
+
|
|
27
|
+
_Hirohisa Mitsuishi_
|
|
28
|
+
|
|
1
29
|
# 1.0.7
|
|
2
30
|
|
|
3
31
|
- Improved error handling for Docker processes (#20 and #21)
|
data/README.md
CHANGED
data/lib/serverless_rack.rb
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
require 'rack'
|
|
8
8
|
require 'base64'
|
|
9
|
+
require 'stringio'
|
|
9
10
|
|
|
10
11
|
TEXT_MIME_TYPES = [
|
|
11
12
|
'application/json',
|
|
@@ -44,9 +45,11 @@ end
|
|
|
44
45
|
|
|
45
46
|
def parse_query_string(event)
|
|
46
47
|
if event.include? 'multiValueQueryStringParameters'
|
|
47
|
-
Rack::Utils.
|
|
48
|
+
Rack::Utils.unescape(
|
|
49
|
+
Rack::Utils.build_query(event['multiValueQueryStringParameters'] || {})
|
|
50
|
+
)
|
|
48
51
|
else
|
|
49
|
-
Rack::Utils.build_query(event['queryStringParameters'] || {})
|
|
52
|
+
Rack::Utils.unescape(Rack::Utils.build_query(event['queryStringParameters'] || {}))
|
|
50
53
|
end
|
|
51
54
|
end
|
|
52
55
|
|
|
@@ -60,13 +63,13 @@ end
|
|
|
60
63
|
|
|
61
64
|
def parse_headers(event)
|
|
62
65
|
if event.include? 'multiValueHeaders'
|
|
63
|
-
Rack::
|
|
66
|
+
Rack::Headers.new(
|
|
64
67
|
(event['multiValueHeaders'] || {}).transform_values do |value|
|
|
65
68
|
value.join("\n")
|
|
66
69
|
end
|
|
67
70
|
)
|
|
68
71
|
else
|
|
69
|
-
Rack::
|
|
72
|
+
Rack::Headers[event['headers'] || {}]
|
|
70
73
|
end
|
|
71
74
|
end
|
|
72
75
|
|
|
@@ -127,9 +130,50 @@ def text_mime_type?(headers:, text_mime_types:)
|
|
|
127
130
|
false
|
|
128
131
|
end
|
|
129
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
|
+
|
|
130
164
|
def format_body(body:, headers:, text_mime_types:)
|
|
131
165
|
response_data = ''
|
|
132
|
-
|
|
166
|
+
begin
|
|
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
|
|
174
|
+
ensure
|
|
175
|
+
body.close if body.respond_to?(:close)
|
|
176
|
+
end
|
|
133
177
|
|
|
134
178
|
return {} if response_data.empty?
|
|
135
179
|
|
|
@@ -150,6 +194,8 @@ def all_casings(input_string)
|
|
|
150
194
|
# Permute all casings of a given string.
|
|
151
195
|
# A pretty algoritm, via @Amber
|
|
152
196
|
# http://stackoverflow.com/questions/6792803/finding-all-possible-case-permutations-in-python
|
|
197
|
+
return enum_for(__method__, input_string) unless block_given?
|
|
198
|
+
|
|
153
199
|
if input_string.empty?
|
|
154
200
|
yield ''
|
|
155
201
|
else
|
|
@@ -168,32 +214,26 @@ def all_casings(input_string)
|
|
|
168
214
|
end
|
|
169
215
|
|
|
170
216
|
def format_split_headers(headers:)
|
|
171
|
-
|
|
172
|
-
|
|
217
|
+
# Rack::Headers will automatically lower-case new keys
|
|
218
|
+
# Use (and return) a regular hash literal instead
|
|
219
|
+
headers_hash = {}
|
|
173
220
|
|
|
174
221
|
# If there are headers multiple occurrences, e.g. Set-Cookie, create
|
|
175
222
|
# case-mutated variations in order to pass them through APIGW.
|
|
176
223
|
# This is a hack that's currently needed.
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
headers.delete(key)
|
|
183
|
-
|
|
184
|
-
all_casings(key) do |casing|
|
|
185
|
-
headers[casing] = values.shift
|
|
186
|
-
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
|
|
187
229
|
end
|
|
188
230
|
end
|
|
189
231
|
|
|
190
|
-
{ 'headers' =>
|
|
232
|
+
{ 'headers' => headers_hash }
|
|
191
233
|
end
|
|
192
234
|
|
|
193
235
|
def format_grouped_headers(headers:)
|
|
194
|
-
{ 'multiValueHeaders' => headers.transform_values
|
|
195
|
-
value.split("\n")
|
|
196
|
-
end }
|
|
236
|
+
{ 'multiValueHeaders' => headers.transform_values { |v| v.is_a?(Array) ? v : [v] } }
|
|
197
237
|
end
|
|
198
238
|
|
|
199
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
|