metadata_presenter 0.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.
Files changed (42) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +68 -0
  4. data/Rakefile +29 -0
  5. data/app/assets/config/metadata_presenter_manifest.js +1 -0
  6. data/app/assets/stylesheets/metadata_presenter/application.css +15 -0
  7. data/app/controllers/metadata_presenter/answers_controller.rb +42 -0
  8. data/app/controllers/metadata_presenter/change_answer_controller.rb +8 -0
  9. data/app/controllers/metadata_presenter/engine_controller.rb +25 -0
  10. data/app/controllers/metadata_presenter/pages_controller.rb +14 -0
  11. data/app/controllers/metadata_presenter/service_controller.rb +8 -0
  12. data/app/controllers/metadata_presenter/submissions_controller.rb +13 -0
  13. data/app/helpers/metadata_presenter/application_helper.rb +7 -0
  14. data/app/jobs/metadata_presenter/application_job.rb +4 -0
  15. data/app/models/metadata_presenter/component.rb +5 -0
  16. data/app/models/metadata_presenter/metadata.rb +26 -0
  17. data/app/models/metadata_presenter/next_page.rb +18 -0
  18. data/app/models/metadata_presenter/page.rb +27 -0
  19. data/app/models/metadata_presenter/service.rb +28 -0
  20. data/app/validators/metadata_presenter/base_validator.rb +119 -0
  21. data/app/validators/metadata_presenter/max_length_validator.rb +7 -0
  22. data/app/validators/metadata_presenter/min_length_validator.rb +7 -0
  23. data/app/validators/metadata_presenter/required_validator.rb +7 -0
  24. data/app/validators/metadata_presenter/validate_answers.rb +48 -0
  25. data/app/validators/metadata_presenter/validate_schema.rb +39 -0
  26. data/app/views/errors/404.html +67 -0
  27. data/app/views/layouts/metadata_presenter/application.html.erb +33 -0
  28. data/app/views/metadata_presenter/component/_text.html.erb +7 -0
  29. data/app/views/metadata_presenter/header/show.html.erb +35 -0
  30. data/app/views/metadata_presenter/page/confirmation.html.erb +21 -0
  31. data/app/views/metadata_presenter/page/form.html.erb +19 -0
  32. data/app/views/metadata_presenter/page/singlequestion.html.erb +18 -0
  33. data/app/views/metadata_presenter/page/start.html.erb +38 -0
  34. data/app/views/metadata_presenter/page/summary.html.erb +73 -0
  35. data/config/initializers/default_metadata.rb +15 -0
  36. data/config/initializers/schemas.rb +13 -0
  37. data/config/routes.rb +8 -0
  38. data/lib/metadata_presenter.rb +4 -0
  39. data/lib/metadata_presenter/engine.rb +9 -0
  40. data/lib/metadata_presenter/version.rb +3 -0
  41. data/lib/tasks/metadata_presenter_tasks.rake +4 -0
  42. metadata +285 -0
@@ -0,0 +1,7 @@
1
+ module MetadataPresenter
2
+ class MaxLengthValidator < BaseValidator
3
+ def invalid_answer?
4
+ answers[component.name].to_s.size > component.validation[schema_key]
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module MetadataPresenter
2
+ class MinLengthValidator < BaseValidator
3
+ def invalid_answer?
4
+ answers[component.name].to_s.size < component.validation[schema_key]
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module MetadataPresenter
2
+ class RequiredValidator < BaseValidator
3
+ def invalid_answer?
4
+ answers[component.name].blank?
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,48 @@
1
+ module MetadataPresenter
2
+ class ValidateAnswers
3
+ attr_reader :page, :components, :answers
4
+
5
+ def initialize(page:, answers:)
6
+ @page = page
7
+ @answers = answers
8
+ @components = Array(page.components)
9
+ end
10
+
11
+ def valid?
12
+ validators.map { |validator| validator.valid? }.all?
13
+ end
14
+
15
+ def invalid?
16
+ !valid?
17
+ end
18
+
19
+ def validators
20
+ components.map do |component|
21
+ component_validations(component).map do |key|
22
+ "MetadataPresenter::#{key.classify}Validator".constantize.new(
23
+ page: page,
24
+ answers: answers,
25
+ component: component
26
+ )
27
+ end
28
+ end.compact.flatten
29
+ end
30
+
31
+ def component_validations(component)
32
+ return [] if component.validation.blank?
33
+
34
+ component.validation.reject do |_, value|
35
+ value.blank? ||
36
+ (optional_question?(component) && question_not_answered?)
37
+ end.keys
38
+ end
39
+
40
+ def optional_question?(component)
41
+ component.validation['required'] == false
42
+ end
43
+
44
+ def question_not_answered?
45
+ answers.values.any?(&:blank?)
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,39 @@
1
+ class SchemaNotFoundError < StandardError
2
+ end
3
+
4
+ class MetadataPresenter::ValidateSchema
5
+ class << self
6
+ def before(controller)
7
+ return unless controller.request.post?
8
+
9
+ schema_name = "request.#{controller.request.params['controller']}"
10
+ validate(controller.request.params, schema_name)
11
+ rescue JSON::Schema::ValidationError, JSON::Schema::SchemaError, SchemaNotFoundError => e
12
+ controller.render(
13
+ json: ErrorsSerializer.new(message: e.message).attributes,
14
+ status: :unprocessable_entity
15
+ )
16
+ end
17
+
18
+ def validate(metadata, schema_name)
19
+ schema = JSON::Validator.schema_for_uri(schema_name)&.schema || find(schema_name)
20
+ JSON::Validator.validate!(schema, metadata)
21
+ end
22
+
23
+ def find(schema_name)
24
+ schema_file = schema_name.gsub('.', '/')
25
+ schema = JSON.parse(
26
+ File.read(
27
+ File.join(
28
+ Rails.application.config.schemas_directory, "#{schema_file}.json"
29
+ )
30
+ )
31
+ )
32
+ jschema = JSON::Schema.new(schema, Addressable::URI.parse(schema['_name']))
33
+ JSON::Validator.add_schema(jschema)
34
+ JSON::Validator.schema_for_uri(schema_name).schema
35
+ rescue Errno::ENOENT
36
+ raise SchemaNotFoundError.new("Schema not found => #{schema_name}")
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ .rails-default-error-page {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ .rails-default-error-page div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ .rails-default-error-page div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ .rails-default-error-page h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ .rails-default-error-page div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body class="rails-default-error-page">
58
+ <!-- This file lives in public/404.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The page you were looking for doesn't exist.</h1>
62
+ <p>You may have mistyped the address or the page may have moved.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,33 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= service.service_name %></title>
5
+ <%= csrf_meta_tags %>
6
+ <%= csp_meta_tag %>
7
+
8
+ <link rel="shortcut icon" sizes="16x16 32x32 48x48" href="<%= asset_pack_url('media/images/favicon.ico') %>" type="image/x-icon" />
9
+ <link rel="mask-icon" href="<%= asset_pack_url('media/images/govuk-mask-icon.svg') %>" color="blue">
10
+ <link rel="apple-touch-icon" sizes="180x180" href="<%= asset_pack_url('media/images/govuk-apple-touch-icon-180x180.png') %>">
11
+ <link rel="apple-touch-icon" sizes="167x167" href="<%= asset_pack_url('media/images/govuk-apple-touch-icon-167x167.png') %>">
12
+ <link rel="apple-touch-icon" sizes="152x152" href="<%= asset_pack_url('media/images/govuk-apple-touch-icon-152x152.png') %>">
13
+ <link rel="apple-touch-icon" href="<%= asset_pack_url('media/images/govuk-apple-touch-icon.png') %>">
14
+
15
+ <%= stylesheet_pack_tag 'govuk' %>
16
+ <%= stylesheet_link_tag 'application', media: 'all' %>
17
+ <%= javascript_pack_tag 'application' %>
18
+ </head>
19
+
20
+ <body class="govuk-template__body">
21
+ <%= render template: 'metadata_presenter/header/show' %>
22
+ <div class="govuk-width-container govuk-body-m">
23
+ <main class="govuk-main-wrapper govuk-main-wrapper--auto-spacing" id="main-content" role="main">
24
+ <% if back_link.present? %>
25
+ <a class="govuk-back-link" href="<%= back_link %>">Back</a>
26
+ <% end %>
27
+
28
+ <%= yield %>
29
+ </main>
30
+ </div>
31
+ <%= javascript_pack_tag 'govuk' %>
32
+ </body>
33
+ </html>
@@ -0,0 +1,7 @@
1
+ <%=
2
+ f.govuk_text_field component.id.to_sym,
3
+ label: { text: component.label },
4
+ hint: { text: component.hint },
5
+ name: "answers[#{component.name}]",
6
+ value: @user_data[component.name]
7
+ %>
@@ -0,0 +1,35 @@
1
+ <header class="govuk-header" role="banner" data-module="govuk-header">
2
+ <div class="govuk-header__container govuk-width-container">
3
+ <div class="govuk-header__logo">
4
+ <a href="/" class="govuk-header__link govuk-header__link--homepage">
5
+ <span class="govuk-header__logotype">
6
+ <svg
7
+ aria-hidden="true"
8
+ focusable="false"
9
+ class="govuk-header__logotype-crown"
10
+ xmlns="http://www.w3.org/2000/svg"
11
+ viewbox="0 0 132 97"
12
+ height="30"
13
+ width="36"
14
+ >
15
+ <path
16
+ fill="currentColor" fill-rule="evenodd"
17
+ d="M25 30.2c3.5 1.5 7.7-.2 9.1-3.7 1.5-3.6-.2-7.8-3.9-9.2-3.6-1.4-7.6.3-9.1 3.9-1.4 3.5.3 7.5 3.9 9zM9 39.5c3.6 1.5 7.8-.2 9.2-3.7 1.5-3.6-.2-7.8-3.9-9.1-3.6-1.5-7.6.2-9.1 3.8-1.4 3.5.3 7.5 3.8 9zM4.4 57.2c3.5 1.5 7.7-.2 9.1-3.8 1.5-3.6-.2-7.7-3.9-9.1-3.5-1.5-7.6.3-9.1 3.8-1.4 3.5.3 7.6 3.9 9.1zm38.3-21.4c3.5 1.5 7.7-.2 9.1-3.8 1.5-3.6-.2-7.7-3.9-9.1-3.6-1.5-7.6.3-9.1 3.8-1.3 3.6.4 7.7 3.9 9.1zm64.4-5.6c-3.6 1.5-7.8-.2-9.1-3.7-1.5-3.6.2-7.8 3.8-9.2 3.6-1.4 7.7.3 9.2 3.9 1.3 3.5-.4 7.5-3.9 9zm15.9 9.3c-3.6 1.5-7.7-.2-9.1-3.7-1.5-3.6.2-7.8 3.7-9.1 3.6-1.5 7.7.2 9.2 3.8 1.5 3.5-.3 7.5-3.8 9zm4.7 17.7c-3.6 1.5-7.8-.2-9.2-3.8-1.5-3.6.2-7.7 3.9-9.1 3.6-1.5 7.7.3 9.2 3.8 1.3 3.5-.4 7.6-3.9 9.1zM89.3 35.8c-3.6 1.5-7.8-.2-9.2-3.8-1.4-3.6.2-7.7 3.9-9.1 3.6-1.5 7.7.3 9.2 3.8 1.4 3.6-.3 7.7-3.9 9.1zM69.7 17.7l8.9 4.7V9.3l-8.9 2.8c-.2-.3-.5-.6-.9-.9L72.4 0H59.6l3.5 11.2c-.3.3-.6.5-.9.9l-8.8-2.8v13.1l8.8-4.7c.3.3.6.7.9.9l-5 15.4v.1c-.2.8-.4 1.6-.4 2.4 0 4.1 3.1 7.5 7 8.1h.2c.3 0 .7.1 1 .1.4 0 .7 0 1-.1h.2c4-.6 7.1-4.1 7.1-8.1 0-.8-.1-1.7-.4-2.4V34l-5.1-15.4c.4-.2.7-.6 1-.9zM66 92.8c16.9 0 32.8 1.1 47.1 3.2 4-16.9 8.9-26.7 14-33.5l-9.6-3.4c1 4.9 1.1 7.2 0 10.2-1.5-1.4-3-4.3-4.2-8.7L108.6 76c2.8-2 5-3.2 7.5-3.3-4.4 9.4-10 11.9-13.6 11.2-4.3-.8-6.3-4.6-5.6-7.9 1-4.7 5.7-5.9 8-.5 4.3-8.7-3-11.4-7.6-8.8 7.1-7.2 7.9-13.5 2.1-21.1-8 6.1-8.1 12.3-4.5 20.8-4.7-5.4-12.1-2.5-9.5 6.2 3.4-5.2 7.9-2 7.2 3.1-.6 4.3-6.4 7.8-13.5 7.2-10.3-.9-10.9-8-11.2-13.8 2.5-.5 7.1 1.8 11 7.3L80.2 60c-4.1 4.4-8 5.3-12.3 5.4 1.4-4.4 8-11.6 8-11.6H55.5s6.4 7.2 7.9 11.6c-4.2-.1-8-1-12.3-5.4l1.4 16.4c3.9-5.5 8.5-7.7 10.9-7.3-.3 5.8-.9 12.8-11.1 13.8-7.2.6-12.9-2.9-13.5-7.2-.7-5 3.8-8.3 7.1-3.1 2.7-8.7-4.6-11.6-9.4-6.2 3.7-8.5 3.6-14.7-4.6-20.8-5.8 7.6-5 13.9 2.2 21.1-4.7-2.6-11.9.1-7.7 8.8 2.3-5.5 7.1-4.2 8.1.5.7 3.3-1.3 7.1-5.7 7.9-3.5.7-9-1.8-13.5-11.2 2.5.1 4.7 1.3 7.5 3.3l-4.7-15.4c-1.2 4.4-2.7 7.2-4.3 8.7-1.1-3-.9-5.3 0-10.2l-9.5 3.4c5 6.9 9.9 16.7 14 33.5 14.8-2.1 30.8-3.2 47.7-3.2z"
18
+ ></path>
19
+ <image src="{{ params.assetsPath | default('/assets/images') }}/govuk-logotype-crown.png" xlink:href="" class="govuk-header__logotype-crown-fallback-image" width="36" height="32"></image>
20
+ </svg>
21
+ <span class="govuk-header__logotype-text">
22
+ GOV.UK
23
+ </span>
24
+ </span>
25
+ </a>
26
+ </div>
27
+ <% if service.service_name.present? %>
28
+ <div class="govuk-header__content">
29
+ <a href="/" class="govuk-header__link govuk-header__link--service-name">
30
+ <%= service.service_name %>
31
+ </a>
32
+ <% end %>
33
+ </div>
34
+ </div>
35
+ </header>
@@ -0,0 +1,21 @@
1
+ <div class="govuk-panel govuk-panel--confirmation" data-block-id="<%= @page.id %>" data-block-property="heading" data-block-property-class="govuk-panel__body:lede">
2
+ <h1 class="govuk-panel__title">
3
+ <%= @page.heading %>
4
+ </h1>
5
+
6
+ <% if @page.lede %>
7
+ <div class="govuk-panel__body">
8
+ <p><%= @page.lede %></p>
9
+ </div>
10
+ <% end %>
11
+ </div>
12
+
13
+ <% if @page.body %>
14
+ <div class="govuk-grid-row">
15
+ <div class="govuk-grid-column-two-thirds">
16
+ <div class="fb-body govuk-prose-scope" data-block-id="<%= @page.id %>" data-block-property="body">
17
+ <%= @page.body %>
18
+ </div>
19
+ </div>
20
+ </div>
21
+ <% end %>
@@ -0,0 +1,19 @@
1
+ <div class="fb-main-grid-wrapper" data-block-id="<%= @page.id %>" data-block-type="page" data-block-pagetype="<%= @page.type %>">
2
+ <div class="govuk-grid-row">
3
+ <div class="govuk-grid-column-two-thirds">
4
+ <% if @page.body %>
5
+ <p class="govuk-body-l" data-block-id="<%= @page.id %>" data-block-property="lede">
6
+ <%= to_markdown(@page.body) %>
7
+ </p>
8
+ <%- end %>
9
+ <%= form_tag(reserved_answers_path, method: :post) do %>
10
+ <button class='govuk-button govuk-button--start govuk-!-margin-top-2'>
11
+ Continue
12
+ <svg class="govuk-button__start-icon" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewBox="0 0 33 40" aria-hidden="true" focusable="false">
13
+ <path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z" />
14
+ </svg>
15
+ </button>
16
+ <% end %>
17
+ </div>
18
+ </div>
19
+ </div>
@@ -0,0 +1,18 @@
1
+ <div class="fb-main-grid-wrapper" data-block-id="<%= @page.id %>" data-block-type="page" data-block-pagetype="<%= @page.type %>">
2
+ <div class="govuk-grid-row">
3
+ <div class="govuk-grid-column-two-thirds">
4
+ <h1 class="<%= @page.heading_class %>" data-block-id="<%= @page.id %>" data-block-property="heading">
5
+ <%= @page.heading.html_safe %>
6
+ </h1>
7
+
8
+ <%= form_for @page, url: reserved_answers_path(@page.url) do |f| %>
9
+ <%= f.govuk_error_summary %>
10
+ <% @page.components.each do |component| %>
11
+ <%= render partial: component, locals: { component: component, f: f } %>
12
+ <% end %>
13
+
14
+ <%= f.govuk_submit %>
15
+ <% end %>
16
+ </div>
17
+ </div>
18
+ </div>
@@ -0,0 +1,38 @@
1
+ <div class="fb-main-grid-wrapper" data-block-id="<%= @page.id %>" data-block-type="page" data-block-pagetype="<%= @page.type %>">
2
+ <div class="govuk-grid-row">
3
+ <div class="govuk-grid-column-two-thirds">
4
+ <% if @page.section_heading -%>
5
+ <p class="govuk-caption-l fb-section_heading" data-block-id="<%= @page.id %>" data-block-property="section_heading">
6
+ <%= @page.section_heading.html_safe %>
7
+ </p>
8
+ <%- end %>
9
+
10
+ <% if @page.heading %>
11
+ <h1 class="<%= @page.heading_class %>" data-block-id="<%= @page.id %>" data-block-property="heading">
12
+ <%= @page.heading.html_safe %>
13
+ </h1>
14
+ <% end %>
15
+
16
+ <% if @page.lede %>
17
+ <p class="govuk-body-l" data-block-id="<%= @page.id %>" data-block-property="lede">
18
+ <%= @page.lede.html_safe %>
19
+ </p>
20
+ <%- end %>
21
+
22
+ <% if @page.body %>
23
+ <p class="govuk-body-l" data-block-id="<%= @page.id %>" data-block-property="lede">
24
+ <%= to_markdown(@page.body) %>
25
+ </p>
26
+ <%- end %>
27
+
28
+ <%= form_tag(reserved_answers_path(@page.url), method: :post) do %>
29
+ <button class='govuk-button govuk-button--start govuk-!-margin-top-2'>
30
+ Start
31
+ <svg class="govuk-button__start-icon" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewBox="0 0 33 40" aria-hidden="true" focusable="false">
32
+ <path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z" />
33
+ </svg>
34
+ </button>
35
+ <% end %>
36
+ </div>
37
+ </div>
38
+ </div>
@@ -0,0 +1,73 @@
1
+ <div class="govuk-grid-row">
2
+ <div class="govuk-grid-column-two-thirds">
3
+ <% if @page.section_heading.present? %>
4
+ <p class="govuk-caption-l fb-section-heading" data-block-id="<%= @page.id %>" data-block-property="section_heading">
5
+ <%= @page.section_heading %>
6
+ </p>
7
+ <% end %>
8
+
9
+ <% if @page.heading.present? %>
10
+ <h1 class="govuk-heading-xl" data-block-id="<%= @page.id %>" data-block-property="heading">
11
+ <%= @page.heading %>
12
+ </h1>
13
+ <% end %>
14
+
15
+ <% if @page.lede.present? %>
16
+ <p class="govuk-body-l" data-block-id="<%= @page.id %>" data-block-property="lede">
17
+ <%= @page.lede %>
18
+ </p>
19
+ <% end %>
20
+
21
+ <% if @page.body.present? %>
22
+ <div class="fb-body govuk-prose-scope" data-block-id="<%= @page.id %>" data-block-property="body">
23
+ <p><%= @page.body %></p>
24
+ </div>
25
+ <% end %>
26
+
27
+ <%= form_for @page, url: reserved_submissions_path do |f| %>
28
+ <div data-block-id="page.summary.answers" data-block-type="answers">
29
+ <dl class="fb-block fb-block-answers govuk-summary-list">
30
+ <% @service.pages.each do |page| %>
31
+ <% Array(page.components).each do |component| %>
32
+ <div class="govuk-summary-list__row">
33
+ <dt class="govuk-summary-list__key">
34
+ <%= component.label %>
35
+ </dt>
36
+
37
+ <dd class="govuk-summary-list__value">
38
+ <%= @user_data[component.name] %>
39
+ </dd>
40
+ <dd class="govuk-summary-list__actions">
41
+ <%= link_to(change_answer_path(url: page.url),
42
+ class: 'govuk-link',
43
+ method: :post) do %>
44
+ Change<span class="govuk-visually-hidden"> Your answer for <%= component.label %></span>
45
+ <% end %>
46
+ </a>
47
+ </dd>
48
+ </div>
49
+ <% end %>
50
+ <% end %>
51
+ </dl>
52
+ </div>
53
+
54
+ <% if @page.send_heading.present? %>
55
+ <h2 class="fb-send-heading govuk-heading-m" data-block-id="<%= @page.id %>" data-block-property="send_heading">
56
+ <%= @page.send_heading %>
57
+ </h2>
58
+ <% end %>
59
+
60
+ <% if @page.send_body.present? %>
61
+ <div class="fb-send-body" data-block-id="<%= @page.id %>" data-block-property="send_body">
62
+ <p>
63
+ <%= @page.send_body %>
64
+ </p>
65
+ </div>
66
+ <% end %>
67
+
68
+ <button data-prevent-double-click="true" class="fb-block fb-block-actions govuk-button" data-module="govuk-button" data-block-id="actions" data-block-type="actions">
69
+ Accept and send application
70
+ </button>
71
+ <% end %>
72
+ </div>
73
+ </div>
@@ -0,0 +1,15 @@
1
+ Rails.application.config.default_metadata_directory = MetadataPresenter::Engine.root.join('default_metadata')
2
+
3
+ Rails.application.config.default_metadata = {}
4
+
5
+ Rails.logger.info('Loading default metadata')
6
+ default_metadata = Dir.glob("#{Rails.application.config.default_metadata_directory}/*/**")
7
+ default_metadata.each do |metadata_file|
8
+ metadata = JSON.parse(File.read(metadata_file))
9
+ Rails.logger.info(metadata['_id'])
10
+ Rails.application.config.default_metadata[metadata['_id']] = metadata
11
+ end
12
+
13
+ Rails.logger.info(
14
+ "Total loaded default metadata => #{Rails.application.config.default_metadata.count}"
15
+ )