govuk_web_banners 0.1.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: da77b3f454b15e59feb67dd5e9bf18fef636b3bda1bf874d049c8df3b6399ac1
4
- data.tar.gz: 7c2ccf8b6bf5cdfba1a0aea1580f31c8ed24b9f9d2238dddf3c020ddbe418250
3
+ metadata.gz: 812e2ba243433622af29da5ae03a118d2eeca1b92b2f1a293fd9faa7c7c7d8be
4
+ data.tar.gz: cc707567b6715229a8c68efa4bf3ad3b447a30a7fe2301ac739d740fe3f4edea
5
5
  SHA512:
6
- metadata.gz: 20fe2fe0e6c23f98145a36ce5e5139ff3c8f7d58f1e6d53e13731ddfafa13b712917fc13b1aadccaf76fe2d291254377e3691ed3d4292e293d681bd0f2167102
7
- data.tar.gz: 30cd8b18cb423dd66517abb9ff6a58cdcba830ea76bc0d81376564b1680865ad751b7853eaa09c5157afe837273cf31e1a64a5b0b3bfc575343b1806de2720e5
6
+ metadata.gz: 5608eaab07cfb7c5e5f6da27c6db19310fae258986e1334ff33cb54f8a2a9c3d9fcd6cadc95f6e0175f43bb60698bc0ae821957808ffe8ae06553d664b0f0701
7
+ data.tar.gz: dd2726aacb5d69fd888169ca167fb08f9f1b297789993c57c6b9b5d6aa35f0ad2315cc7f0e099be83e47e2d889f7e09b0a2ef5812f7d265e71083097b892b358
data/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # GovukWebBanners
2
- Proof of Concept for centralising handling of Recruitment, Global, and Emergency banners (currently spread across apps)
2
+ Proof of Concept for centralising handling of Recruitment, Global, and Emergency
3
+ banners (currently spread across apps)
3
4
 
4
5
  ## Usage
5
- Currently, supports recruitment banners
6
+ Currently supports the emergency banner and recruitment banners.
6
7
 
7
8
  ## Adding the gem to your application
8
9
  Add this line to your application's Gemfile:
@@ -27,20 +28,68 @@ Add the JS dependencies to your existing asset dependencies file:
27
28
  //= require govuk_web_banners/dependencies
28
29
  ```
29
30
 
30
- Add a call to the partial in the layout or view that you want banners to appear in:
31
+ ## Adding emergency banners
32
+
33
+ Emergency banners are passed to the [Layout for Public](https://components.publishing.service.gov.uk/component-guide/layout_for_public) component, which is currently applied to each frontend app by the slimmer/static wrapping code - so you will only need to handle emergency banners in your app when Slimmer is removed from it. Once Slimmer is removed and you are calling the layout_for_public component directly in your app, add the emergency banner partial to the component's `emergency_banner:` key:
34
+
35
+ ```
36
+ <%= render "govuk_publishing_components/components/layout_for_public", {
37
+ draft_watermark: draft_environment,
38
+ emergency_banner: render("govuk_web_banners/emergency_banner"), # <-- Add this line
39
+ full_width: false,
40
+ ...etc
41
+ ```
42
+
43
+ if you want the homepage variant of the banner, you can add `homepage: true` to the render call:
44
+
45
+ ```
46
+ <%= render "govuk_publishing_components/components/layout_for_public", {
47
+ draft_watermark: draft_environment,
48
+ emergency_banner: render("govuk_web_banners/emergency_banner", homepage: true), # <-- Add this line
49
+ full_width: full_width,
50
+ ...etc
51
+ ```
52
+
53
+ Your app will also need access to the whitehall shared redis cluster (which is used to signal the emergency banner is up), via the `EMERGENCY_BANNER_REDIS_URL` environment variable (here is an example of [setting this in govuk-helm-charts](https://github.com/alphagov/govuk-helm-charts/blob/7818eaa22fc194d21548f316bcc5a46c2023dcb6/charts/app-config/values-staging.yaml#L3337-L3338)). You'll need to allow this in all three environments.
54
+
55
+ Finally, you'll need to configure a connection to the redis cluster, available at `Rails.application.config.emergency_banner_redis_client`. The suggested way of doing this is creating an initializer at `/config/initializers/govuk_web_banners.rb` with the content:
56
+
57
+ ```
58
+ Rails.application.config.emergency_banner_redis_client = Redis.new(
59
+ url: ENV["EMERGENCY_BANNER_REDIS_URL"],
60
+ reconnect_attempts: [15, 30, 45, 60],
61
+ )
62
+ ```
63
+
64
+ ## Adding recruitment banners
65
+
66
+ Add a call to the partial in the layout or view that you want banners to appear
67
+ in (typically recruitment banners should be in the layout, below the breadcrumbs
68
+ and just above the `main` element):
31
69
 
32
70
  ```
33
71
  <%= render "govuk_web_banners/recruitment_banner" %>
34
72
  ```
35
73
 
36
- You should make sure this line is above the call to render_component_stylesheets call if your
37
- app is using individual component stylesheets.
74
+ ### Required stylesheets
75
+
76
+ If you are using individual component stylesheets in your app, you should make
77
+ sure the call to the recruitment_banner partial is above the call to
78
+ render_component_stylesheets in your layout.
79
+
80
+ If you are _not_ using individual component stylesheets in your app, you will
81
+ have to make sure the intervention component's styles are included in your
82
+ application stylesheet:
83
+
84
+ `@import "govuk_publishing_components/components/intervention"`
38
85
 
39
86
  ## Updating banner information in the gem
40
87
 
41
- Data for the current set of live banners can be found at `config/govuk_web_banners/recruitment_banners.yml`. To
42
- add a banner to the config, add an entry under the banners: array. Note that this array must always be valid,
43
- so if there are no banners in the file, it must contain at least `banners: []`
88
+ Data for the current set of live banners can be found at
89
+ `config/govuk_web_banners/recruitment_banners.yml`. To add a banner to the
90
+ config, add an entry under the banners: array. Note that this array must always
91
+ be valid, so if there are no banners in the file, it must contain at least
92
+ `banners: []`
44
93
 
45
94
  ### Example banner entry
46
95
 
@@ -57,32 +106,40 @@ banners:
57
106
  end_date: 18/11/2024
58
107
  ```
59
108
 
60
- The required keys are `suggestion_text`, `suggestion_link_text`, and `survey_url` (the values to appear in the
61
- banner), and `page_paths` (an array of paths on which the banner should be shown).
109
+ The required keys are `suggestion_text`, `suggestion_link_text`, and
110
+ `survey_url` (the values to appear in the banner), and `page_paths` (an array of
111
+ paths on which the banner should be shown).
62
112
 
63
- Optional keys are `name` (an identifying name for this banner, not rendered anywhere), and `start_date` / `end_date`
64
- (the banner becomes active at the start of the day specified as `start_date`, and stops at the *start* of the day
65
- specified as `end_date`). Start and end dates must be in the DD/MM/YYYY format parsable as a YAML -> Date.
113
+ Optional keys are `name` (an identifying name for this banner, not rendered
114
+ anywhere), and `start_date` / `end_date` (the banner becomes active at the start
115
+ of the day specified as `start_date`, and stops at the *start* of the day
116
+ specified as `end_date`). Start and end dates must be in the DD/MM/YYYY format
117
+ parsable as a YAML -> Date.
66
118
 
67
119
  ### Keeping the config file valid and tidy
68
120
 
69
- The config file will be checked during CI, so an invalid file can't be released as a gem and we are forced
70
- to make sure it's kept tidy. These checks include:
121
+ The config file will be checked during CI, so an invalid file can't be released
122
+ as a gem and we are forced to make sure it's kept tidy. These checks include:
71
123
 
72
124
  * the banners array must be a valid YAML array
73
- * all banners have a suggestion_text, suggestion_link_text, survey_url and page_paths
74
- * the same page_path is not present on two banners that are active at the same time
125
+ * all banners have a suggestion_text, suggestion_link_text, survey_url and
126
+ page_paths
127
+ * the same page_path is not present on two banners that are active at the same
128
+ time
75
129
  * paths must start with a forward-slash (/)
76
130
 
77
131
  It will also display warnings (but not fail CI)
78
132
 
79
- * if there are banners that have expired - you are encouraged to remove obsolete config, but it will not
80
- prevent you merging changes.
81
- * if page_paths point to pages that are not currently live on GOV.UK - this may be intentional (if the banner
82
- is for a page that isn't yet published), or it may indicate a typo in the path.
133
+ * if there are banners that have expired - you are encouraged to remove obsolete
134
+ config, but it will not prevent you merging changes.
135
+ * if page_paths point to pages that are not currently live on GOV.UK - this may
136
+ be intentional (if the banner is for a page that isn't yet published), or it
137
+ may indicate a typo in the path.
83
138
 
84
- Note that some of this validation code is in the lib/govuk_web_banners/validators path, which
85
- should be tested to ensure the checking is valid, but will not be bundled into the released gem.
139
+ Note that some of this validation code is in the
140
+ lib/govuk_web_banners/validators path, which should be tested to ensure the
141
+ checking is valid, but will not be bundled into the released gem.
86
142
 
87
143
  ## License
88
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
144
+ The gem is available as open source under the terms of the [MIT
145
+ License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,11 @@
1
+ <% emergency_banner = GovukWebBanners::EmergencyBanner.new %>
2
+ <% if emergency_banner.active? %>
3
+ <%= render "govuk_publishing_components/components/emergency_banner", {
4
+ campaign_class: emergency_banner.campaign_class,
5
+ heading: emergency_banner.heading,
6
+ link: emergency_banner.link,
7
+ link_text: emergency_banner.link_text,
8
+ short_description: emergency_banner.short_description,
9
+ homepage: local_assigns[:homepage] || false,
10
+ } %>
11
+ <% end %>
@@ -1,5 +1,6 @@
1
1
  # Example usage of adding a banner to the banners list
2
2
 
3
+ # banners:
3
4
  # - name: Banner 1
4
5
  # suggestion_text: "Help improve GOV.UK"
5
6
  # suggestion_link_text: "Sign up to take part in user research (opens in a new tab)"
@@ -14,4 +15,61 @@
14
15
  #
15
16
  # Note that this file must contain a valid banners array, so if there are no banners
16
17
  # currently included, the file should at least contain banners: []
17
- banners: []
18
+ banners:
19
+ - name: AI banner 11/11/2024
20
+ suggestion_text: "Help improve GOV.UK"
21
+ suggestion_link_text: "Sign up to take part in user research (opens in a new tab)"
22
+ survey_url: https://survey.take-part-in-research.service.gov.uk/jfe/form/SV_2bggmg6xlelrO0S
23
+ page_paths:
24
+ # government frontend:
25
+ - /self-assessment-tax-returns
26
+ - /working-for-yourself
27
+ - /self-employed-records
28
+ - /expenses-if-youre-self-employed
29
+ - /first-company-accounts-and-return
30
+ - /what-is-the-construction-industry-scheme
31
+ - /capital-allowances
32
+ - /simpler-income-tax-cash-basis
33
+ - /expenses-and-benefits-a-to-z
34
+ - /capital-gains-tax
35
+ - /directors-loans
36
+ - /self-assessment-tax-return-forms
37
+ - /running-a-limited-company
38
+ - /calculate-tax-on-company-cars
39
+ - /introduction-to-business-rates
40
+ - /calculate-your-business-rates
41
+ - /apply-for-business-rate-relief
42
+ - /stop-being-self-employed
43
+ - /tax-codes
44
+ # finder-frontend:
45
+ - /business-finance-support
46
+ start_date: 11/11/2024
47
+ end_date: 06/01/2025
48
+ - name: HMRC banner 03/01/2025
49
+ suggestion_text: "Help improve GOV.UK"
50
+ suggestion_link_text: "Sign up to take part in user research (opens in a new tab)"
51
+ survey_url: https://survey.take-part-in-research.service.gov.uk/jfe/form/SV_74GjifgnGv6GsMC?Source=BannerList_HMRC_CCG_Compliance
52
+ page_paths:
53
+ # government-frontend
54
+ - /government/collections/tax-compliance-detailed-information
55
+ - /government/collections/hm-revenue-and-customs-compliance-checks-factsheets
56
+ - /difficulties-paying-hmrc
57
+ - /tax-help
58
+ - /get-help-hmrc-extra-support
59
+ - /guidance/voluntary-and-community-sector-organisations-who-can-give-you-extra-support
60
+ - /tax-appeals
61
+ - /guidance/tax-disputes-alternative-dispute-resolution-adr
62
+ start_date: 03/01/2025
63
+ end_date: 31/01/2025
64
+ - name: UKVI banner 30/12/2025
65
+ suggestion_text: "Help improve GOV.UK"
66
+ suggestion_link_text: "Take part in user research (opens in a new tab)"
67
+ survey_url: https://surveys.publishing.service.gov.uk/s/XYVRGN/
68
+ page_paths:
69
+ # frontend
70
+ - /contact-ukvi-inside-outside-uk
71
+ # collections
72
+ - /browse/visas-immigration
73
+ - /government/organisations/uk-visas-and-immigration
74
+ start_date: 30/12/2024
75
+ end_date: 27/01/2025
@@ -0,0 +1,37 @@
1
+ require "govuk_app_config/govuk_error"
2
+ require "redis"
3
+
4
+ module GovukWebBanners
5
+ class EmergencyBanner
6
+ attr_reader :campaign_class, :heading, :short_description, :link, :link_text
7
+
8
+ def initialize
9
+ content = content_from_redis
10
+
11
+ @campaign_class = content[:campaign_class].presence
12
+ @heading = content[:heading].presence
13
+ @short_description = content[:short_description].presence
14
+ @link = content[:link].presence
15
+ @link_text = content[:link_text].presence
16
+ end
17
+
18
+ def active?
19
+ [campaign_class, heading].all?
20
+ end
21
+
22
+ private
23
+
24
+ def redis_client
25
+ Rails.application.config.emergency_banner_redis_client
26
+ end
27
+
28
+ def content_from_redis
29
+ Rails.cache.fetch("#emergency_banner/config", expires_in: 1.minute) do
30
+ redis_client.hgetall("emergency_banner").try(:symbolize_keys)
31
+ end
32
+ rescue StandardError => e
33
+ GovukError.notify(e, extra: { context: "Emergency Banner Redis" })
34
+ {}
35
+ end
36
+ end
37
+ end
@@ -1,3 +1,3 @@
1
1
  module GovukWebBanners
2
- VERSION = "0.1.0".freeze
2
+ VERSION = "0.3.0".freeze
3
3
  end
@@ -1,5 +1,6 @@
1
1
  require "govuk_publishing_components"
2
2
 
3
+ require "govuk_web_banners/emergency_banner"
3
4
  require "govuk_web_banners/engine"
4
5
  require "govuk_web_banners/recruitment_banner"
5
6
  require "govuk_web_banners/version"
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: govuk_web_banners
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
+ original_platform: ''
6
7
  authors:
7
8
  - GOV.UK Dev
8
- autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-11-25 00:00:00.000000000 Z
11
+ date: 2024-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: govuk_app_config
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: govuk_publishing_components
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +52,20 @@ dependencies:
38
52
  - - ">="
39
53
  - !ruby/object:Gem::Version
40
54
  version: '7'
55
+ - !ruby/object:Gem::Dependency
56
+ name: redis
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: byebug
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -148,9 +176,11 @@ files:
148
176
  - Rakefile
149
177
  - app/assets/config/govuk_web_banners_manifest.js
150
178
  - app/assets/javascripts/govuk_web_banners/dependencies.js
179
+ - app/views/govuk_web_banners/_emergency_banner.html.erb
151
180
  - app/views/govuk_web_banners/_recruitment_banner.html.erb
152
181
  - config/govuk_web_banners/recruitment_banners.yml
153
182
  - lib/govuk_web_banners.rb
183
+ - lib/govuk_web_banners/emergency_banner.rb
154
184
  - lib/govuk_web_banners/engine.rb
155
185
  - lib/govuk_web_banners/recruitment_banner.rb
156
186
  - lib/govuk_web_banners/version.rb
@@ -161,7 +191,6 @@ metadata:
161
191
  homepage_uri: https://github.com/alphagov/govuk_web_banners
162
192
  source_code_uri: https://www.github.com/alphagov/govuk_web_banners
163
193
  changelog_uri: https://www.github.com/alphagov/govuk_web_banners/CHANGELOG.md
164
- post_install_message:
165
194
  rdoc_options: []
166
195
  require_paths:
167
196
  - lib
@@ -176,8 +205,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
176
205
  - !ruby/object:Gem::Version
177
206
  version: '0'
178
207
  requirements: []
179
- rubygems_version: 3.5.23
180
- signing_key:
208
+ rubygems_version: 3.6.1
181
209
  specification_version: 4
182
210
  summary: A gem to support banners on GOV.UK frontend applications
183
211
  test_files: []