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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 608b6797822f34511d85d16879a2162849824d8fecd9be3b58d3cf6edf6fe2f0
4
- data.tar.gz: e2a981df1ac80fc775cf379405f84158a3f5b409b71db9459abeede0b7b0a75c
3
+ metadata.gz: 44575605f8497a6bd758b5405661b31ef566f624520bee5f58525c1185206aa7
4
+ data.tar.gz: 811d8b5b2a4e52feb8676bd1f1444c7754ece0baf0ff001e20745d2872bdafa6
5
5
  SHA512:
6
- metadata.gz: f5d701de917f422e78cb9a31e7f2c507ec15cd4bb7b214b20d1d2f099176f2c2ca3e613fbfbc8cb926d2ab8f020c97083383cd7f312d887f94aa3937bdfb7eda
7
- data.tar.gz: 133efab6c97a7e5ef83df340ecd4a7156698fbd5b78fe17736d33c48e55da6e09a2fafd442e5628e3ff2630906fb8db6bf36efd27fb41cafa12b2e3f49e320b7
6
+ metadata.gz: f68dd626d7ad70481437cb47694f542c95afade328cdf67027c92dff6be035bb39f00e21c4336fa5bced3889029231f35dd274c9c259b60a277dd44aefcbda7a
7
+ data.tar.gz: 17f20b14150cb6260ac11185519a4810cdd4f587282a9c8f5aeb47080a262cc8027886d0cbfd509b887473e1a652a01c53105fb73b2c6ebee833a419f566f3e8
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ # 2.0.0
2
+
3
+ - Add support for Rack v3 (#44)
4
+
5
+ _Lissa Moriarty_, _Matthew Pickin_
6
+
1
7
  # 1.0.8
2
8
 
3
9
  - Add types to command arguments to avoid deprecation warnings (#25)
@@ -63,13 +63,13 @@ end
63
63
 
64
64
  def parse_headers(event)
65
65
  if event.include? 'multiValueHeaders'
66
- Rack::Utils::HeaderHash.new(
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::Utils::HeaderHash.new(event['headers'] || {})
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 { |part| response_data += part }
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
- headers = headers.to_hash
179
- keys = headers.keys
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
- keys.each do |key|
185
- values = headers[key].split("\n")
186
-
187
- next if values.size < 2
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' => headers }
232
+ { 'headers' => headers_hash }
198
233
  end
199
234
 
200
235
  def format_grouped_headers(headers:)
201
- { 'multiValueHeaders' => headers.transform_values do |value|
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:)
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'serverless-rack'
5
- s.version = '1.0.8'
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.8
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: 2022-09-27 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.2.32
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