metadata_presenter 0.19.2 → 0.23.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 +4 -10
- data/app/models/metadata_presenter/component.rb +5 -1
- data/app/models/metadata_presenter/date_field.rb +2 -0
- data/app/models/metadata_presenter/metadata.rb +3 -3
- data/app/models/metadata_presenter/page.rb +1 -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 +11 -4
- 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 +8 -4
- data/app/views/metadata_presenter/page/confirmation.html.erb +8 -0
- data/app/views/metadata_presenter/page/content.html.erb +7 -13
- data/app/views/metadata_presenter/page/multiplequestions.html.erb +8 -13
- data/app/views/metadata_presenter/page/start.html.erb +2 -11
- data/default_metadata/component/checkboxes.json +4 -1
- data/default_metadata/component/date.json +1 -0
- data/default_metadata/component/number.json +1 -0
- data/default_metadata/component/radios.json +4 -1
- data/default_metadata/page/confirmation.json +2 -1
- data/fixtures/invalid_content_page.json +72 -0
- data/fixtures/no_component_page.json +60 -0
- data/fixtures/version.json +23 -5
- data/lib/metadata_presenter/test_helpers.rb +1 -2
- data/lib/metadata_presenter/version.rb +1 -1
- data/schemas/page/checkanswers.json +8 -10
- data/schemas/page/confirmation.json +8 -0
- data/schemas/page/content.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: d1b2ff20300f6b643a7c83f8885c640b375babed55cd30798ca079bbd67b0506
|
4
|
+
data.tar.gz: ba841ff80433e9ff917a2d006eca7a53f618193640815e7594415a8945003c57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1298d445703206b693fb9153255362433a4476bca5e982aac89a847c8a902013d066e729bdf645ba48fd0b5f4a780b972a94a14740b3db8ba55879439e6fd33f
|
7
|
+
data.tar.gz: 12439df97cda7c675df1f53ebb4151ebdfc64509c64ce08b466c9f16ed67b2f02fb06e9777458c5da37bfc27c54ad5f4368372f07c56292a624d2d36f24196ef
|
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
|
@@ -1,14 +1,8 @@
|
|
1
1
|
module MetadataPresenter
|
2
2
|
module ApplicationHelper
|
3
3
|
def main_title(component:, tag: :h1, classes: 'govuk-heading-xl')
|
4
|
-
|
5
|
-
|
6
|
-
component.legend
|
7
|
-
end
|
8
|
-
else
|
9
|
-
content_tag(tag, class: classes) do
|
10
|
-
component.label
|
11
|
-
end
|
4
|
+
content_tag(tag, class: classes) do
|
5
|
+
component.humanised_title
|
12
6
|
end
|
13
7
|
end
|
14
8
|
|
@@ -18,9 +12,9 @@ module MetadataPresenter
|
|
18
12
|
# <%=m '# Some markdown' %>
|
19
13
|
#
|
20
14
|
def m(text)
|
21
|
-
|
15
|
+
Kramdown::Document.new(text).to_html.html_safe
|
22
16
|
end
|
23
|
-
|
17
|
+
alias_method :to_markdown, :m
|
24
18
|
|
25
19
|
def default_text(property)
|
26
20
|
MetadataPresenter::DefaultText[property]
|
@@ -4,7 +4,7 @@ class MetadataPresenter::Component < MetadataPresenter::Metadata
|
|
4
4
|
end
|
5
5
|
|
6
6
|
def humanised_title
|
7
|
-
|
7
|
+
label || legend
|
8
8
|
end
|
9
9
|
|
10
10
|
def items
|
@@ -12,4 +12,8 @@ class MetadataPresenter::Component < MetadataPresenter::Metadata
|
|
12
12
|
MetadataPresenter::Item.new(item, editor: editor?)
|
13
13
|
end
|
14
14
|
end
|
15
|
+
|
16
|
+
def content?
|
17
|
+
type == 'content'
|
18
|
+
end
|
15
19
|
end
|
@@ -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
|
|
@@ -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,9 +1,10 @@
|
|
1
1
|
module MetadataPresenter
|
2
2
|
class PageAnswersPresenter
|
3
|
-
FIRST_ANSWER = 0
|
3
|
+
FIRST_ANSWER = 0
|
4
|
+
NO_USER_INPUT = %w[page.checkanswers page.confirmation page.content].freeze
|
4
5
|
|
5
6
|
def self.map(view:, pages:, answers:)
|
6
|
-
pages.map
|
7
|
+
user_input_pages(pages).map { |page|
|
7
8
|
Array(page.components).map do |component|
|
8
9
|
new(
|
9
10
|
view: view,
|
@@ -12,10 +13,15 @@ module MetadataPresenter
|
|
12
13
|
answers: answers
|
13
14
|
)
|
14
15
|
end
|
15
|
-
|
16
|
+
}.reject(&:empty?)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.user_input_pages(pages)
|
20
|
+
pages.reject { |page| page.type.in?(NO_USER_INPUT) }
|
16
21
|
end
|
17
22
|
|
18
23
|
attr_reader :view, :component, :page, :answers
|
24
|
+
|
19
25
|
delegate :url, to: :page
|
20
26
|
delegate :humanised_title, to: :component
|
21
27
|
|
@@ -32,6 +38,7 @@ module MetadataPresenter
|
|
32
38
|
value = @page_answers.send(component.id)
|
33
39
|
|
34
40
|
return '' if value.blank?
|
41
|
+
|
35
42
|
if self.class.private_method_defined?(component.type.to_sym)
|
36
43
|
send(component.type.to_sym, value)
|
37
44
|
else
|
@@ -57,7 +64,7 @@ module MetadataPresenter
|
|
57
64
|
end
|
58
65
|
|
59
66
|
def checkboxes(value)
|
60
|
-
value.join(
|
67
|
+
value.join('<br>').html_safe
|
61
68
|
end
|
62
69
|
end
|
63
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
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<% @page.components.each_with_index do |component, index| %>
|
2
|
+
<div class="fb-editable"
|
3
|
+
id="<%= component.id %>"
|
4
|
+
data-fb-content-type="<%= component.type %>"
|
5
|
+
data-fb-content-id="<%= "page[components[#{index}]]" %>"
|
6
|
+
data-fb-content-data="<%= component.to_json %>">
|
7
|
+
|
8
|
+
<%= render partial: component, locals: {
|
9
|
+
f: f,
|
10
|
+
component: component,
|
11
|
+
component_id: "page[components[#{index}]]",
|
12
|
+
input_title: main_title(
|
13
|
+
component: component,
|
14
|
+
tag: :h2,
|
15
|
+
classes: classes
|
16
|
+
)
|
17
|
+
}
|
18
|
+
%>
|
19
|
+
</div>
|
20
|
+
<% end %>
|
@@ -11,10 +11,6 @@
|
|
11
11
|
</h1>
|
12
12
|
<% end %>
|
13
13
|
|
14
|
-
<%= render 'metadata_presenter/attribute/lede' %>
|
15
|
-
|
16
|
-
<%= render 'metadata_presenter/attribute/body' %>
|
17
|
-
|
18
14
|
<%= form_for @page, url: reserved_submissions_path do |f| %>
|
19
15
|
<div data-block-id="page.checkanswers.answers" data-block-type="answers">
|
20
16
|
<dl class="fb-block fb-block-answers govuk-summary-list">
|
@@ -68,6 +64,14 @@
|
|
68
64
|
</div>
|
69
65
|
<% end %>
|
70
66
|
|
67
|
+
<%= render partial: 'metadata_presenter/component/components',
|
68
|
+
locals: {
|
69
|
+
f: f,
|
70
|
+
components: @page.components,
|
71
|
+
tag: nil,
|
72
|
+
classes: nil
|
73
|
+
} %>
|
74
|
+
|
71
75
|
<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">
|
72
76
|
Accept and send application
|
73
77
|
</button>
|
@@ -17,20 +17,14 @@
|
|
17
17
|
<%= render 'metadata_presenter/attribute/body' %>
|
18
18
|
|
19
19
|
<%= form_for @page_answers, as: :answers, url: @page.url, method: :post do |f| %>
|
20
|
-
<%= f.govuk_error_summary %>
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
f: f,
|
30
|
-
input_title: main_title(component: component) }
|
31
|
-
%>
|
32
|
-
</div>
|
33
|
-
<% end %>
|
21
|
+
<%= render partial: 'metadata_presenter/component/components',
|
22
|
+
locals: {
|
23
|
+
f: f,
|
24
|
+
components: @page.components,
|
25
|
+
tag: nil,
|
26
|
+
classes: nil
|
27
|
+
} %>
|
34
28
|
|
35
29
|
<%= f.govuk_submit(disabled: editable?) %>
|
36
30
|
<% end %>
|
@@ -3,23 +3,18 @@
|
|
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 %>
|
11
|
-
|
12
|
-
|
13
|
-
component: component,
|
14
|
-
component_id: "page[components[#{index}]]",
|
10
|
+
|
11
|
+
<%= render partial: 'metadata_presenter/component/components', locals: {
|
15
12
|
f: f,
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
%>
|
22
|
-
<% end %>
|
13
|
+
components: @page.components,
|
14
|
+
tag: :h2,
|
15
|
+
classes: 'govuk-heading-m govuk-!-margin-top-8'
|
16
|
+
}
|
17
|
+
%>
|
23
18
|
|
24
19
|
<%= f.govuk_submit(disabled: editable?) %>
|
25
20
|
<% end %>
|
@@ -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,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
@@ -326,20 +326,31 @@
|
|
326
326
|
"section_heading": "Chain of Command",
|
327
327
|
"heading": "Tell me how many lights you see",
|
328
328
|
"body": "There are four lights!",
|
329
|
-
"components": [
|
329
|
+
"components": [
|
330
|
+
{
|
331
|
+
"_id": "how-many-lights_content_1",
|
332
|
+
"_type": "content",
|
333
|
+
"html": "What lights?"
|
334
|
+
}
|
335
|
+
],
|
330
336
|
"url": "how-many-lights"
|
331
337
|
},
|
332
338
|
{
|
333
339
|
"_uuid": "e819d0c2-7062-4997-89cf-44d26d098404",
|
334
340
|
"_id": "page._check-answers",
|
335
341
|
"_type": "page.checkanswers",
|
336
|
-
"body": "Optional content",
|
337
342
|
"heading": "Review your answer",
|
338
|
-
"lede": "First paragraph",
|
339
343
|
"section_heading": "This section is optional",
|
340
344
|
"send_body": "By submitting this answer you confirm all your answers",
|
341
345
|
"send_heading": "Send your answer",
|
342
|
-
"url": "/check-answers"
|
346
|
+
"url": "/check-answers",
|
347
|
+
"components": [
|
348
|
+
{
|
349
|
+
"_id": "check-answers_content_1",
|
350
|
+
"_type": "content",
|
351
|
+
"html": "Check yourself before you wreck yourself."
|
352
|
+
}
|
353
|
+
]
|
343
354
|
},
|
344
355
|
{
|
345
356
|
"_uuid": "b238a22f-c180-48d0-a7d9-8aad2036f1f2",
|
@@ -348,7 +359,14 @@
|
|
348
359
|
"body": "You'll receive a confirmation email",
|
349
360
|
"heading": "Complaint sent",
|
350
361
|
"lede": "Optional lede",
|
351
|
-
"url": "/confirmation"
|
362
|
+
"url": "/confirmation",
|
363
|
+
"components": [
|
364
|
+
{
|
365
|
+
"_id": "confirmation_content_1",
|
366
|
+
"_type": "content",
|
367
|
+
"html": "Some day I will be the most powerful Jedi ever!"
|
368
|
+
}
|
369
|
+
]
|
352
370
|
}
|
353
371
|
],
|
354
372
|
"locale": "en"
|
@@ -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)
|
@@ -17,16 +17,6 @@
|
|
17
17
|
"type": "string",
|
18
18
|
"default": "Check your answers"
|
19
19
|
},
|
20
|
-
"lede": {
|
21
|
-
"title": "Lede",
|
22
|
-
"type": "string",
|
23
|
-
"description": "Content before the body"
|
24
|
-
},
|
25
|
-
"body": {
|
26
|
-
"title": "Body",
|
27
|
-
"type": "string",
|
28
|
-
"description": "Optional content before showing the summary"
|
29
|
-
},
|
30
20
|
"summary_of": {
|
31
21
|
"title": "Summary of",
|
32
22
|
"description": "Page/section that summary summarises"
|
@@ -45,6 +35,14 @@
|
|
45
35
|
"content": true,
|
46
36
|
"multiline": true,
|
47
37
|
"default": "By submitting this application you confirm that, to the best of your knowledge, the details you are providing are correct."
|
38
|
+
},
|
39
|
+
"components": {
|
40
|
+
"title": "Components",
|
41
|
+
"description": "The form or content elements used on the page",
|
42
|
+
"type": "array",
|
43
|
+
"items": {
|
44
|
+
"$ref": "component.content"
|
45
|
+
}
|
48
46
|
}
|
49
47
|
},
|
50
48
|
"required": [
|
@@ -19,6 +19,14 @@
|
|
19
19
|
},
|
20
20
|
"lede": {
|
21
21
|
"multiline": true
|
22
|
+
},
|
23
|
+
"components": {
|
24
|
+
"title": "Components",
|
25
|
+
"description": "The form or content elements used on the page",
|
26
|
+
"type": "array",
|
27
|
+
"items": {
|
28
|
+
"$ref": "component.content"
|
29
|
+
}
|
22
30
|
}
|
23
31
|
},
|
24
32
|
"required": [
|
data/schemas/page/content.json
CHANGED
@@ -7,6 +7,14 @@
|
|
7
7
|
"properties": {
|
8
8
|
"_type": {
|
9
9
|
"const": "page.content"
|
10
|
+
},
|
11
|
+
"components": {
|
12
|
+
"title": "Components",
|
13
|
+
"description": "The form or content elements used on the page",
|
14
|
+
"type": "array",
|
15
|
+
"items": {
|
16
|
+
"$ref": "component.content"
|
17
|
+
}
|
10
18
|
}
|
11
19
|
},
|
12
20
|
"allOf": [
|
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.23.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,9 +281,11 @@ 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
|
288
|
+
- app/views/metadata_presenter/component/_components.html.erb
|
259
289
|
- app/views/metadata_presenter/component/_content.html.erb
|
260
290
|
- app/views/metadata_presenter/component/_date.html.erb
|
261
291
|
- app/views/metadata_presenter/component/_number.html.erb
|
@@ -299,6 +329,8 @@ files:
|
|
299
329
|
- default_metadata/string/error.number.json
|
300
330
|
- default_metadata/string/error.required.json
|
301
331
|
- default_text/content.json
|
332
|
+
- fixtures/invalid_content_page.json
|
333
|
+
- fixtures/no_component_page.json
|
302
334
|
- fixtures/non_finished_service.json
|
303
335
|
- fixtures/service.json
|
304
336
|
- fixtures/version.json
|