metadata_presenter 0.21.0 → 0.25.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/Rakefile +1 -1
- data/app/controllers/metadata_presenter/engine_controller.rb +1 -1
- data/app/helpers/metadata_presenter/application_helper.rb +2 -2
- data/app/models/metadata_presenter/component.rb +1 -1
- data/app/models/metadata_presenter/date_field.rb +2 -0
- data/app/models/metadata_presenter/item.rb +0 -4
- data/app/models/metadata_presenter/metadata.rb +3 -3
- data/app/models/metadata_presenter/page.rb +27 -1
- data/app/models/metadata_presenter/page_answers.rb +5 -7
- data/app/models/metadata_presenter/service.rb +1 -1
- data/app/presenters/metadata_presenter/page_answers_presenter.rb +7 -5
- data/app/validators/metadata_presenter/validate_answers.rb +4 -4
- data/app/validators/metadata_presenter/validate_schema.rb +6 -1
- data/app/views/metadata_presenter/attribute/_heading.html.erb +7 -0
- data/app/views/metadata_presenter/component/_components.html.erb +20 -0
- data/app/views/metadata_presenter/page/checkanswers.html.erb +14 -1
- data/app/views/metadata_presenter/page/confirmation.html.erb +3 -1
- data/app/views/metadata_presenter/page/content.html.erb +3 -1
- data/app/views/metadata_presenter/page/multiplequestions.html.erb +4 -3
- data/app/views/metadata_presenter/page/start.html.erb +2 -11
- data/config/initializers/page_components.rb +19 -0
- data/default_metadata/page/checkanswers.json +2 -1
- data/fixtures/invalid_content_page.json +72 -0
- data/fixtures/no_component_page.json +60 -0
- data/fixtures/version.json +7 -6
- data/lib/metadata_presenter/test_helpers.rb +1 -2
- data/lib/metadata_presenter/version.rb +1 -1
- data/schemas/page/checkanswers.json +8 -0
- data/schemas/service/base.json +20 -1
- metadata +58 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a35099977b4c88777f6fef3c8102abcea16dfa668920b05dc2d3de208f7ddfbe
|
4
|
+
data.tar.gz: e3251c67520b40aa6735adde064679adf4261dfa8bcb5310f17ef79e70caf173
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 44c3c7661eec4c14f8071565e0919c93105a5489857bd506fda5b0b6c631a7d76d95598d65f11cedba70fd8386a910be52f5ef06e38f1cb15a79f1ea3b7421f3
|
7
|
+
data.tar.gz: 4fb6607dd2626128cf87d1fa1296166635de4d235c5bf30cc3ed0089e9ff8b7b215d1e095a6ce6047b794163ccd287f0ed74184ccf0a8a656d404c2cf4a00668
|
data/Rakefile
CHANGED
@@ -21,7 +21,7 @@ end
|
|
21
21
|
|
22
22
|
task default: :rspec
|
23
23
|
|
24
|
-
APP_RAKEFILE = File.expand_path(
|
24
|
+
APP_RAKEFILE = File.expand_path('spec/dummy/Rakefile', __dir__)
|
25
25
|
load 'rails/tasks/engine.rake'
|
26
26
|
load 'rails/tasks/statistics.rake'
|
27
27
|
Bundler::GemHelper.install_tasks
|
@@ -12,9 +12,9 @@ module MetadataPresenter
|
|
12
12
|
# <%=m '# Some markdown' %>
|
13
13
|
#
|
14
14
|
def m(text)
|
15
|
-
|
15
|
+
Kramdown::Document.new(text).to_html.html_safe
|
16
16
|
end
|
17
|
-
|
17
|
+
alias_method :to_markdown, :m
|
18
18
|
|
19
19
|
def default_text(property)
|
20
20
|
MetadataPresenter::DefaultText[property]
|
@@ -9,8 +9,8 @@ class MetadataPresenter::Metadata
|
|
9
9
|
@editor = editor
|
10
10
|
end
|
11
11
|
|
12
|
-
def to_json
|
13
|
-
|
12
|
+
def to_json(*_args)
|
13
|
+
to_h.to_json
|
14
14
|
end
|
15
15
|
|
16
16
|
def id
|
@@ -21,7 +21,7 @@ class MetadataPresenter::Metadata
|
|
21
21
|
metadata._type
|
22
22
|
end
|
23
23
|
|
24
|
-
def respond_to_missing?(method_name,
|
24
|
+
def respond_to_missing?(method_name, _include_private = false)
|
25
25
|
metadata.respond_to?(method_name)
|
26
26
|
end
|
27
27
|
|
@@ -1,4 +1,7 @@
|
|
1
1
|
module MetadataPresenter
|
2
|
+
class PageComponentsNotDefinedError < StandardError
|
3
|
+
end
|
4
|
+
|
2
5
|
class Page < MetadataPresenter::Metadata
|
3
6
|
include ActiveModel::Validations
|
4
7
|
|
@@ -11,7 +14,7 @@ module MetadataPresenter
|
|
11
14
|
end
|
12
15
|
|
13
16
|
def editable_attributes
|
14
|
-
|
17
|
+
to_h.reject { |k, _| k.in?(%i[_id _type steps]) }
|
15
18
|
end
|
16
19
|
|
17
20
|
def components
|
@@ -27,5 +30,28 @@ module MetadataPresenter
|
|
27
30
|
def template
|
28
31
|
"metadata_presenter/#{type.gsub('.', '/')}"
|
29
32
|
end
|
33
|
+
|
34
|
+
def input_components
|
35
|
+
page_components(raw_type)[:input_components]
|
36
|
+
end
|
37
|
+
|
38
|
+
def content_components
|
39
|
+
page_components(raw_type)[:content_components]
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def page_components(page_type)
|
45
|
+
values = Rails.application.config.page_components[page_type]
|
46
|
+
if values.blank?
|
47
|
+
raise PageComponentsNotDefinedError, "No page components defined for #{page_type} in config initialiser"
|
48
|
+
end
|
49
|
+
|
50
|
+
values
|
51
|
+
end
|
52
|
+
|
53
|
+
def raw_type
|
54
|
+
type.gsub('page.', '')
|
55
|
+
end
|
30
56
|
end
|
31
57
|
end
|
@@ -12,16 +12,14 @@ module MetadataPresenter
|
|
12
12
|
ValidateAnswers.new(self, components: components).valid?
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
page.components
|
17
|
-
end
|
15
|
+
delegate :components, to: :page
|
18
16
|
|
19
|
-
def respond_to_missing?(method_name,
|
17
|
+
def respond_to_missing?(method_name, _include_private = false)
|
20
18
|
method_name.to_s.in?(components.map(&:id))
|
21
19
|
end
|
22
20
|
|
23
|
-
def method_missing(method_name, *
|
24
|
-
component = components.find { |
|
21
|
+
def method_missing(method_name, *_args)
|
22
|
+
component = components.find { |c| c.id == method_name.to_s }
|
25
23
|
|
26
24
|
if component && component.type == 'date'
|
27
25
|
date_answer(component.id)
|
@@ -42,7 +40,7 @@ module MetadataPresenter
|
|
42
40
|
GOVUKDesignSystemFormBuilder::Elements::Date::SEGMENTS[:month],
|
43
41
|
GOVUKDesignSystemFormBuilder::Elements::Date::SEGMENTS[:year]
|
44
42
|
].map do |segment|
|
45
|
-
answers["#{component_id
|
43
|
+
answers["#{component_id}(#{segment})"]
|
46
44
|
end
|
47
45
|
end
|
48
46
|
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module MetadataPresenter
|
2
2
|
class PageAnswersPresenter
|
3
|
-
FIRST_ANSWER = 0
|
4
|
-
NO_USER_INPUT = %w
|
3
|
+
FIRST_ANSWER = 0
|
4
|
+
NO_USER_INPUT = %w[page.checkanswers page.confirmation page.content].freeze
|
5
5
|
|
6
6
|
def self.map(view:, pages:, answers:)
|
7
|
-
user_input_pages(pages).map
|
7
|
+
user_input_pages(pages).map { |page|
|
8
8
|
Array(page.components).map do |component|
|
9
9
|
new(
|
10
10
|
view: view,
|
@@ -13,7 +13,7 @@ module MetadataPresenter
|
|
13
13
|
answers: answers
|
14
14
|
)
|
15
15
|
end
|
16
|
-
|
16
|
+
}.reject(&:empty?)
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.user_input_pages(pages)
|
@@ -21,6 +21,7 @@ module MetadataPresenter
|
|
21
21
|
end
|
22
22
|
|
23
23
|
attr_reader :view, :component, :page, :answers
|
24
|
+
|
24
25
|
delegate :url, to: :page
|
25
26
|
delegate :humanised_title, to: :component
|
26
27
|
|
@@ -37,6 +38,7 @@ module MetadataPresenter
|
|
37
38
|
value = @page_answers.send(component.id)
|
38
39
|
|
39
40
|
return '' if value.blank?
|
41
|
+
|
40
42
|
if self.class.private_method_defined?(component.type.to_sym)
|
41
43
|
send(component.type.to_sym, value)
|
42
44
|
else
|
@@ -62,7 +64,7 @@ module MetadataPresenter
|
|
62
64
|
end
|
63
65
|
|
64
66
|
def checkboxes(value)
|
65
|
-
value.join(
|
67
|
+
value.join('<br>').html_safe
|
66
68
|
end
|
67
69
|
end
|
68
70
|
end
|
@@ -8,7 +8,7 @@ module MetadataPresenter
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def valid?
|
11
|
-
validators.map
|
11
|
+
validators.map(&:valid?).all?
|
12
12
|
end
|
13
13
|
|
14
14
|
def invalid?
|
@@ -18,20 +18,20 @@ module MetadataPresenter
|
|
18
18
|
private
|
19
19
|
|
20
20
|
def validators
|
21
|
-
components.map
|
21
|
+
components.map { |component|
|
22
22
|
component_validations(component).map do |key|
|
23
23
|
"MetadataPresenter::#{key.classify}Validator".constantize.new(
|
24
24
|
page_answers: page_answers,
|
25
25
|
component: component
|
26
26
|
)
|
27
27
|
end
|
28
|
-
|
28
|
+
}.compact.flatten
|
29
29
|
end
|
30
30
|
|
31
31
|
def component_validations(component)
|
32
32
|
return [] if component.validation.blank?
|
33
33
|
|
34
|
-
component.validation.select { |_,value| value.present? }.keys
|
34
|
+
component.validation.select { |_, value| value.present? }.keys
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
@@ -7,6 +7,11 @@ class MetadataPresenter::ValidateSchema
|
|
7
7
|
return unless controller.request.post?
|
8
8
|
|
9
9
|
validate(controller.request.params, 'request.service')
|
10
|
+
|
11
|
+
metadata = controller.request.params['metadata']
|
12
|
+
Array(metadata['pages']).each do |page|
|
13
|
+
validate(page, page['_type'])
|
14
|
+
end
|
10
15
|
rescue JSON::Schema::ValidationError, JSON::Schema::SchemaError, SchemaNotFoundError => e
|
11
16
|
controller.render(
|
12
17
|
json: ErrorsSerializer.new(message: e.message).attributes,
|
@@ -32,7 +37,7 @@ class MetadataPresenter::ValidateSchema
|
|
32
37
|
JSON::Validator.add_schema(jschema)
|
33
38
|
JSON::Validator.schema_for_uri(schema_name).schema
|
34
39
|
rescue Errno::ENOENT
|
35
|
-
raise SchemaNotFoundError
|
40
|
+
raise SchemaNotFoundError, "Schema not found => #{schema_name}"
|
36
41
|
end
|
37
42
|
end
|
38
43
|
end
|
@@ -18,3 +18,23 @@
|
|
18
18
|
%>
|
19
19
|
</div>
|
20
20
|
<% end %>
|
21
|
+
|
22
|
+
<% if editable? %>
|
23
|
+
<ul class="component-activated-menu govuk-navigation editor-button govuk-button fb-govuk-button">
|
24
|
+
<% if input_components.present? %>
|
25
|
+
<ul>
|
26
|
+
<% input_components.each do |component| %>
|
27
|
+
<li><a href="#add-input-component" data-component-type="<%= component %>"></a>+ Add <%= component %> component</li>
|
28
|
+
<% end %>
|
29
|
+
</ul>
|
30
|
+
<% end %>
|
31
|
+
|
32
|
+
<% if content_components.present? %>
|
33
|
+
<ul>
|
34
|
+
<% content_components.each do |component| %>
|
35
|
+
<li><a href="#add-content-component" data-component-type="<%= component %>">+ Add <%= component %> component</a></li>
|
36
|
+
<% end %>
|
37
|
+
</ul>
|
38
|
+
<% end %>
|
39
|
+
</ul>
|
40
|
+
<% end %>
|
@@ -12,6 +12,17 @@
|
|
12
12
|
<% end %>
|
13
13
|
|
14
14
|
<%= form_for @page, url: reserved_submissions_path do |f| %>
|
15
|
+
|
16
|
+
<%= render partial: 'metadata_presenter/component/components',
|
17
|
+
locals: {
|
18
|
+
f: f,
|
19
|
+
components: @page.extra_components,
|
20
|
+
tag: nil,
|
21
|
+
classes: nil,
|
22
|
+
input_components: @page.input_components,
|
23
|
+
content_components: @page.content_components
|
24
|
+
} %>
|
25
|
+
|
15
26
|
<div data-block-id="page.checkanswers.answers" data-block-type="answers">
|
16
27
|
<dl class="fb-block fb-block-answers govuk-summary-list">
|
17
28
|
<% pages_presenters.each do |page_answers_presenters| %>
|
@@ -69,7 +80,9 @@
|
|
69
80
|
f: f,
|
70
81
|
components: @page.components,
|
71
82
|
tag: nil,
|
72
|
-
classes: nil
|
83
|
+
classes: nil,
|
84
|
+
input_components: @page.input_components,
|
85
|
+
content_components: @page.content_components
|
73
86
|
} %>
|
74
87
|
|
75
88
|
<button <%= 'disabled' if editable? %> 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">
|
@@ -3,8 +3,7 @@
|
|
3
3
|
<div class="govuk-grid-column-two-thirds">
|
4
4
|
|
5
5
|
<%= render 'metadata_presenter/attribute/section_heading' %>
|
6
|
-
|
7
|
-
<h1 class="govuk-heading-xl"><%= @page.heading %></h1>
|
6
|
+
<%= render 'metadata_presenter/attribute/heading' %>
|
8
7
|
|
9
8
|
<%= form_for @page_answers, as: :answers, url: @page.url, method: :post do |f| %>
|
10
9
|
<%= f.govuk_error_summary %>
|
@@ -13,7 +12,9 @@
|
|
13
12
|
f: f,
|
14
13
|
components: @page.components,
|
15
14
|
tag: :h2,
|
16
|
-
classes: 'govuk-heading-m govuk-!-margin-top-8'
|
15
|
+
classes: 'govuk-heading-m govuk-!-margin-top-8',
|
16
|
+
input_components: @page.input_components,
|
17
|
+
content_components: @page.content_components
|
17
18
|
}
|
18
19
|
%>
|
19
20
|
|
@@ -2,18 +2,9 @@
|
|
2
2
|
<div class="govuk-grid-row">
|
3
3
|
<div class="govuk-grid-column-two-thirds">
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
<% if @page.heading %>
|
8
|
-
<h1 class="fb-editable govuk-heading-xl"
|
9
|
-
data-fb-content-id="page[heading]"
|
10
|
-
data-fb-content-type="element">
|
11
|
-
<%= @page.heading %>
|
12
|
-
</h1>
|
13
|
-
<% end %>
|
14
|
-
|
5
|
+
<%= render 'metadata_presenter/attribute/section_heading' %>
|
6
|
+
<%= render 'metadata_presenter/attribute/heading' %>
|
15
7
|
<%= render 'metadata_presenter/attribute/lede' %>
|
16
|
-
|
17
8
|
<%= render 'metadata_presenter/attribute/body' %>
|
18
9
|
|
19
10
|
<%= form_tag(root_path, method: :post) do %>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
Rails.application.config.page_components =
|
2
|
+
ActiveSupport::HashWithIndifferentAccess.new({
|
3
|
+
checkanswers: {
|
4
|
+
input_components: %w(),
|
5
|
+
content_components: %w(content)
|
6
|
+
},
|
7
|
+
confirmation: {
|
8
|
+
input_components: %w(),
|
9
|
+
content_components: %w(content)
|
10
|
+
},
|
11
|
+
content: {
|
12
|
+
input_components: %w(),
|
13
|
+
content_components: %w(content)
|
14
|
+
},
|
15
|
+
multiplequestions: {
|
16
|
+
input_components: %w(text textarea number date radios checkboxes),
|
17
|
+
content_components: %w(content)
|
18
|
+
}
|
19
|
+
})
|
@@ -4,5 +4,6 @@
|
|
4
4
|
"heading": "Check your answers",
|
5
5
|
"send_heading": "Now send your application",
|
6
6
|
"send_body": "By submitting this application you confirm that, to the best of your knowledge, the details you are providing are correct.",
|
7
|
-
"components": []
|
7
|
+
"components": [],
|
8
|
+
"extra_components": []
|
8
9
|
}
|
@@ -0,0 +1,72 @@
|
|
1
|
+
{
|
2
|
+
"_id": "service.base",
|
3
|
+
"_type": "service.base",
|
4
|
+
"service_name": "Service name",
|
5
|
+
"created_by": "4634ec01-5618-45ec-a4e2-bb5aa587e751",
|
6
|
+
"configuration": {
|
7
|
+
"service": {
|
8
|
+
"_id": "config.service",
|
9
|
+
"_type": "config.service"
|
10
|
+
},
|
11
|
+
"meta": {
|
12
|
+
"_id": "config.meta",
|
13
|
+
"_type": "config.meta",
|
14
|
+
"items": [
|
15
|
+
{
|
16
|
+
"_id": "config.meta--link",
|
17
|
+
"_type": "link",
|
18
|
+
"href": "/cookies",
|
19
|
+
"text": "Cookies"
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"_id": "config.meta--link--2",
|
23
|
+
"_type": "link",
|
24
|
+
"href": "/privacy",
|
25
|
+
"text": "Privacy"
|
26
|
+
},
|
27
|
+
{
|
28
|
+
"_id": "config.meta--link--3",
|
29
|
+
"_type": "link",
|
30
|
+
"href": "/accessibility",
|
31
|
+
"text": "Accessibility"
|
32
|
+
}
|
33
|
+
]
|
34
|
+
}
|
35
|
+
},
|
36
|
+
"pages": [
|
37
|
+
{
|
38
|
+
"_uuid": "9626b2e9-5ef0-4070-8331-ac55151b22c4",
|
39
|
+
"_id": "page.start",
|
40
|
+
"_type": "page.start",
|
41
|
+
"heading": "Service name goes here",
|
42
|
+
"lede": "Use this service to:",
|
43
|
+
"body": "Use this service to:\r\n\r\n* do something\r\n* update your name, address or other details\r\n* do something else\r\n\r\nRegistering takes around 5 minutes.",
|
44
|
+
"before_you_start": "###Before you start\r\nYou can also register by post.\r\n\r\nThe online service is also available in Welsh (Cymraeg).\r\n\r\nYou cannot register for this service if you’re in the UK illegally.",
|
45
|
+
"steps": [],
|
46
|
+
"url": "/"
|
47
|
+
},
|
48
|
+
{
|
49
|
+
"_uuid": "1ed3e4ad-5098-41c9-b4b6-426e89f7804e",
|
50
|
+
"_id": "page.how-many-lights",
|
51
|
+
"_type": "page.content",
|
52
|
+
"section_heading": "Chain of Command",
|
53
|
+
"heading": "Tell me how many lights you see",
|
54
|
+
"body": "There are four lights!",
|
55
|
+
"components": [
|
56
|
+
{
|
57
|
+
"_id": "name_text_1",
|
58
|
+
"_type": "text",
|
59
|
+
"label": "Full name",
|
60
|
+
"name": "name_text_1",
|
61
|
+
"validation": {
|
62
|
+
"required": true,
|
63
|
+
"max_length": 10,
|
64
|
+
"min_length": 2
|
65
|
+
}
|
66
|
+
}
|
67
|
+
],
|
68
|
+
"url": "how-many-lights"
|
69
|
+
}
|
70
|
+
],
|
71
|
+
"locale": "en"
|
72
|
+
}
|
@@ -0,0 +1,60 @@
|
|
1
|
+
{
|
2
|
+
"_id": "service.base",
|
3
|
+
"_type": "service.base",
|
4
|
+
"service_name": "Service name",
|
5
|
+
"created_by": "4634ec01-5618-45ec-a4e2-bb5aa587e751",
|
6
|
+
"configuration": {
|
7
|
+
"service": {
|
8
|
+
"_id": "config.service",
|
9
|
+
"_type": "config.service"
|
10
|
+
},
|
11
|
+
"meta": {
|
12
|
+
"_id": "config.meta",
|
13
|
+
"_type": "config.meta",
|
14
|
+
"items": [
|
15
|
+
{
|
16
|
+
"_id": "config.meta--link",
|
17
|
+
"_type": "link",
|
18
|
+
"href": "/cookies",
|
19
|
+
"text": "Cookies"
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"_id": "config.meta--link--2",
|
23
|
+
"_type": "link",
|
24
|
+
"href": "/privacy",
|
25
|
+
"text": "Privacy"
|
26
|
+
},
|
27
|
+
{
|
28
|
+
"_id": "config.meta--link--3",
|
29
|
+
"_type": "link",
|
30
|
+
"href": "/accessibility",
|
31
|
+
"text": "Accessibility"
|
32
|
+
}
|
33
|
+
]
|
34
|
+
}
|
35
|
+
},
|
36
|
+
"pages": [
|
37
|
+
{
|
38
|
+
"_uuid": "9626b2e9-5ef0-4070-8331-ac55151b22c4",
|
39
|
+
"_id": "page.start",
|
40
|
+
"_type": "page.start",
|
41
|
+
"heading": "Service name goes here",
|
42
|
+
"lede": "Use this service to:",
|
43
|
+
"body": "Use this service to:\r\n\r\n* do something\r\n* update your name, address or other details\r\n* do something else\r\n\r\nRegistering takes around 5 minutes.",
|
44
|
+
"before_you_start": "###Before you start\r\nYou can also register by post.\r\n\r\nThe online service is also available in Welsh (Cymraeg).\r\n\r\nYou cannot register for this service if you’re in the UK illegally.",
|
45
|
+
"steps": [],
|
46
|
+
"url": "/"
|
47
|
+
},
|
48
|
+
{
|
49
|
+
"_uuid": "b238a22f-c180-48d0-a7d9-8aad2036f1f2",
|
50
|
+
"_id": "page._confirmation",
|
51
|
+
"_type": "page.confirmation",
|
52
|
+
"body": "You'll receive a confirmation email",
|
53
|
+
"heading": "Complaint sent",
|
54
|
+
"lede": "Optional lede",
|
55
|
+
"url": "/confirmation",
|
56
|
+
"components": []
|
57
|
+
}
|
58
|
+
],
|
59
|
+
"locale": "en"
|
60
|
+
}
|
data/fixtures/version.json
CHANGED
@@ -178,14 +178,14 @@
|
|
178
178
|
"legend": "Do you like Star Wars?",
|
179
179
|
"items": [
|
180
180
|
{
|
181
|
-
"_id": "do-you-like-star-
|
181
|
+
"_id": "do-you-like-star-wars_radios_1_item_1",
|
182
182
|
"_type": "radio",
|
183
183
|
"label": "Only on weekends",
|
184
184
|
"hint": "Optional item hint",
|
185
185
|
"value": "only-on-weekends"
|
186
186
|
},
|
187
187
|
{
|
188
|
-
"_id": "do-you-like-star-
|
188
|
+
"_id": "do-you-like-star-wars_radios_1_item_2",
|
189
189
|
"_type": "radio",
|
190
190
|
"label": "Hell no!",
|
191
191
|
"hint": "Optional item hint",
|
@@ -236,21 +236,21 @@
|
|
236
236
|
"legend": "What would you like on your burger?",
|
237
237
|
"items": [
|
238
238
|
{
|
239
|
-
"_id": "
|
239
|
+
"_id": "burgers_checkboxes_1_item_1",
|
240
240
|
"_type": "checkbox",
|
241
241
|
"label": "Beef, cheese, tomato",
|
242
242
|
"hint": "Optional item hint",
|
243
243
|
"value": "beef-cheese-tomato"
|
244
244
|
},
|
245
245
|
{
|
246
|
-
"_id": "
|
246
|
+
"_id": "burgers_checkboxes_1_item_2",
|
247
247
|
"_type": "checkbox",
|
248
248
|
"label": "Chicken, cheese, tomato",
|
249
249
|
"hint": "Optional item hint",
|
250
250
|
"value": "chicken-cheese-tomato"
|
251
251
|
},
|
252
252
|
{
|
253
|
-
"_id": "
|
253
|
+
"_id": "burgers_checkboxes_1_item_3",
|
254
254
|
"_type": "checkbox",
|
255
255
|
"label": "Mozzarella, cheddar, feta",
|
256
256
|
"hint": "Optional item hint",
|
@@ -350,7 +350,8 @@
|
|
350
350
|
"_type": "content",
|
351
351
|
"html": "Check yourself before you wreck yourself."
|
352
352
|
}
|
353
|
-
]
|
353
|
+
],
|
354
|
+
"extra_components": []
|
354
355
|
},
|
355
356
|
{
|
356
357
|
"_uuid": "b238a22f-c180-48d0-a7d9-8aad2036f1f2",
|
@@ -5,13 +5,12 @@ module MetadataPresenter
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def fixtures_directory
|
8
|
-
@
|
8
|
+
@fixtures_directory ||=
|
9
9
|
Pathname.new(MetadataPresenter::Engine.root.join('fixtures'))
|
10
10
|
end
|
11
11
|
|
12
12
|
def service_metadata
|
13
13
|
metadata_fixture(:version)
|
14
|
-
JSON.parse(File.read(fixtures_directory.join('version.json')))
|
15
14
|
end
|
16
15
|
|
17
16
|
def metadata_fixture(fixture_name)
|
@@ -43,6 +43,14 @@
|
|
43
43
|
"items": {
|
44
44
|
"$ref": "component.content"
|
45
45
|
}
|
46
|
+
},
|
47
|
+
"extra_components": {
|
48
|
+
"title": "Extra Components",
|
49
|
+
"description": "More form or content elements used on the page",
|
50
|
+
"type": "array",
|
51
|
+
"items": {
|
52
|
+
"$ref": "component.content"
|
53
|
+
}
|
46
54
|
}
|
47
55
|
},
|
48
56
|
"required": [
|
data/schemas/service/base.json
CHANGED
@@ -35,7 +35,26 @@
|
|
35
35
|
"pages": {
|
36
36
|
"type": "array",
|
37
37
|
"items": {
|
38
|
-
"
|
38
|
+
"anyOf": [
|
39
|
+
{
|
40
|
+
"$ref": "page.start"
|
41
|
+
},
|
42
|
+
{
|
43
|
+
"$ref": "page.checkanswers"
|
44
|
+
},
|
45
|
+
{
|
46
|
+
"$ref": "page.confirmation"
|
47
|
+
},
|
48
|
+
{
|
49
|
+
"$ref": "page.content"
|
50
|
+
},
|
51
|
+
{
|
52
|
+
"$ref": "page.multiplequestions"
|
53
|
+
},
|
54
|
+
{
|
55
|
+
"$ref": "page.singlequestion"
|
56
|
+
}
|
57
|
+
]
|
39
58
|
}
|
40
59
|
}
|
41
60
|
},
|
metadata
CHANGED
@@ -1,35 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metadata_presenter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.25.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- MoJ Online
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-03-
|
11
|
+
date: 2021-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: govuk_design_system_formbuilder
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
20
|
-
- - "<"
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 6.2.0
|
19
|
+
version: 2.1.5
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
24
|
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
30
|
-
|
26
|
+
version: 2.1.5
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: json-schema
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
31
32
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
33
|
+
version: 2.8.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.8.1
|
33
41
|
- !ruby/object:Gem::Dependency
|
34
42
|
name: kramdown
|
35
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -45,35 +53,41 @@ dependencies:
|
|
45
53
|
- !ruby/object:Gem::Version
|
46
54
|
version: 2.3.0
|
47
55
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
56
|
+
name: rails
|
49
57
|
requirement: !ruby/object:Gem::Requirement
|
50
58
|
requirements:
|
51
59
|
- - ">="
|
52
60
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
61
|
+
version: 6.0.3.4
|
62
|
+
- - "<"
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: 6.2.0
|
54
65
|
type: :runtime
|
55
66
|
prerelease: false
|
56
67
|
version_requirements: !ruby/object:Gem::Requirement
|
57
68
|
requirements:
|
58
69
|
- - ">="
|
59
70
|
- !ruby/object:Gem::Version
|
60
|
-
version:
|
71
|
+
version: 6.0.3.4
|
72
|
+
- - "<"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 6.2.0
|
61
75
|
- !ruby/object:Gem::Dependency
|
62
|
-
name:
|
76
|
+
name: better_errors
|
63
77
|
requirement: !ruby/object:Gem::Requirement
|
64
78
|
requirements:
|
65
79
|
- - ">="
|
66
80
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
68
|
-
type: :
|
81
|
+
version: '0'
|
82
|
+
type: :development
|
69
83
|
prerelease: false
|
70
84
|
version_requirements: !ruby/object:Gem::Requirement
|
71
85
|
requirements:
|
72
86
|
- - ">="
|
73
87
|
- !ruby/object:Gem::Version
|
74
|
-
version:
|
88
|
+
version: '0'
|
75
89
|
- !ruby/object:Gem::Dependency
|
76
|
-
name:
|
90
|
+
name: binding_of_caller
|
77
91
|
requirement: !ruby/object:Gem::Requirement
|
78
92
|
requirements:
|
79
93
|
- - ">="
|
@@ -87,7 +101,7 @@ dependencies:
|
|
87
101
|
- !ruby/object:Gem::Version
|
88
102
|
version: '0'
|
89
103
|
- !ruby/object:Gem::Dependency
|
90
|
-
name:
|
104
|
+
name: brakeman
|
91
105
|
requirement: !ruby/object:Gem::Requirement
|
92
106
|
requirements:
|
93
107
|
- - ">="
|
@@ -101,7 +115,7 @@ dependencies:
|
|
101
115
|
- !ruby/object:Gem::Version
|
102
116
|
version: '0'
|
103
117
|
- !ruby/object:Gem::Dependency
|
104
|
-
name:
|
118
|
+
name: byebug
|
105
119
|
requirement: !ruby/object:Gem::Requirement
|
106
120
|
requirements:
|
107
121
|
- - ">="
|
@@ -115,7 +129,7 @@ dependencies:
|
|
115
129
|
- !ruby/object:Gem::Version
|
116
130
|
version: '0'
|
117
131
|
- !ruby/object:Gem::Dependency
|
118
|
-
name:
|
132
|
+
name: rspec-rails
|
119
133
|
requirement: !ruby/object:Gem::Requirement
|
120
134
|
requirements:
|
121
135
|
- - ">="
|
@@ -129,7 +143,21 @@ dependencies:
|
|
129
143
|
- !ruby/object:Gem::Version
|
130
144
|
version: '0'
|
131
145
|
- !ruby/object:Gem::Dependency
|
132
|
-
name:
|
146
|
+
name: rubocop
|
147
|
+
requirement: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - "~>"
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: 1.10.0
|
152
|
+
type: :development
|
153
|
+
prerelease: false
|
154
|
+
version_requirements: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - "~>"
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: 1.10.0
|
159
|
+
- !ruby/object:Gem::Dependency
|
160
|
+
name: rubocop-govuk
|
133
161
|
requirement: !ruby/object:Gem::Requirement
|
134
162
|
requirements:
|
135
163
|
- - ">="
|
@@ -157,7 +185,7 @@ dependencies:
|
|
157
185
|
- !ruby/object:Gem::Version
|
158
186
|
version: '0'
|
159
187
|
- !ruby/object:Gem::Dependency
|
160
|
-
name:
|
188
|
+
name: simplecov-console
|
161
189
|
requirement: !ruby/object:Gem::Requirement
|
162
190
|
requirements:
|
163
191
|
- - ">="
|
@@ -171,7 +199,7 @@ dependencies:
|
|
171
199
|
- !ruby/object:Gem::Version
|
172
200
|
version: '0'
|
173
201
|
- !ruby/object:Gem::Dependency
|
174
|
-
name:
|
202
|
+
name: site_prism
|
175
203
|
requirement: !ruby/object:Gem::Requirement
|
176
204
|
requirements:
|
177
205
|
- - ">="
|
@@ -185,7 +213,7 @@ dependencies:
|
|
185
213
|
- !ruby/object:Gem::Version
|
186
214
|
version: '0'
|
187
215
|
- !ruby/object:Gem::Dependency
|
188
|
-
name:
|
216
|
+
name: sqlite3
|
189
217
|
requirement: !ruby/object:Gem::Requirement
|
190
218
|
requirements:
|
191
219
|
- - ">="
|
@@ -199,7 +227,7 @@ dependencies:
|
|
199
227
|
- !ruby/object:Gem::Version
|
200
228
|
version: '0'
|
201
229
|
- !ruby/object:Gem::Dependency
|
202
|
-
name:
|
230
|
+
name: yard
|
203
231
|
requirement: !ruby/object:Gem::Requirement
|
204
232
|
requirements:
|
205
233
|
- - ">="
|
@@ -253,6 +281,7 @@ files:
|
|
253
281
|
- app/views/errors/404.html
|
254
282
|
- app/views/layouts/metadata_presenter/application.html.erb
|
255
283
|
- app/views/metadata_presenter/attribute/_body.html.erb
|
284
|
+
- app/views/metadata_presenter/attribute/_heading.html.erb
|
256
285
|
- app/views/metadata_presenter/attribute/_lede.html.erb
|
257
286
|
- app/views/metadata_presenter/attribute/_section_heading.html.erb
|
258
287
|
- app/views/metadata_presenter/component/_checkboxes.html.erb
|
@@ -274,6 +303,7 @@ files:
|
|
274
303
|
- app/views/metadata_presenter/page/start.html.erb
|
275
304
|
- config/initializers/default_metadata.rb
|
276
305
|
- config/initializers/default_text.rb
|
306
|
+
- config/initializers/page_components.rb
|
277
307
|
- config/initializers/schemas.rb
|
278
308
|
- config/routes.rb
|
279
309
|
- default_metadata/component/checkboxes.json
|
@@ -300,6 +330,8 @@ files:
|
|
300
330
|
- default_metadata/string/error.number.json
|
301
331
|
- default_metadata/string/error.required.json
|
302
332
|
- default_text/content.json
|
333
|
+
- fixtures/invalid_content_page.json
|
334
|
+
- fixtures/no_component_page.json
|
303
335
|
- fixtures/non_finished_service.json
|
304
336
|
- fixtures/service.json
|
305
337
|
- fixtures/version.json
|