pact_broker 2.113.0 → 2.113.2
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 +19 -0
- data/Gemfile +4 -4
- data/lib/pact_broker/api/resources/badge.rb +2 -2
- data/lib/pact_broker/api/resources/badge_methods.rb +1 -1
- data/lib/pact_broker/api/resources/error_handling_methods.rb +2 -2
- data/lib/pact_broker/api/resources/error_response_generator.rb +2 -2
- data/lib/pact_broker/api/resources/pact_resource_methods.rb +1 -1
- data/lib/pact_broker/api/resources/pacticipant_resource_methods.rb +1 -1
- data/lib/pact_broker/api/resources/provider_states.rb +1 -1
- data/lib/pact_broker/api/resources/publish_contracts.rb +1 -1
- data/lib/pact_broker/api/resources/webhook_execution.rb +1 -1
- data/lib/pact_broker/app.rb +1 -1
- data/lib/pact_broker/diagnostic/app.rb +2 -2
- data/lib/pact_broker/test/test_data_builder.rb +1 -1
- data/lib/pact_broker/ui/controllers/base_controller.rb +1 -0
- data/lib/pact_broker/ui/controllers/dashboard.rb +1 -1
- data/lib/pact_broker/ui/controllers/index.rb +1 -1
- data/lib/pact_broker/version.rb +1 -1
- data/lib/pact_broker/webhooks/webhook_request_template.rb +4 -3
- data/lib/pact_broker/webmachine.rb +2 -3
- data/lib/rack/pact_broker/add_cache_header.rb +1 -1
- data/lib/rack/pact_broker/add_pact_broker_version_header.rb +1 -1
- data/lib/rack/pact_broker/add_vary_header.rb +1 -1
- data/lib/rack/pact_broker/cascade.rb +2 -2
- data/lib/rack/pact_broker/invalid_uri_protection.rb +1 -1
- data/lib/rack/pact_broker/request_target.rb +2 -2
- data/lib/webmachine/adapters/rack3_adapter.rb +178 -0
- data/lib/webmachine/adapters.rb +9 -0
- data/lib/webmachine/describe_routes.rb +4 -4
- data/lib/webmachine/render_error_monkey_patch.rb +1 -1
- data/pact_broker.gemspec +2 -3
- metadata +15 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae37811c3c1f10c9ce20490a05dd1d4683c3c071c3529877d14fde1c1dcb9d77
|
4
|
+
data.tar.gz: 437dabe157b2b2644edbbfdbd71d060f78aa449cfdff717552e074db0a69fa25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff2279ac36ad3f8de1c05a7b059bca6b207399613f9920303d69f03865a3727cde1b9eaacf765c7e2c3c4ad6e0db7bd927c1f45464feeac0d77193bc32f1e013
|
7
|
+
data.tar.gz: 851dd199c1085589350e676cb03aa6efa06915dbea1cb574d515a66a52e59039f6faab1a962dd16605427b0f62fb845d45d2c57bc221fac8ae8eb6881016bbd0
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
<a name="v2.113.2"></a>
|
2
|
+
### v2.113.2 (2025-03-05)
|
3
|
+
|
4
|
+
#### Bug Fixes
|
5
|
+
|
6
|
+
* downcase Content-Type header ([6eebfbdf](/../../commit/6eebfbdf))
|
7
|
+
* downcase X-Pact-Broker-Version header ([8dfb3ac2](/../../commit/8dfb3ac2))
|
8
|
+
* downcase Cache-Control header ([6ceae489](/../../commit/6ceae489))
|
9
|
+
* downcase Vary header ([a43416a3](/../../commit/a43416a3))
|
10
|
+
* add webmachine monkey patch to exclude webrick default load ([ef674d37](/../../commit/ef674d37))
|
11
|
+
|
12
|
+
<a name="v2.113.1"></a>
|
13
|
+
### v2.113.1 (2025-02-20)
|
14
|
+
|
15
|
+
#### Bug Fixes
|
16
|
+
|
17
|
+
* Update openapi_first and use it's coverage thing (#783) ([b3da850b](/../../commit/b3da850b))
|
18
|
+
* incorrect ProviderStates policy name. (#782) ([bddfd2d0](/../../commit/bddfd2d0))
|
19
|
+
|
1
20
|
<a name="v2.113.0"></a>
|
2
21
|
### v2.113.0 (2025-02-13)
|
3
22
|
|
data/Gemfile
CHANGED
@@ -7,8 +7,8 @@ gem "rake", "~>13.0"
|
|
7
7
|
gem "sqlite3", ">=2.0.0"
|
8
8
|
gem "conventional-changelog", "~>1.3"
|
9
9
|
gem "bump", "~> 0.5"
|
10
|
-
gem "padrino-core", ">= 0.
|
11
|
-
gem "
|
10
|
+
gem "padrino-core", ">= 0.16.0.pre3", require: false
|
11
|
+
gem "rackup", "~> 2.2"
|
12
12
|
|
13
13
|
group :development do
|
14
14
|
gem "pry-byebug"
|
@@ -29,11 +29,11 @@ group :test do
|
|
29
29
|
gem "database_cleaner", "~>1.8", ">= 1.8.1"
|
30
30
|
gem "timecop", "~> 0.9"
|
31
31
|
gem "faraday", "~>2.0"
|
32
|
-
gem "docker-api", "~>
|
32
|
+
gem "docker-api", "~>2.0"
|
33
33
|
gem "approvals", ">=0.0.24", "<1.0.0"
|
34
34
|
gem "tzinfo", "~>2.0"
|
35
35
|
gem "faraday-retry", "~>2.0"
|
36
|
-
gem "openapi_first", "
|
36
|
+
gem "openapi_first", ">= 2.3", "< 3"
|
37
37
|
end
|
38
38
|
|
39
39
|
group :pg, optional: true do
|
@@ -18,12 +18,12 @@ module PactBroker
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def to_svg
|
21
|
-
response.headers["
|
21
|
+
response.headers["cache-control"] = "no-cache"
|
22
22
|
comment + badge_service.pact_verification_badge(pact, label, initials, pseudo_branch_verification_status, tags)
|
23
23
|
end
|
24
24
|
|
25
25
|
def moved_temporarily?
|
26
|
-
response.headers["
|
26
|
+
response.headers["cache-control"] = "no-cache"
|
27
27
|
badge_service.pact_verification_badge_url(pact, label, initials, pseudo_branch_verification_status, tags)
|
28
28
|
end
|
29
29
|
|
@@ -32,13 +32,13 @@ module PactBroker
|
|
32
32
|
# @param [String] type
|
33
33
|
# @param [Integer] status
|
34
34
|
def set_json_error_message(detail, title: "Server error", type: "server-error", status: 500)
|
35
|
-
response.headers["
|
35
|
+
response.headers["content-type"] = error_response_content_type
|
36
36
|
response.body = error_response_body(detail, title, type, status)
|
37
37
|
end
|
38
38
|
|
39
39
|
# @param [Hash,Dry::Validation::MessageSet] errors
|
40
40
|
def set_json_validation_error_messages(errors)
|
41
|
-
response.headers["
|
41
|
+
response.headers["content-type"] = error_response_content_type
|
42
42
|
response.body = validation_errors_response_body(errors)
|
43
43
|
end
|
44
44
|
|
@@ -68,9 +68,9 @@ module PactBroker
|
|
68
68
|
|
69
69
|
private_class_method def self.headers(env)
|
70
70
|
if problem_json?(env)
|
71
|
-
{ "
|
71
|
+
{ "content-type" => "application/problem+json;charset=utf-8" }
|
72
72
|
else
|
73
|
-
{ "
|
73
|
+
{ "content-type" => "application/hal+json;charset=utf-8" }
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
@@ -8,7 +8,7 @@ module PactBroker
|
|
8
8
|
messages = pacticipant_service.messages_for_potential_duplicate_pacticipants pacticipant_names, base_url
|
9
9
|
if messages.any?
|
10
10
|
response.body = messages.join("\n")
|
11
|
-
response.headers["
|
11
|
+
response.headers["content-type"] = "text/plain"
|
12
12
|
end
|
13
13
|
messages.any?
|
14
14
|
else
|
@@ -97,7 +97,7 @@ module PactBroker
|
|
97
97
|
contracts: conflict_notices.select(&:error?).collect(&:text)
|
98
98
|
}
|
99
99
|
}.to_json
|
100
|
-
response.headers["
|
100
|
+
response.headers["content-type"] = "application/json;charset=utf-8"
|
101
101
|
end
|
102
102
|
|
103
103
|
def conflict_notices
|
@@ -21,7 +21,7 @@ module PactBroker
|
|
21
21
|
|
22
22
|
def process_post
|
23
23
|
webhook_execution_result = webhook_trigger_service.test_execution(webhook, webhook_execution_configuration.webhook_context, webhook_execution_configuration)
|
24
|
-
response.headers["
|
24
|
+
response.headers["content-type"] = "application/hal+json;charset=utf-8"
|
25
25
|
response.body = post_response_body(webhook_execution_result)
|
26
26
|
true
|
27
27
|
end
|
data/lib/pact_broker/app.rb
CHANGED
@@ -197,7 +197,7 @@ module PactBroker
|
|
197
197
|
@app_builder.use Rack::PactBroker::AddPactBrokerVersionHeader
|
198
198
|
@app_builder.use Rack::PactBroker::AddVaryHeader
|
199
199
|
@app_builder.use Rack::Static, :urls => ["/stylesheets", "/css", "/fonts", "/js", "/javascripts", "/images"], :root => PactBroker.project_root.join("public")
|
200
|
-
@app_builder.use Rack::Static, :urls => ["/favicon.ico"], :root => PactBroker.project_root.join("public/images"), header_rules: [[:all, {"
|
200
|
+
@app_builder.use Rack::Static, :urls => ["/favicon.ico"], :root => PactBroker.project_root.join("public/images"), header_rules: [[:all, {"content-type" => "image/x-icon"}]]
|
201
201
|
@app_builder.use Rack::PactBroker::AddCacheHeader
|
202
202
|
@app_builder.use Rack::PactBroker::ConvertFileExtensionToAcceptHeader
|
203
203
|
# Rack::PactBroker::SetBaseUrl needs to be before the Rack::PactBroker::HalBrowserRedirect
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require "pact_broker/diagnostic/resources/heartbeat"
|
2
2
|
require "pact_broker/diagnostic/resources/dependencies"
|
3
|
-
require "webmachine/adapters/
|
3
|
+
require "webmachine/adapters/rack3_adapter"
|
4
4
|
|
5
5
|
module PactBroker
|
6
6
|
module Diagnostic
|
@@ -27,7 +27,7 @@ module PactBroker
|
|
27
27
|
end
|
28
28
|
|
29
29
|
app.configure do |config|
|
30
|
-
config.adapter = :
|
30
|
+
config.adapter = :Rack3Mapped
|
31
31
|
end
|
32
32
|
|
33
33
|
app.adapter
|
@@ -362,7 +362,7 @@ module PactBroker
|
|
362
362
|
params[:events] || [{ name: PactBroker::Webhooks::WebhookEvent::DEFAULT_EVENT_NAME }]
|
363
363
|
end
|
364
364
|
events = event_params.collect{ |e| PactBroker::Webhooks::WebhookEvent.new(e) }
|
365
|
-
template_params = { method: "POST", url: "http://example.org", headers: {"
|
365
|
+
template_params = { method: "POST", url: "http://example.org", headers: {"content-type" => "application/json"}, username: params[:username], password: params[:password] }
|
366
366
|
request = PactBroker::Webhooks::WebhookRequestTemplate.new(template_params.merge(params))
|
367
367
|
new_webhook = PactBroker::Domain::Webhook.new(
|
368
368
|
request: request,
|
@@ -70,7 +70,7 @@ module PactBroker
|
|
70
70
|
private
|
71
71
|
|
72
72
|
def set_headers
|
73
|
-
response.headers["
|
73
|
+
response.headers["cache-control"] = "no-cache, no-store, must-revalidate"
|
74
74
|
response.headers["Pragma"] = "no-cache"
|
75
75
|
response.headers["Expires"] = "0"
|
76
76
|
end
|
@@ -55,7 +55,7 @@ module PactBroker
|
|
55
55
|
private
|
56
56
|
|
57
57
|
def set_headers
|
58
|
-
response.headers["
|
58
|
+
response.headers["cache-control"] = "no-cache, no-store, must-revalidate"
|
59
59
|
response.headers["Pragma"] = "no-cache"
|
60
60
|
response.headers["Expires"] = "0"
|
61
61
|
end
|
data/lib/pact_broker/version.rb
CHANGED
@@ -24,7 +24,8 @@ module PactBroker
|
|
24
24
|
attributes.each do | (name, value) |
|
25
25
|
instance_variable_set("@#{name}", value) if respond_to?(name)
|
26
26
|
end
|
27
|
-
@headers = Rack::
|
27
|
+
@headers = Rack::Headers.new
|
28
|
+
@headers.merge!(attributes[:headers]) if attributes[:headers]
|
28
29
|
end
|
29
30
|
|
30
31
|
def build(template_params, user_agent: nil, disable_ssl_verification: false, cert_store: nil)
|
@@ -59,7 +60,7 @@ module PactBroker
|
|
59
60
|
end
|
60
61
|
|
61
62
|
def headers= headers
|
62
|
-
@headers
|
63
|
+
@headers.replace(headers)
|
63
64
|
end
|
64
65
|
|
65
66
|
def uses_parameter?(parameter_name)
|
@@ -114,7 +115,7 @@ module PactBroker
|
|
114
115
|
end
|
115
116
|
|
116
117
|
def build_headers(template_params)
|
117
|
-
headers.each_with_object(Rack::
|
118
|
+
headers.each_with_object(Rack::Headers.new) do | (key, value), new_headers |
|
118
119
|
new_headers[key] = build_string(value, template_params)
|
119
120
|
end
|
120
121
|
end
|
@@ -1,10 +1,9 @@
|
|
1
1
|
require "webmachine"
|
2
2
|
require "webmachine/application_monkey_patch"
|
3
|
-
require "webmachine/adapters/
|
3
|
+
require "webmachine/adapters/rack3_adapter"
|
4
4
|
require "webmachine/application_monkey_patch"
|
5
5
|
require "webmachine/render_error_monkey_patch"
|
6
6
|
|
7
|
-
|
8
7
|
module Webmachine
|
9
8
|
def self.build_rack_api(application_context)
|
10
9
|
api = Webmachine::Application.new do |app|
|
@@ -14,7 +13,7 @@ module Webmachine
|
|
14
13
|
api.application_context = application_context
|
15
14
|
|
16
15
|
api.configure do |config|
|
17
|
-
config.adapter = :
|
16
|
+
config.adapter = :Rack3Mapped
|
18
17
|
end
|
19
18
|
|
20
19
|
api.adapter
|
@@ -18,7 +18,7 @@ module Rack
|
|
18
18
|
module PactBroker
|
19
19
|
class Cascade
|
20
20
|
# deprecated, no longer used
|
21
|
-
NotFound = [404, {
|
21
|
+
NotFound = [404, { "content-type" => "text/plain" }, []]
|
22
22
|
|
23
23
|
# An array of applications to try in order.
|
24
24
|
attr_reader :apps
|
@@ -41,7 +41,7 @@ module Rack
|
|
41
41
|
# cascading, try the next app. If all responses require cascading,
|
42
42
|
# return the response from the last app.
|
43
43
|
def call(env)
|
44
|
-
return [404, {
|
44
|
+
return [404, { "content-type" => "text/plain" }, []] if @apps.empty?
|
45
45
|
result = nil
|
46
46
|
last_body = nil
|
47
47
|
|
@@ -20,7 +20,7 @@ module Rack
|
|
20
20
|
private
|
21
21
|
|
22
22
|
def body_is_json(env)
|
23
|
-
env["
|
23
|
+
env["content-type"]&.include?("json")
|
24
24
|
end
|
25
25
|
|
26
26
|
def explicit_request_for_api(env)
|
@@ -32,7 +32,7 @@ module Rack
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def body_is_api_content_type(env)
|
35
|
-
is_api_content_type((env["
|
35
|
+
is_api_content_type((env["content-type"]&.downcase) || "")
|
36
36
|
end
|
37
37
|
|
38
38
|
def is_api_content_type(header)
|
@@ -0,0 +1,178 @@
|
|
1
|
+
# Taken from https://github.com/webmachine/webmachine-ruby/blob/master/lib/webmachine/adapters/rack.rb
|
2
|
+
|
3
|
+
require "webmachine/adapter"
|
4
|
+
require "rack"
|
5
|
+
require "webmachine/constants"
|
6
|
+
require "webmachine/headers"
|
7
|
+
require "webmachine/request"
|
8
|
+
require "webmachine/response"
|
9
|
+
require "webmachine/version"
|
10
|
+
require "webmachine/chunked_body"
|
11
|
+
|
12
|
+
module Webmachine
|
13
|
+
module Adapters
|
14
|
+
class Rack3 < Adapter
|
15
|
+
# Used to override default Rack server options (useful in testing)
|
16
|
+
DEFAULT_OPTIONS = {}
|
17
|
+
|
18
|
+
REQUEST_URI = "REQUEST_URI".freeze
|
19
|
+
RACK_VERSION = ::Rack::RELEASE.match(/^(\d+\.\d+)/)[1]
|
20
|
+
VERSION_STRING = "#{Webmachine::SERVER_STRING} Rack/#{RACK_VERSION}".freeze
|
21
|
+
NEWLINE = "\n".freeze
|
22
|
+
|
23
|
+
# Start the Rack adapter
|
24
|
+
def run
|
25
|
+
options = DEFAULT_OPTIONS.merge({
|
26
|
+
app: self,
|
27
|
+
Port: application.configuration.port,
|
28
|
+
Host: application.configuration.ip
|
29
|
+
}).merge(application.configuration.adapter_options)
|
30
|
+
|
31
|
+
@server = ::Rack::Server.new(options)
|
32
|
+
@server.start
|
33
|
+
end
|
34
|
+
|
35
|
+
# Handles a Rack-based request.
|
36
|
+
# @param [Hash] env the Rack environment
|
37
|
+
def call(env)
|
38
|
+
headers = Webmachine::Headers.from_cgi(env)
|
39
|
+
|
40
|
+
rack_req = ::Rack::Request.new env
|
41
|
+
request = build_webmachine_request(rack_req, headers)
|
42
|
+
|
43
|
+
response = Webmachine::Response.new
|
44
|
+
application.dispatcher.dispatch(request, response)
|
45
|
+
|
46
|
+
response.headers[SERVER] = VERSION_STRING
|
47
|
+
|
48
|
+
rack_body =
|
49
|
+
case response.body
|
50
|
+
when String # Strings are enumerable in ruby 1.8
|
51
|
+
[response.body]
|
52
|
+
else
|
53
|
+
if (io_body = IO.try_convert(response.body))
|
54
|
+
io_body
|
55
|
+
elsif response.body.respond_to?(:call)
|
56
|
+
response.body
|
57
|
+
elsif response.body.respond_to?(:each)
|
58
|
+
response.body
|
59
|
+
else
|
60
|
+
[response.body.to_s]
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
rack_res = ::Rack::Response.new(rack_body, response.code, response.headers)
|
65
|
+
rack_res.finish
|
66
|
+
end
|
67
|
+
|
68
|
+
protected
|
69
|
+
|
70
|
+
def routing_tokens(_rack_req)
|
71
|
+
nil # no-op for default, un-mapped rack adapter
|
72
|
+
end
|
73
|
+
|
74
|
+
def base_uri(_rack_req)
|
75
|
+
nil # no-op for default, un-mapped rack adapter
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def build_webmachine_request(rack_req, headers)
|
81
|
+
RackRequest.new(rack_req.request_method,
|
82
|
+
rack_req.url,
|
83
|
+
headers,
|
84
|
+
RequestBody.new(rack_req),
|
85
|
+
routing_tokens(rack_req),
|
86
|
+
base_uri(rack_req),
|
87
|
+
rack_req.env)
|
88
|
+
end
|
89
|
+
|
90
|
+
class RackRequest < Webmachine::Request
|
91
|
+
attr_reader :env
|
92
|
+
|
93
|
+
# Yeah, Rubocop, piss off!
|
94
|
+
# rubocop:disable ParameterLists
|
95
|
+
def initialize(method, uri, headers, body, routing_tokens, base_uri, env)
|
96
|
+
super(method, uri, headers, body, routing_tokens, base_uri)
|
97
|
+
@env = env
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
# Wraps the Rack input so it can be treated like a String or
|
102
|
+
# Enumerable.
|
103
|
+
# @api private
|
104
|
+
class RequestBody
|
105
|
+
# @param [Rack::Request] request the Rack request
|
106
|
+
def initialize(request)
|
107
|
+
@request = request
|
108
|
+
end
|
109
|
+
|
110
|
+
# Rack Servers differ in the way you can access their request bodys.
|
111
|
+
# While some allow you to directly get a Ruby IO object others don't.
|
112
|
+
# You have to check the methods they expose, like #gets, #read, #each, #rewind and maybe others.
|
113
|
+
# See: https://github.com/rack/rack/blob/rack-1.5/lib/rack/lint.rb#L296
|
114
|
+
# @return [IO] the request body
|
115
|
+
def to_io
|
116
|
+
@request.body
|
117
|
+
end
|
118
|
+
|
119
|
+
# Converts the body to a String so you can work with the entire
|
120
|
+
# thing.
|
121
|
+
# @return [String] the request body as a string
|
122
|
+
def to_s
|
123
|
+
if @value
|
124
|
+
@value.join
|
125
|
+
elsif @request.body.respond_to?(:to_ary)
|
126
|
+
@request.body.to_ary.join
|
127
|
+
elsif @request.body.respond_to?(:read)
|
128
|
+
@request.body.rewind if @request.body.respond_to?(:rewind)
|
129
|
+
@request.body.read
|
130
|
+
else
|
131
|
+
@request.body&.to_s || ""
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
# Iterates over the body in chunks. If the body has previously
|
136
|
+
# been read, this method can be called again and get the same
|
137
|
+
# sequence of chunks.
|
138
|
+
# @yield [chunk]
|
139
|
+
# @yieldparam [String] chunk a chunk of the request body
|
140
|
+
def each
|
141
|
+
if @value
|
142
|
+
@value.each { |chunk| yield chunk }
|
143
|
+
elsif @request.body.respond_to?(:each)
|
144
|
+
@value = []
|
145
|
+
@request.body.each { |chunk|
|
146
|
+
@value << chunk
|
147
|
+
yield chunk
|
148
|
+
}
|
149
|
+
elsif @request.body.respond_to?(:to_ary)
|
150
|
+
@value = @request.body.to_ary
|
151
|
+
@value.each { |chunk| yield chunk }
|
152
|
+
else
|
153
|
+
yield @request.body
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end # class RequestBody
|
157
|
+
end # class Rack
|
158
|
+
|
159
|
+
class Rack3Mapped < Rack3
|
160
|
+
protected
|
161
|
+
|
162
|
+
def routing_tokens(rack_req)
|
163
|
+
routing_match = rack_req.path_info.match(Webmachine::Request::ROUTING_PATH_MATCH)
|
164
|
+
routing_path = routing_match ? routing_match[1] : ""
|
165
|
+
routing_path.split(SLASH)
|
166
|
+
end
|
167
|
+
|
168
|
+
def base_uri(rack_req)
|
169
|
+
# rack SCRIPT_NAME env var doesn't end with "/". This causes weird
|
170
|
+
# behavour when URI.join concatenates URI components in
|
171
|
+
# Webmachine::Decision::Flow#n11
|
172
|
+
script_name = rack_req.script_name + SLASH
|
173
|
+
URI.join(rack_req.base_url, script_name)
|
174
|
+
end
|
175
|
+
end # class RackMapped
|
176
|
+
|
177
|
+
end # module Adapters
|
178
|
+
end # module Webmachine
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require "webmachine/adapters/lazy_request_body"
|
2
|
+
# require "webmachine/adapters/webrick" # Commenting out this line as our monkey patch
|
3
|
+
|
4
|
+
module Webmachine
|
5
|
+
# Contains classes and modules that connect Webmachine to Ruby
|
6
|
+
# application servers.
|
7
|
+
module Adapters
|
8
|
+
end
|
9
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require "webmachine/adapters/
|
1
|
+
require "webmachine/adapters/rack3_adapter"
|
2
2
|
require "pact_broker/string_refinements"
|
3
3
|
|
4
4
|
# Code to describe the routes in a Webmachine API, including
|
@@ -44,11 +44,11 @@ module Webmachine
|
|
44
44
|
}.merge(path_params)
|
45
45
|
|
46
46
|
rack_req = ::Rack::Request.new({ "REQUEST_METHOD" => "GET", "rack.input" => StringIO.new("") }.merge(env) )
|
47
|
-
request = Webmachine::Adapters::
|
47
|
+
request = Webmachine::Adapters::Rack3::RackRequest.new(
|
48
48
|
rack_req.env["REQUEST_METHOD"],
|
49
49
|
path,
|
50
50
|
Webmachine::Headers.from_cgi({"HTTP_HOST" => "example.org"}.merge(env)),
|
51
|
-
Webmachine::Adapters::
|
51
|
+
Webmachine::Adapters::Rack3::RequestBody.new(rack_req),
|
52
52
|
{},
|
53
53
|
{},
|
54
54
|
rack_req.env
|
@@ -134,7 +134,7 @@ module Webmachine
|
|
134
134
|
end
|
135
135
|
|
136
136
|
def self.build_request(http_method: "GET", path_info: )
|
137
|
-
request = Webmachine::Adapters::
|
137
|
+
request = Webmachine::Adapters::Rack3::RackRequest.new(http_method, "/", Webmachine::Headers["host" => "example.org"], nil, {}, {}, { "REQUEST_METHOD" => http_method })
|
138
138
|
request.path_info = path_info
|
139
139
|
request
|
140
140
|
end
|
@@ -36,7 +36,7 @@ module Webmachine
|
|
36
36
|
message = options[:message] if options[:message]
|
37
37
|
|
38
38
|
res.body = error_response_body(req, message, title, title.dasherize.gsub(/^\d+\-/, ""), code, req)
|
39
|
-
res.headers[
|
39
|
+
res.headers["content-type"] = error_response_content_type(req)
|
40
40
|
end
|
41
41
|
ensure_content_length(res)
|
42
42
|
ensure_date_header(res)
|
data/pact_broker.gemspec
CHANGED
@@ -56,14 +56,13 @@ Gem::Specification.new do |gem|
|
|
56
56
|
gem.add_runtime_dependency "reform", "~> 2.6"
|
57
57
|
gem.add_runtime_dependency "sequel", "~> 5.28"
|
58
58
|
gem.add_runtime_dependency "webmachine", ">= 2.0.0.beta", "< 3.0"
|
59
|
-
gem.add_runtime_dependency "webrick", "~> 1.8" # webmachine requires webrick, but doesn't declare it as a dependency :shrug:
|
60
59
|
gem.add_runtime_dependency "semver2", "~> 3.4.2"
|
61
|
-
gem.add_runtime_dependency "rack", "
|
60
|
+
gem.add_runtime_dependency "rack", "~> 3.1", ">= 3.1.11"
|
62
61
|
gem.add_runtime_dependency "redcarpet", ">= 3.5.1", "~>3.5"
|
63
62
|
gem.add_runtime_dependency "pact-support" , ">= 1.21.2", "~> 1.21"
|
64
63
|
gem.add_runtime_dependency "haml", "~>5.0"
|
65
64
|
gem.add_runtime_dependency "sucker_punch", "~>3.0"
|
66
|
-
gem.add_runtime_dependency "rack-protection", "~>
|
65
|
+
gem.add_runtime_dependency "rack-protection", "~> 4.1"
|
67
66
|
gem.add_runtime_dependency "table_print", "~> 1.5"
|
68
67
|
gem.add_runtime_dependency "semantic_logger", "~> 4.11"
|
69
68
|
gem.add_runtime_dependency "sanitize", "~> 6.0"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pact_broker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.113.
|
4
|
+
version: 2.113.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bethany Skurrie
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
- Warner Godfrey
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2025-
|
12
|
+
date: 2025-03-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -115,20 +115,6 @@ dependencies:
|
|
115
115
|
- - "<"
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '3.0'
|
118
|
-
- !ruby/object:Gem::Dependency
|
119
|
-
name: webrick
|
120
|
-
requirement: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - "~>"
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '1.8'
|
125
|
-
type: :runtime
|
126
|
-
prerelease: false
|
127
|
-
version_requirements: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - "~>"
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '1.8'
|
132
118
|
- !ruby/object:Gem::Dependency
|
133
119
|
name: semver2
|
134
120
|
requirement: !ruby/object:Gem::Requirement
|
@@ -147,22 +133,22 @@ dependencies:
|
|
147
133
|
name: rack
|
148
134
|
requirement: !ruby/object:Gem::Requirement
|
149
135
|
requirements:
|
150
|
-
- - ">="
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: 2.2.3
|
153
136
|
- - "~>"
|
154
137
|
- !ruby/object:Gem::Version
|
155
|
-
version: '
|
138
|
+
version: '3.1'
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 3.1.11
|
156
142
|
type: :runtime
|
157
143
|
prerelease: false
|
158
144
|
version_requirements: !ruby/object:Gem::Requirement
|
159
145
|
requirements:
|
160
|
-
- - ">="
|
161
|
-
- !ruby/object:Gem::Version
|
162
|
-
version: 2.2.3
|
163
146
|
- - "~>"
|
164
147
|
- !ruby/object:Gem::Version
|
165
|
-
version: '
|
148
|
+
version: '3.1'
|
149
|
+
- - ">="
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: 3.1.11
|
166
152
|
- !ruby/object:Gem::Dependency
|
167
153
|
name: redcarpet
|
168
154
|
requirement: !ruby/object:Gem::Requirement
|
@@ -237,14 +223,14 @@ dependencies:
|
|
237
223
|
requirements:
|
238
224
|
- - "~>"
|
239
225
|
- !ruby/object:Gem::Version
|
240
|
-
version: '
|
226
|
+
version: '4.1'
|
241
227
|
type: :runtime
|
242
228
|
prerelease: false
|
243
229
|
version_requirements: !ruby/object:Gem::Requirement
|
244
230
|
requirements:
|
245
231
|
- - "~>"
|
246
232
|
- !ruby/object:Gem::Version
|
247
|
-
version: '
|
233
|
+
version: '4.1'
|
248
234
|
- !ruby/object:Gem::Dependency
|
249
235
|
name: table_print
|
250
236
|
requirement: !ruby/object:Gem::Requirement
|
@@ -1107,6 +1093,8 @@ files:
|
|
1107
1093
|
- lib/sequel/plugins/age.rb
|
1108
1094
|
- lib/sequel/plugins/insert_ignore.rb
|
1109
1095
|
- lib/sequel/plugins/upsert.rb
|
1096
|
+
- lib/webmachine/adapters.rb
|
1097
|
+
- lib/webmachine/adapters/rack3_adapter.rb
|
1110
1098
|
- lib/webmachine/application_monkey_patch.rb
|
1111
1099
|
- lib/webmachine/describe_routes.rb
|
1112
1100
|
- lib/webmachine/render_error_monkey_patch.rb
|
@@ -1238,7 +1226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1238
1226
|
- !ruby/object:Gem::Version
|
1239
1227
|
version: '0'
|
1240
1228
|
requirements: []
|
1241
|
-
rubygems_version: 3.6.
|
1229
|
+
rubygems_version: 3.6.5
|
1242
1230
|
specification_version: 4
|
1243
1231
|
summary: See description
|
1244
1232
|
test_files: []
|