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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d054df889e1a091b14b03de69cd43fba9186fd0b7c126f036e32a7c581f230da
4
- data.tar.gz: f03682869870aafd564e76ad6d8ff54a88eeec164152dd6e1e0584348c57d518
3
+ metadata.gz: 44575605f8497a6bd758b5405661b31ef566f624520bee5f58525c1185206aa7
4
+ data.tar.gz: 811d8b5b2a4e52feb8676bd1f1444c7754ece0baf0ff001e20745d2872bdafa6
5
5
  SHA512:
6
- metadata.gz: ffa6d4107b258984e244d5fee0a0a2b870faee2d4b72fd3fd97cb2347ed40fba687426bfbcf106e5ce6cd9045e67842f1d5ffac2ef830b2ab4279c9f67d601e4
7
- data.tar.gz: 10e61fa0152cdbc561e9dfb09de252377228af59d1df691c2783ad9ba1a320f84843b616651dce5485be5079d85b518e202ef4375e82fff42111367ae0f3b11c
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
@@ -84,7 +84,7 @@ functions:
84
84
  handler: rack_adapter.handler
85
85
  events:
86
86
  - http: ANY /
87
- - http: ANY {proxy+}
87
+ - http: ANY /{proxy+}
88
88
  ```
89
89
 
90
90
  ### Gemfile
@@ -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.build_query(event['multiValueQueryStringParameters'] || {})
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::Utils::HeaderHash.new(
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::Utils::HeaderHash.new(event['headers'] || {})
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
- body.each { |part| response_data += part }
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
- headers = headers.to_hash
172
- keys = headers.keys
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
- keys.each do |key|
178
- values = headers[key].split("\n")
179
-
180
- next if values.size < 2
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' => headers }
232
+ { 'headers' => headers_hash }
191
233
  end
192
234
 
193
235
  def format_grouped_headers(headers:)
194
- { 'multiValueHeaders' => headers.transform_values do |value|
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:)
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'serverless-rack'
5
- s.version = '1.0.7'
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', '~> 2.0'
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: 1.0.7
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: 2021-04-25 00:00:00.000000000 Z
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: '2.0'
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: '2.0'
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.1.2
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