Browse Source

Add helper to render Markdown content pages

pull/390/head
Paul Robert Lloyd 3 years ago
parent
commit
f5e3b16d58
  1. 2
      Gemfile
  2. 5
      Gemfile.lock
  3. 11
      app/controllers/content_controller.rb
  4. 14
      app/helpers/content_helper.rb
  5. 0
      app/views/content/accessibility_statement.md
  6. 9
      app/views/content/page.html.erb
  7. 0
      app/views/content/privacy_notice.md
  8. 4
      config/routes.rb
  9. 13
      spec/helpers/content_helper_spec.rb

2
Gemfile

@ -19,6 +19,8 @@ gem "bootsnap", ">= 1.4.4", require: false
gem "govuk-components"
# GOV UK component form builder DSL
gem "govuk_design_system_formbuilder"
# Convert Markdown into GOV.UK frontend-styled HTML
gem "govuk_markdown"
# GOV UK Notify
gem "notifications-ruby-client"
# Turbo and Stimulus

5
Gemfile.lock

@ -181,6 +181,9 @@ GEM
activemodel (>= 6.1)
activesupport (>= 6.1)
deep_merge (~> 1.2.1)
govuk_markdown (1.0.0)
activesupport
redcarpet
has_scope (0.8.0)
actionpack (>= 5.2)
activesupport (>= 5.2)
@ -328,6 +331,7 @@ GEM
rb-fsevent (0.11.1)
rb-inotify (0.10.1)
ffi (~> 1.0)
redcarpet (3.5.1)
redis (4.6.0)
regexp_parser (2.2.1)
request_store (1.5.1)
@ -476,6 +480,7 @@ DEPENDENCIES
factory_bot_rails
govuk-components
govuk_design_system_formbuilder
govuk_markdown
hotwire-rails
json-schema
listen (~> 3.3)

11
app/controllers/content_controller.rb

@ -0,0 +1,11 @@
class ContentController < ApplicationController
include ContentHelper
def accessibility_statement
render_content_page :accessibility_statement
end
def privacy_notice
render_content_page :privacy_notice, page_title: "Privacy notice for tenants and buyers of new social housing"
end
end

14
app/helpers/content_helper.rb

@ -0,0 +1,14 @@
module ContentHelper
def render_content_page(page_name, page_title: nil, locals: {})
raw_content = File.read("app/views/content/#{page_name}.md")
content_with_erb_tags_replaced = ApplicationController.renderer.render(
inline: raw_content,
locals: locals
)
@page_title = page_title || page_name.to_s.humanize
@page_content = GovukMarkdown.render(content_with_erb_tags_replaced).html_safe
render "content/page"
end
end

0
app/views/content/accessibility_statement.md

9
app/views/content/page.html.erb

@ -0,0 +1,9 @@
<%= content_for :title, @page_title %>
<div class="govuk-grid-row">
<div class="govuk-grid-column-two-thirds-from-desktop">
<h1 class="govuk-heading-xl"><%= @page_title %></h1>
<%= @page_content %>
</div>
</div>

0
app/views/content/privacy_notice.md

4
config/routes.rb

@ -33,6 +33,10 @@ Rails.application.routes.draw do
root to: "start#index"
# Content pages
get "/accessibility-statement", to: "content#accessibility_statement"
get "/privacy-notice", to: "content#privacy_notice"
resources :users do
member do
get "password/edit", to: "users#edit_password"

13
spec/helpers/content_helper_spec.rb

@ -0,0 +1,13 @@
require "rails_helper"
RSpec.describe ContentHelper do
let(:page_name) { "privacy_notice" }
describe "render content page" do
it "returns the page" do
expected_html = "Privacy notice"
expect(render_content_page(page_name)).to match(expected_html)
expect(page).to have_title("Privacy notice")
end
end
end
Loading…
Cancel
Save