marlowe 3.0 → 3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5a38beee250c02c545fa9a16e99a7e32702f4e027e2d9b87bfee4911210d6f7e
4
- data.tar.gz: 3c4b0d3dddec1f5706076a36036fe1b1fcc26a4a662a7ce134fc4e7df7fa5579
3
+ metadata.gz: ab7ab600bebd938d83401763fdb4da4e46448cce69f2421e0e8e68dec967c289
4
+ data.tar.gz: 5b5a7f77d71cabe799fba50b54e5639c0f9e3e0fc75600b0c5cd486dab850d1f
5
5
  SHA512:
6
- metadata.gz: 1adb8585c41f04ae645af9080f97ae115d2977ed1e0fa0d2bace7b6b896b6dc3e9c10fca4938a40dcd7727a98a552312be9a514e883d48a0dd9058986b7b85ac
7
- data.tar.gz: 80bfa345158bcf410251861067b071bbef0362cccac7866c50febbf6b9db557498a6b561aed47b1e62ea0de5988d15a510c896ceca017cc8193c386b1f0a5cdd
6
+ metadata.gz: 630dea03e6bb4aed6e325baba7152a18c129c76d3ef2a029bdb7079432ff9b5bc8477742cb7d64c2e78718554eaf95bf8f9ce43aaaab66110c95e32616532f93
7
+ data.tar.gz: 6a6a17555432e901b74abbefb5f65385e79cb22c942e6605d5885e04366f246012ba8681ff74b30583bb808835782b9b8a380971bb7ca0d7b4b13ed324b37eb5
@@ -21,13 +21,13 @@ jobs:
21
21
  - '2.7'
22
22
  - '3.0'
23
23
  - '3.1'
24
+ - '3.2'
25
+ - '3.3'
24
26
  - head
25
27
  - jruby
26
28
  - jruby-head
27
29
  - truffleruby
28
30
  - truffleruby-head
29
- - truffleruby+graalvm
30
- - truffleruby+graalvm-head
31
31
  include:
32
32
  - ruby: head
33
33
  continue-on-error: true
@@ -36,7 +36,9 @@ jobs:
36
36
  - os: ubuntu-22.04
37
37
  ruby: head
38
38
  - os: ubuntu-22.04
39
- ruby: '3.1'
39
+ ruby: '3.2'
40
+ - os: ubuntu-22.04
41
+ ruby: '3.3'
40
42
 
41
43
  runs-on: ${{ matrix.os }}
42
44
 
@@ -52,4 +54,6 @@ jobs:
52
54
  - run: bundle exec ruby -S rake test --trace
53
55
  - run: bundle exec ruby -S appraisal install
54
56
  - run: bundle exec ruby -S appraisal rake test
57
+
55
58
  - run: bundle exec standardrb
59
+ if: ${{ matrix.ruby == '3.3' && matrix.os == 'ubuntu-22.04' }}
data/History.md CHANGED
@@ -1,17 +1,24 @@
1
- ### 3.0 / 2022-09-11
1
+ # History
2
+
3
+ ## 3.1 / 2024-02-29
4
+
5
+ - Fixed some noise in the tests as preparation for Rack 3.1.
6
+ - Updated dependencies.
7
+
8
+ ## 3.0 / 2022-09-11
2
9
 
3
10
  - Added a Faraday request middleware.
4
11
  - Replaced Hurley example with examples for the use of the Faraday
5
12
  middleware.
6
13
  - Added global Marlowe configuration.
7
14
 
8
- ### 2.1 / 2021-09-08
15
+ ## 2.1 / 2021-09-08
9
16
 
10
17
  - Allow the use of Ruby 3.
11
18
  - Switch to standardruby instead of rubocop.
12
19
  - Switch from Travis to Github Actions.
13
20
 
14
- ### 2.0 / 2016-11-16
21
+ ## 2.0 / 2016-11-16
15
22
 
16
23
  - Breaking change: the correlation header defaults to `X-Request-Id` instead of
17
24
  `Correlation-Id`.
@@ -22,21 +29,21 @@
22
29
  part of the response.
23
30
  - Marlowe is more configurable now.
24
31
 
25
- ### 1.0.3 / 2016-01-15
32
+ ## 1.0.3 / 2016-01-15
26
33
 
27
34
  - Update Readme example of using available formatted subclass.
28
35
  - Make the correlation header name configurable
29
36
 
30
- ### 1.0.2 / 2015-11-24
37
+ ## 1.0.2 / 2015-11-24
31
38
 
32
39
  - Add documentation for using Marlowe with [lograge][].
33
40
 
34
- ### 1.0.1 / 2015-10-20
41
+ ## 1.0.1 / 2015-10-20
35
42
 
36
43
  - Update gemspec with homepage
37
44
  - Update Rakefile
38
45
 
39
- ### 1.0.0 / 2015-10-16
46
+ ## 1.0.0 / 2015-10-16
40
47
 
41
48
  - Initial Commit
42
49
 
data/Rakefile CHANGED
@@ -28,19 +28,16 @@ spec = Hoe.spec "marlowe" do
28
28
  extra_dev_deps << ["appraisal", "~> 2.1"]
29
29
  extra_dev_deps << ["hoe-doofus", "~> 1.0"]
30
30
  extra_dev_deps << ["hoe-gemspec2", "~> 1.1"]
31
- extra_dev_deps << ["hoe-git", "~> 1.6"]
31
+ extra_dev_deps << ["hoe-git2", "~> 1.7"]
32
32
  extra_dev_deps << ["hoe-rubygems", "~> 1.0"]
33
33
  extra_dev_deps << ["minitest", "~> 5.4"]
34
34
  extra_dev_deps << ["minitest-autotest", "~> 1.0"]
35
- extra_dev_deps << ["minitest-bonus-assertions", "~> 3.0"]
36
35
  extra_dev_deps << ["minitest-focus", "~> 1.1"]
37
36
  extra_dev_deps << ["minitest-moar", "~> 0.0"]
38
37
  extra_dev_deps << ["rack-test", "~> 2.0"]
39
38
  extra_dev_deps << ["rake", ">= 10.0", "< 14"]
40
- extra_dev_deps << ["rdoc", ">= 4.2"]
41
39
  extra_dev_deps << ["standard", "~> 1.0"]
42
40
  extra_dev_deps << ["simplecov", "~> 0.21"]
43
- extra_dev_deps << ["psych", "~> 3.1"]
44
41
  end
45
42
 
46
43
  ENV["RUBYOPT"] = "-W0"
data/lib/marlowe.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Marlowe, a correlation id injector.
4
4
  module Marlowe
5
- VERSION = "3.0" # :nodoc:
5
+ VERSION = "3.1" # :nodoc:
6
6
 
7
7
  require "marlowe/config"
8
8
  require "marlowe/middleware"
@@ -9,3 +9,29 @@ require "minitest/focus"
9
9
  require "minitest/moar"
10
10
 
11
11
  require "marlowe"
12
+
13
+ RackV1 = Rack.release.start_with?("1.")
14
+
15
+ module NormalizeRackResponseHeaders
16
+ private
17
+
18
+ def has_header?(key)
19
+ if RackV1
20
+ last_response.header.key?(key)
21
+ else
22
+ last_response.has_header?(key)
23
+ end
24
+ end
25
+
26
+ def get_header(key)
27
+ if RackV1
28
+ last_response.header[key]
29
+ else
30
+ last_response.get_header(key)
31
+ end
32
+ end
33
+ end
34
+
35
+ class Minitest::Test
36
+ include NormalizeRackResponseHeaders
37
+ end
data/test/test_marlowe.rb CHANGED
@@ -29,75 +29,75 @@ class TestMarlowe < Minitest::Test
29
29
 
30
30
  def test_default_config_no_header_value
31
31
  get "/"
32
- assert last_response.header.key?("X-Request-Id")
33
- refute_empty last_response.header["X-Request-Id"]
34
- assert_equal last_response.header["X-Request-Id"], last_response.body
32
+ assert has_header?("X-Request-Id")
33
+ refute_empty get_header("X-Request-Id")
34
+ assert_equal get_header("X-Request-Id"), last_response.body
35
35
  end
36
36
 
37
37
  def test_default_config_with_header_value
38
38
  get "/", {}, {"HTTP_X_REQUEST_ID" => "testvalue"}
39
- assert last_response.header.key?("X-Request-Id")
40
- refute_empty last_response.header["X-Request-Id"]
41
- assert_equal last_response.header["X-Request-Id"], last_response.body
42
- assert_equal "testvalue", last_response.header["X-Request-Id"]
39
+ assert has_header?("X-Request-Id")
40
+ refute_empty get_header("X-Request-Id")
41
+ assert_equal get_header("X-Request-Id"), last_response.body
42
+ assert_equal "testvalue", get_header("X-Request-Id")
43
43
  end
44
44
 
45
45
  def test_header_config_no_header_value
46
46
  marlowe_options[:header] = "Correlation-Id"
47
47
  get "/"
48
- assert last_response.header.key?("Correlation-Id")
49
- refute_empty last_response.header["Correlation-Id"]
50
- assert_equal last_response.header["Correlation-Id"], last_response.body
48
+ assert has_header?("Correlation-Id")
49
+ refute_empty get_header("Correlation-Id")
50
+ assert_equal get_header("Correlation-Id"), last_response.body
51
51
  end
52
52
 
53
53
  def test_header_config_no_header_with_header_value
54
54
  marlowe_options[:header] = "Correlation-Id"
55
55
  get "/", {}, {"HTTP_CORRELATION_ID" => "testvalue"}
56
- assert last_response.header.key?("Correlation-Id")
57
- refute_empty last_response.header["Correlation-Id"]
58
- assert_equal last_response.header["Correlation-Id"], last_response.body
59
- assert_equal "testvalue", last_response.header["Correlation-Id"]
56
+ assert has_header?("Correlation-Id")
57
+ refute_empty get_header("Correlation-Id")
58
+ assert_equal get_header("Correlation-Id"), last_response.body
59
+ assert_equal "testvalue", get_header("Correlation-Id")
60
60
  end
61
61
 
62
62
  def test_handler_config_default_handler
63
63
  get "/", {}, {"HTTP_X_REQUEST_ID" => "test+value"}
64
- assert last_response.header.key?("X-Request-Id")
65
- refute_empty last_response.header["X-Request-Id"]
66
- assert_equal last_response.header["X-Request-Id"], last_response.body
67
- assert_equal "testvalue", last_response.header["X-Request-Id"]
64
+ assert has_header?("X-Request-Id")
65
+ refute_empty get_header("X-Request-Id")
66
+ assert_equal get_header("X-Request-Id"), last_response.body
67
+ assert_equal "testvalue", get_header("X-Request-Id")
68
68
  end
69
69
 
70
70
  def test_handler_config_with_simple_handler
71
71
  marlowe_options[:handler] = :simple
72
72
  get "/", {}, {"HTTP_X_REQUEST_ID" => "test+value"}
73
- assert last_response.header.key?("X-Request-Id")
74
- refute_empty last_response.header["X-Request-Id"]
75
- assert_equal last_response.header["X-Request-Id"], last_response.body
76
- assert_equal "test+value", last_response.header["X-Request-Id"]
73
+ assert has_header?("X-Request-Id")
74
+ refute_empty get_header("X-Request-Id")
75
+ assert_equal get_header("X-Request-Id"), last_response.body
76
+ assert_equal "test+value", get_header("X-Request-Id")
77
77
  end
78
78
 
79
79
  def test_handler_config_with_proc_handler
80
80
  marlowe_options[:handler] = ->(item) { item && item.reverse || SecureRandom.uuid }
81
81
  get "/", {}, {"HTTP_X_REQUEST_ID" => "test+value"}
82
- assert last_response.header.key?("X-Request-Id")
83
- refute_empty last_response.header["X-Request-Id"]
84
- assert_equal last_response.header["X-Request-Id"], last_response.body
85
- assert_equal "eulav+tset", last_response.header["X-Request-Id"]
82
+ assert has_header?("X-Request-Id")
83
+ refute_empty get_header("X-Request-Id")
84
+ assert_equal get_header("X-Request-Id"), last_response.body
85
+ assert_equal "eulav+tset", get_header("X-Request-Id")
86
86
  end
87
87
 
88
88
  def test_handler_config_with_proc_handler_returning_nil
89
89
  marlowe_options[:handler] = ->(_item) {}
90
90
  get "/", {}, {"HTTP_X_REQUEST_ID" => "test+value"}
91
- assert last_response.header.key?("X-Request-Id")
92
- refute_empty last_response.header["X-Request-Id"]
93
- assert_equal last_response.header["X-Request-Id"], last_response.body
94
- assert_match(/\A[-\w]+\z/, last_response.header["X-Request-Id"])
91
+ assert has_header?("X-Request-Id")
92
+ refute_empty get_header("X-Request-Id")
93
+ assert_equal get_header("X-Request-Id"), last_response.body
94
+ assert_match(/\A[-\w]+\z/, get_header("X-Request-Id"))
95
95
  end
96
96
 
97
97
  def test_return_config_false
98
98
  marlowe_options[:return] = false
99
99
  get "/"
100
- refute last_response.header.key?("X-Request-Id")
100
+ refute has_header?("X-Request-Id")
101
101
  assert_equal RequestStore[:correlation_id], last_response.body
102
102
  end
103
103
  end
@@ -35,75 +35,76 @@ class TestMarloweConfig < Minitest::Test
35
35
 
36
36
  def test_default_config_no_header_value
37
37
  get "/"
38
- assert last_response.header.key?("X-Request-Id")
39
- refute_empty last_response.header["X-Request-Id"]
40
- assert_equal last_response.header["X-Request-Id"], last_response.body
38
+
39
+ assert has_header?("X-Request-Id")
40
+ refute_empty get_header("X-Request-Id")
41
+ assert_equal get_header("X-Request-Id"), last_response.body
41
42
  end
42
43
 
43
44
  def test_default_config_with_header_value
44
45
  get "/", {}, {"HTTP_X_REQUEST_ID" => "testvalue"}
45
- assert last_response.header.key?("X-Request-Id")
46
- refute_empty last_response.header["X-Request-Id"]
47
- assert_equal last_response.header["X-Request-Id"], last_response.body
48
- assert_equal "testvalue", last_response.header["X-Request-Id"]
46
+ assert has_header?("X-Request-Id")
47
+ refute_empty get_header("X-Request-Id")
48
+ assert_equal get_header("X-Request-Id"), last_response.body
49
+ assert_equal "testvalue", get_header("X-Request-Id")
49
50
  end
50
51
 
51
52
  def test_header_config_no_header_value
52
53
  marlowe_options[:header] = "Correlation-Id"
53
54
  get "/"
54
- assert last_response.header.key?("Correlation-Id")
55
- refute_empty last_response.header["Correlation-Id"]
56
- assert_equal last_response.header["Correlation-Id"], last_response.body
55
+ assert has_header?("Correlation-Id")
56
+ refute_empty get_header("Correlation-Id")
57
+ assert_equal get_header("Correlation-Id"), last_response.body
57
58
  end
58
59
 
59
60
  def test_header_config_no_header_with_header_value
60
61
  marlowe_options[:header] = "Correlation-Id"
61
62
  get "/", {}, {"HTTP_CORRELATION_ID" => "testvalue"}
62
- assert last_response.header.key?("Correlation-Id")
63
- refute_empty last_response.header["Correlation-Id"]
64
- assert_equal last_response.header["Correlation-Id"], last_response.body
65
- assert_equal "testvalue", last_response.header["Correlation-Id"]
63
+ assert has_header?("Correlation-Id")
64
+ refute_empty get_header("Correlation-Id")
65
+ assert_equal get_header("Correlation-Id"), last_response.body
66
+ assert_equal "testvalue", get_header("Correlation-Id")
66
67
  end
67
68
 
68
69
  def test_handler_config_default_handler
69
70
  get "/", {}, {"HTTP_X_REQUEST_ID" => "test+value"}
70
- assert last_response.header.key?("X-Request-Id")
71
- refute_empty last_response.header["X-Request-Id"]
72
- assert_equal last_response.header["X-Request-Id"], last_response.body
73
- assert_equal "testvalue", last_response.header["X-Request-Id"]
71
+ assert has_header?("X-Request-Id")
72
+ refute_empty get_header("X-Request-Id")
73
+ assert_equal get_header("X-Request-Id"), last_response.body
74
+ assert_equal "testvalue", get_header("X-Request-Id")
74
75
  end
75
76
 
76
77
  def test_handler_config_with_simple_handler
77
78
  marlowe_options[:handler] = :simple
78
79
  get "/", {}, {"HTTP_X_REQUEST_ID" => "test+value"}
79
- assert last_response.header.key?("X-Request-Id")
80
- refute_empty last_response.header["X-Request-Id"]
81
- assert_equal last_response.header["X-Request-Id"], last_response.body
82
- assert_equal "test+value", last_response.header["X-Request-Id"]
80
+ assert has_header?("X-Request-Id")
81
+ refute_empty get_header("X-Request-Id")
82
+ assert_equal get_header("X-Request-Id"), last_response.body
83
+ assert_equal "test+value", get_header("X-Request-Id")
83
84
  end
84
85
 
85
86
  def test_handler_config_with_proc_handler
86
87
  marlowe_options[:handler] = ->(item) { item && item.reverse || SecureRandom.uuid }
87
88
  get "/", {}, {"HTTP_X_REQUEST_ID" => "test+value"}
88
- assert last_response.header.key?("X-Request-Id")
89
- refute_empty last_response.header["X-Request-Id"]
90
- assert_equal last_response.header["X-Request-Id"], last_response.body
91
- assert_equal "eulav+tset", last_response.header["X-Request-Id"]
89
+ assert has_header?("X-Request-Id")
90
+ refute_empty get_header("X-Request-Id")
91
+ assert_equal get_header("X-Request-Id"), last_response.body
92
+ assert_equal "eulav+tset", get_header("X-Request-Id")
92
93
  end
93
94
 
94
95
  def test_handler_config_with_proc_handler_returning_nil
95
96
  marlowe_options[:handler] = ->(_item) {}
96
97
  get "/", {}, {"HTTP_X_REQUEST_ID" => "test+value"}
97
- assert last_response.header.key?("X-Request-Id")
98
- refute_empty last_response.header["X-Request-Id"]
99
- assert_equal last_response.header["X-Request-Id"], last_response.body
100
- assert_match(/\A[-\w]+\z/, last_response.header["X-Request-Id"])
98
+ assert has_header?("X-Request-Id")
99
+ refute_empty get_header("X-Request-Id")
100
+ assert_equal get_header("X-Request-Id"), last_response.body
101
+ assert_match(/\A[-\w]+\z/, get_header("X-Request-Id"))
101
102
  end
102
103
 
103
104
  def test_return_config_false
104
105
  marlowe_options[:return] = false
105
106
  get "/"
106
- refute last_response.header.key?("X-Request-Id")
107
+ refute has_header?("X-Request-Id")
107
108
  assert_equal RequestStore[:correlation_id], last_response.body
108
109
  end
109
110
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: marlowe
3
3
  version: !ruby/object:Gem::Version
4
- version: '3.0'
4
+ version: '3.1'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Trevor Oke
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-09-12 00:00:00.000000000 Z
12
+ date: 2024-02-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: request_store
@@ -51,14 +51,14 @@ dependencies:
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '5.16'
54
+ version: '5.22'
55
55
  type: :development
56
56
  prerelease: false
57
57
  version_requirements: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '5.16'
61
+ version: '5.22'
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: appraisal
64
64
  requirement: !ruby/object:Gem::Requirement
@@ -102,19 +102,19 @@ dependencies:
102
102
  - !ruby/object:Gem::Version
103
103
  version: '1.1'
104
104
  - !ruby/object:Gem::Dependency
105
- name: hoe-git
105
+ name: hoe-git2
106
106
  requirement: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '1.6'
110
+ version: '1.7'
111
111
  type: :development
112
112
  prerelease: false
113
113
  version_requirements: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '1.6'
117
+ version: '1.7'
118
118
  - !ruby/object:Gem::Dependency
119
119
  name: hoe-rubygems
120
120
  requirement: !ruby/object:Gem::Requirement
@@ -143,20 +143,6 @@ dependencies:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
145
  version: '1.0'
146
- - !ruby/object:Gem::Dependency
147
- name: minitest-bonus-assertions
148
- requirement: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: '3.0'
153
- type: :development
154
- prerelease: false
155
- version_requirements: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - "~>"
158
- - !ruby/object:Gem::Version
159
- version: '3.0'
160
146
  - !ruby/object:Gem::Dependency
161
147
  name: minitest-focus
162
148
  requirement: !ruby/object:Gem::Requirement
@@ -219,20 +205,6 @@ dependencies:
219
205
  - - "<"
220
206
  - !ruby/object:Gem::Version
221
207
  version: '14'
222
- - !ruby/object:Gem::Dependency
223
- name: rdoc
224
- requirement: !ruby/object:Gem::Requirement
225
- requirements:
226
- - - ">="
227
- - !ruby/object:Gem::Version
228
- version: '4.2'
229
- type: :development
230
- prerelease: false
231
- version_requirements: !ruby/object:Gem::Requirement
232
- requirements:
233
- - - ">="
234
- - !ruby/object:Gem::Version
235
- version: '4.2'
236
208
  - !ruby/object:Gem::Dependency
237
209
  name: standard
238
210
  requirement: !ruby/object:Gem::Requirement
@@ -262,33 +234,39 @@ dependencies:
262
234
  - !ruby/object:Gem::Version
263
235
  version: '0.21'
264
236
  - !ruby/object:Gem::Dependency
265
- name: psych
237
+ name: rdoc
266
238
  requirement: !ruby/object:Gem::Requirement
267
239
  requirements:
268
- - - "~>"
240
+ - - ">="
241
+ - !ruby/object:Gem::Version
242
+ version: '4.0'
243
+ - - "<"
269
244
  - !ruby/object:Gem::Version
270
- version: '3.1'
245
+ version: '7'
271
246
  type: :development
272
247
  prerelease: false
273
248
  version_requirements: !ruby/object:Gem::Requirement
274
249
  requirements:
275
- - - "~>"
250
+ - - ">="
276
251
  - !ruby/object:Gem::Version
277
- version: '3.1'
252
+ version: '4.0'
253
+ - - "<"
254
+ - !ruby/object:Gem::Version
255
+ version: '7'
278
256
  - !ruby/object:Gem::Dependency
279
257
  name: hoe
280
258
  requirement: !ruby/object:Gem::Requirement
281
259
  requirements:
282
260
  - - "~>"
283
261
  - !ruby/object:Gem::Version
284
- version: '3.25'
262
+ version: '4.2'
285
263
  type: :development
286
264
  prerelease: false
287
265
  version_requirements: !ruby/object:Gem::Requirement
288
266
  requirements:
289
267
  - - "~>"
290
268
  - !ruby/object:Gem::Version
291
- version: '3.25'
269
+ version: '4.2'
292
270
  description: |-
293
271
  {Marlowe}[https://github.com/KineticCafe/marlowe] is a Rack middleware that
294
272
  extracts or creates a request ID using a pre-defined header, permitting request
@@ -354,7 +332,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
354
332
  - !ruby/object:Gem::Version
355
333
  version: '0'
356
334
  requirements: []
357
- rubygems_version: 3.3.7
335
+ rubygems_version: 3.4.10
358
336
  signing_key:
359
337
  specification_version: 4
360
338
  summary: "{Marlowe}[https://github.com/KineticCafe/marlowe] is a Rack middleware that