marlowe 3.0 → 3.1

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: 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