plek 4.0.0 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|