plek 4.0.0 → 4.1.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 +4 -4
- data/README.md +11 -1
- data/lib/plek/version.rb +1 -1
- data/lib/plek.rb +49 -38
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1157f1b8a26836a70c428e595d27392858f6a858043dd44bfeda13314c4e7e99
|
4
|
+
data.tar.gz: 7b970caacd3c079d9bd31836fbc53dee83d98da3110982f67e16d618c89e5f91
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bffcec46ce28fbfdc43d276ddea36fc741dca07a3db9292952d5f7717ecd0eed704a15a96c0ca223f29260b903843374e1c6e317a1e0ba8193dd332cfa07f4bd
|
7
|
+
data.tar.gz: 74501f62f53fb5263e6a41d679604685ca07147599c42d48afbd9921936f18e7c7f900d163ad5255bbfbd7022f0cef8ae1551cfdd61b67deafa528afc57bb92f
|
data/README.md
CHANGED
@@ -52,14 +52,24 @@ To domain is based on the environment, and defaults to 'dev.gov.uk'. The environ
|
|
52
52
|
|
53
53
|
You can prepend strings to the hostnames generated using: `PLEK_HOSTNAME_PREFIX`.
|
54
54
|
|
55
|
+
If `PLEK_HOSTNAME_PREFIX` is present, it will be prepended to the hostname
|
56
|
+
unless the hostname appears in the comma-separated list
|
57
|
+
`PLEK_UNPREFIXABLE_HOSTS`.
|
58
|
+
|
55
59
|
Override the asset URL with: `GOVUK_ASSET_ROOT`. The default is to generate a URL for the `static` service.
|
56
60
|
|
57
61
|
Override the website root with `GOVUK_WEBSITE_ROOT`. The default is to generate a URL for the `www` service.
|
58
62
|
|
63
|
+
If `PLEK_USE_HTTP_FOR_SINGLE_LABEL_DOMAINS=1` (or anything beginning with `t`
|
64
|
+
or `y`), Plek will use `http` as the URL scheme instead of `https` for
|
65
|
+
single-label domains. Single-label domains are domains with just a single name
|
66
|
+
component, for example `frontend` or `content-store`, as opposed to
|
67
|
+
`frontend.example.com` or `content-store.test.govuk.digital`.
|
68
|
+
|
59
69
|
## Licence
|
60
70
|
|
61
71
|
[MIT License](LICENCE)
|
62
72
|
|
63
73
|
## Versioning policy
|
64
74
|
|
65
|
-
This is versioned according to [Semantic Versioning 2.0](
|
75
|
+
This is versioned according to [Semantic Versioning 2.0](https://semver.org/)
|
data/lib/plek/version.rb
CHANGED
data/lib/plek.rb
CHANGED
@@ -19,10 +19,7 @@ class Plek
|
|
19
19
|
# The fallback parent domain to use in development mode.
|
20
20
|
DEV_DOMAIN = "dev.gov.uk".freeze
|
21
21
|
|
22
|
-
|
23
|
-
HTTP_DOMAINS = [DEV_DOMAIN].freeze
|
24
|
-
|
25
|
-
attr_accessor :parent_domain, :external_domain
|
22
|
+
attr_reader :parent_domain, :external_domain
|
26
23
|
|
27
24
|
# Construct a new Plek instance.
|
28
25
|
#
|
@@ -37,8 +34,12 @@ class Plek
|
|
37
34
|
# +GOVUK_APP_DOMAIN_EXTERNAL+ and if that is unavailable the parent domain
|
38
35
|
# will be used
|
39
36
|
def initialize(domain_to_use = nil, external_domain = nil)
|
40
|
-
|
41
|
-
|
37
|
+
truth_re = /^[1ty]/i
|
38
|
+
@parent_domain = domain_to_use || env_var_or_dev_fallback("GOVUK_APP_DOMAIN", DEV_DOMAIN)
|
39
|
+
@external_domain = external_domain || ENV.fetch("GOVUK_APP_DOMAIN_EXTERNAL", @parent_domain)
|
40
|
+
@host_prefix = ENV.fetch("PLEK_HOSTNAME_PREFIX", "")
|
41
|
+
@unprefixable_hosts = ENV.fetch("PLEK_UNPREFIXABLE_HOSTS", "").split(",").map(&:strip)
|
42
|
+
@use_http_for_single_label_domains = truth_re.match?(ENV.fetch("PLEK_USE_HTTP_FOR_SINGLE_LABEL_DOMAINS", ""))
|
42
43
|
end
|
43
44
|
|
44
45
|
# Find the base URL for a service/application. This constructs the URL from
|
@@ -47,12 +48,20 @@ class Plek
|
|
47
48
|
# will be https.
|
48
49
|
#
|
49
50
|
# If PLEK_HOSTNAME_PREFIX is present in the environment, it will be prepended
|
50
|
-
# to the hostname
|
51
|
+
# to the hostname unless the hostname appears in the comma-separated list
|
52
|
+
# PLEK_UNPREFIXABLE_HOSTS.
|
53
|
+
#
|
54
|
+
# If PLEK_USE_HTTP_FOR_SINGLE_LABEL_DOMAINS=1 in the environment, Plek will use
|
55
|
+
# "http" as the URL scheme instead of "https" for single-label domains.
|
56
|
+
# Single-label domains are domains with just a single name component, for
|
57
|
+
# example "frontend" or "content-store", as opposed to
|
58
|
+
# "frontend.example.com" or "content-store.test.govuk.digital".
|
51
59
|
#
|
52
60
|
# The URL for a given service can be overridden by setting a corresponding
|
53
61
|
# environment variable. eg if +PLEK_SERVICE_EXAMPLE_CHEESE_THING_URI+ was
|
54
62
|
# set, +Plek.new.find('example-cheese-thing')+ would return the value of that
|
55
|
-
# variable.
|
63
|
+
# variable. This overrides both the "internal" and "external" URL for the
|
64
|
+
# service. It is not possible to override them separately.
|
56
65
|
#
|
57
66
|
# @param service [String] the name of the service to lookup. This should be
|
58
67
|
# the hostname of the service.
|
@@ -62,24 +71,25 @@ class Plek
|
|
62
71
|
# scheme (eg `//foo.example.com`)
|
63
72
|
# @return [String] The base URL for the service.
|
64
73
|
def find(service, options = {})
|
65
|
-
name =
|
74
|
+
name = clean_name(service)
|
66
75
|
if (service_uri = defined_service_uri_for(name))
|
67
76
|
return service_uri
|
68
77
|
end
|
69
78
|
|
70
|
-
|
79
|
+
name = "#{host_prefix}#{name}" unless unprefixable_hosts.include?(name)
|
71
80
|
|
72
|
-
|
73
|
-
|
74
|
-
end
|
81
|
+
domain = options[:external] ? external_domain : parent_domain
|
82
|
+
domain_suffix = domain.empty? ? "" : ".#{domain}"
|
75
83
|
|
76
|
-
if options[:scheme_relative]
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
84
|
+
scheme = if options[:scheme_relative]
|
85
|
+
""
|
86
|
+
elsif options[:force_http] || http_domain?(domain)
|
87
|
+
"http:"
|
88
|
+
else
|
89
|
+
"https:"
|
90
|
+
end
|
91
|
+
|
92
|
+
"#{scheme}//#{name}#{domain_suffix}".freeze
|
83
93
|
end
|
84
94
|
|
85
95
|
# Find the external URL for a service/application.
|
@@ -128,21 +138,16 @@ class Plek
|
|
128
138
|
URI(website_root)
|
129
139
|
end
|
130
140
|
|
131
|
-
#
|
132
|
-
def name_for(service)
|
133
|
-
name = service.to_s.dup
|
134
|
-
name.downcase!
|
135
|
-
name.strip!
|
136
|
-
name.gsub!(/[^a-z\.-]+/, "")
|
137
|
-
name
|
138
|
-
end
|
139
|
-
|
141
|
+
# TODO: clean up all references to these and then remove them.
|
140
142
|
class << self
|
141
143
|
# This alias allows calls to be made in the old style:
|
142
144
|
# Plek.current.find('foo')
|
143
145
|
# as well as the new style:
|
144
146
|
# Plek.new.find('foo')
|
145
|
-
|
147
|
+
def current(...)
|
148
|
+
warn "Plek.current is deprecated and will be removed. Use Plek.new or Plek.find instead."
|
149
|
+
new(...)
|
150
|
+
end
|
146
151
|
|
147
152
|
# Convenience wrapper. The same as calling +Plek.new.find+.
|
148
153
|
# @see #find
|
@@ -159,6 +164,17 @@ class Plek
|
|
159
164
|
|
160
165
|
private
|
161
166
|
|
167
|
+
attr_reader :host_prefix, :unprefixable_hosts, :use_http_for_single_label_domains
|
168
|
+
|
169
|
+
# TODO: clean up call sites throughout alphagov and then delete clean_name.
|
170
|
+
def clean_name(service)
|
171
|
+
service.to_s.downcase.strip.gsub(/[^a-z.-]+/, "")
|
172
|
+
end
|
173
|
+
|
174
|
+
def http_domain?(domain)
|
175
|
+
domain == DEV_DOMAIN || domain == "" && use_http_for_single_label_domains
|
176
|
+
end
|
177
|
+
|
162
178
|
def env_var_or_dev_fallback(var_name, fallback_str = nil)
|
163
179
|
if (var = ENV[var_name])
|
164
180
|
var
|
@@ -172,13 +188,8 @@ private
|
|
172
188
|
end
|
173
189
|
|
174
190
|
def defined_service_uri_for(service)
|
175
|
-
service_name = service.upcase.
|
176
|
-
|
177
|
-
|
178
|
-
if (uri = ENV[var_name]) && !uri.empty?
|
179
|
-
return uri
|
180
|
-
end
|
181
|
-
|
182
|
-
nil
|
191
|
+
service_name = service.upcase.tr("-", "_")
|
192
|
+
uri = ENV.fetch("PLEK_SERVICE_#{service_name}_URI", "")
|
193
|
+
uri.empty? ? nil : uri
|
183
194
|
end
|
184
195
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: plek
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GOV.UK Dev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-10-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: climate_control
|
@@ -56,16 +56,16 @@ dependencies:
|
|
56
56
|
name: rubocop-govuk
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 4.7.0
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - '='
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 4.7.0
|
69
69
|
description: Find the right hostname for each service in an environment-dependent
|
70
70
|
manner
|
71
71
|
email:
|
@@ -90,14 +90,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
90
90
|
requirements:
|
91
91
|
- - ">="
|
92
92
|
- !ruby/object:Gem::Version
|
93
|
-
version: '
|
93
|
+
version: '2.7'
|
94
94
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
95
95
|
requirements:
|
96
96
|
- - ">="
|
97
97
|
- !ruby/object:Gem::Version
|
98
98
|
version: '0'
|
99
99
|
requirements: []
|
100
|
-
rubygems_version: 3.
|
100
|
+
rubygems_version: 3.3.22
|
101
101
|
signing_key:
|
102
102
|
specification_version: 4
|
103
103
|
summary: Locations for services
|