Skip to content

Commit 73bd4c4

Browse files
committed
feat: allow the base URL of the application to be set for the API
1 parent 89ea1a5 commit 73bd4c4

File tree

4 files changed

+25
-9
lines changed

4 files changed

+25
-9
lines changed

lib/pact_broker/api/resources/base_resource.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def identifier_from_path
5959
alias_method :path_info, :identifier_from_path
6060

6161
def base_url
62-
request.base_uri.to_s.chomp('/')
62+
PactBroker.configuration.base_url || request.base_uri.to_s.chomp('/')
6363
end
6464

6565
def charsets_provided

lib/pact_broker/app.rb

-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
require 'pact_broker/logging/default_formatter'
55
require 'rack-protection'
66
require 'rack/hal_browser'
7-
require 'rack/pact_broker/store_base_url'
87
require 'rack/pact_broker/add_pact_broker_version_header'
98
require 'rack/pact_broker/convert_file_extension_to_accept_header'
109
require 'rack/pact_broker/database_transaction'
@@ -159,7 +158,6 @@ def configure_middleware
159158
end
160159
@app_builder.use Rack::PactBroker::InvalidUriProtection
161160
@app_builder.use Rack::PactBroker::ResetThreadData
162-
@app_builder.use Rack::PactBroker::StoreBaseURL
163161
@app_builder.use Rack::PactBroker::AddPactBrokerVersionHeader
164162
@app_builder.use Rack::PactBroker::AddVaryHeader
165163
@app_builder.use Rack::Static, :urls => ["/stylesheets", "/css", "/fonts", "/js", "/javascripts", "/images"], :root => PactBroker.project_root.join("public")

lib/pact_broker/configuration.rb

+1-5
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class Configuration
3333
:seed_example_data
3434
]
3535

36-
attr_accessor :log_dir, :database_connection, :auto_migrate_db, :auto_migrate_db_data, :example_data_seeder, :seed_example_data, :use_hal_browser, :html_pact_renderer, :use_rack_protection
36+
attr_accessor :base_url, :log_dir, :database_connection, :auto_migrate_db, :auto_migrate_db_data, :example_data_seeder, :seed_example_data, :use_hal_browser, :html_pact_renderer, :use_rack_protection
3737
attr_accessor :validate_database_connection_config, :enable_diagnostic_endpoints, :version_parser, :sha_generator
3838
attr_accessor :use_case_sensitive_resource_names, :order_versions_by_date
3939
attr_accessor :check_for_potential_duplicate_pacticipant_names
@@ -176,10 +176,6 @@ def enable_badge_resources= enable_badge_resources
176176
self.enable_public_badge_access = enable_badge_resources
177177
end
178178

179-
def base_url
180-
ENV['PACT_BROKER_BASE_URL']
181-
end
182-
183179
def save_to_database
184180
# Can't require a Sequel::Model class before the connection has been set
185181
require 'pact_broker/config/save'

spec/lib/pact_broker/api/resources/base_resource_spec.rb

+23-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ module PactBroker
44
module Api
55
module Resources
66
describe BaseResource do
7-
let(:request) { double('request', uri: uri).as_null_object }
7+
let(:request) { double('request', uri: uri, base_uri: URI("http://example.org/")).as_null_object }
88
let(:response) { double('response') }
99
let(:uri) { URI('http://example.org/path?query') }
1010

@@ -19,6 +19,28 @@ module Resources
1919
expect(subject.headers['Access-Control-Allow-Methods']).to eq "GET, OPTIONS"
2020
end
2121
end
22+
23+
describe "base_url" do
24+
context "when PactBroker.configuration.base_url is not nil" do
25+
before do
26+
allow(PactBroker.configuration).to receive(:base_url).and_return("http://foo")
27+
end
28+
29+
it "returns the configured base URL" do
30+
expect(subject.base_url).to eq "http://foo"
31+
end
32+
end
33+
34+
context "when PactBroker.configuration.base_url is nil" do
35+
before do
36+
allow(PactBroker.configuration).to receive(:base_url).and_return(nil)
37+
end
38+
39+
it "returns the base URL from the request" do
40+
expect(subject.base_url).to eq "http://example.org"
41+
end
42+
end
43+
end
2244
end
2345

2446
ALL_RESOURCES = ObjectSpace.each_object(::Class).select {|klass| klass < BaseResource }

0 commit comments

Comments
 (0)