metadata_presenter 0.10.0 → 0.13.2
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/app/controllers/metadata_presenter/pages_controller.rb +9 -0
- data/app/helpers/metadata_presenter/application_helper.rb +1 -27
- data/app/models/metadata_presenter/component.rb +14 -0
- data/app/models/metadata_presenter/date_field.rb +19 -0
- data/app/models/metadata_presenter/page_answers.rb +24 -2
- data/app/presenters/metadata_presenter/page_answers_presenter.rb +57 -0
- data/app/validators/metadata_presenter/base_validator.rb +9 -4
- data/app/validators/metadata_presenter/date_validator.rb +14 -0
- data/app/views/metadata_presenter/component/_checkboxes.html.erb +9 -0
- data/app/views/metadata_presenter/component/_date.html.erb +5 -0
- data/app/views/metadata_presenter/component/_radios.html.erb +9 -0
- data/app/views/metadata_presenter/page/checkanswers.html.erb +18 -20
- data/default_metadata/component/checkboxes.json +24 -0
- data/default_metadata/component/date.json +12 -0
- data/default_metadata/component/radios.json +18 -4
- data/default_metadata/definition/checkbox.json +7 -0
- data/default_metadata/definition/radio.json +2 -1
- data/default_metadata/string/error.date.json +6 -0
- data/fixtures/version.json +101 -0
- data/lib/metadata_presenter/version.rb +1 -1
- data/schemas/component/checkboxes.json +33 -0
- data/schemas/component/date.json +48 -0
- data/schemas/definition/checkbox.json +46 -0
- data/schemas/validations/validations.json +9 -0
- metadata +15 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25eab7ae4724a7b0efc235808753ec4d66b966c6d9d36aefea3938839d6a18fb
|
4
|
+
data.tar.gz: 548f0e1c5784f72a48f29ff2555f2ed41e77deb704037f33d6ab9042b08de25a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d33a47191c80f198c2c2318ae690b469398459d37e329667c5f81b0f857ecfa277f5f8ac797e18e2df94951dd43be551b63f9037137566e30b996e18bd1c15c
|
7
|
+
data.tar.gz: c9cdc90d35ce14f61f7afb9102fe39119dd84abdd4189a9f076aab5bf6bb861f4cc91bc841000718ae6184363d48a721b0fc3fe7b603baa4be46e99c8ccb9c26
|
@@ -11,5 +11,14 @@ module MetadataPresenter
|
|
11
11
|
not_found
|
12
12
|
end
|
13
13
|
end
|
14
|
+
|
15
|
+
def page_answers_presenters
|
16
|
+
PageAnswersPresenter.map(
|
17
|
+
view: view_context,
|
18
|
+
pages: service.pages,
|
19
|
+
answers: @user_data
|
20
|
+
)
|
21
|
+
end
|
22
|
+
helper_method :page_answers_presenters
|
14
23
|
end
|
15
24
|
end
|
@@ -3,7 +3,7 @@ module MetadataPresenter
|
|
3
3
|
def main_h1(component)
|
4
4
|
if component.legend.present?
|
5
5
|
content_tag(:legend, class: 'govuk-fieldset__legend govuk-fieldset__legend--l') do
|
6
|
-
content_tag(:h1, class: 'govuk-
|
6
|
+
content_tag(:h1, class: 'govuk-heading-xl') do
|
7
7
|
component.legend
|
8
8
|
end
|
9
9
|
end
|
@@ -14,32 +14,6 @@ module MetadataPresenter
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
## Display user answers on the view
|
18
|
-
## When the user doesn't answered yet the component will be blank
|
19
|
-
# or with data otherwise, so doing the if in every output is not
|
20
|
-
# pratical.
|
21
|
-
#
|
22
|
-
# The below example search for 'first_name' in the user data instance
|
23
|
-
# variable as long your load_user_data in the controller sets the variable.
|
24
|
-
#
|
25
|
-
# @example
|
26
|
-
# <%=a 'first_name' %>
|
27
|
-
#
|
28
|
-
def a(component_key)
|
29
|
-
if @user_data.present?
|
30
|
-
@user_data[component_key]
|
31
|
-
end
|
32
|
-
end
|
33
|
-
alias answer a
|
34
|
-
|
35
|
-
## Display user answers on the view formatted.
|
36
|
-
##
|
37
|
-
def formatted_answer(component_key)
|
38
|
-
user_answer = answer(component_key)
|
39
|
-
|
40
|
-
simple_format(user_answer) if user_answer.present?
|
41
|
-
end
|
42
|
-
|
43
17
|
# Renders markdown given a text.
|
44
18
|
#
|
45
19
|
# @example
|
@@ -2,4 +2,18 @@ class MetadataPresenter::Component < MetadataPresenter::Metadata
|
|
2
2
|
def to_partial_path
|
3
3
|
"metadata_presenter/component/#{type}"
|
4
4
|
end
|
5
|
+
|
6
|
+
def humanised_title
|
7
|
+
self.label || self.legend
|
8
|
+
end
|
9
|
+
|
10
|
+
def items
|
11
|
+
metadata.items.map do |item|
|
12
|
+
OpenStruct.new(
|
13
|
+
id: item['label'],
|
14
|
+
name: item['label'],
|
15
|
+
description: item['hint']
|
16
|
+
)
|
17
|
+
end
|
18
|
+
end
|
5
19
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module MetadataPresenter
|
2
|
+
class DateField
|
3
|
+
attr_reader :day, :month, :year
|
4
|
+
|
5
|
+
def initialize(day:, month:, year:)
|
6
|
+
@day = day
|
7
|
+
@month = month
|
8
|
+
@year = year
|
9
|
+
end
|
10
|
+
|
11
|
+
def present?
|
12
|
+
!blank?
|
13
|
+
end
|
14
|
+
|
15
|
+
def blank?
|
16
|
+
@day.blank? || @month.blank? || @year.blank?
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -17,11 +17,33 @@ module MetadataPresenter
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def respond_to_missing?(method_name, include_private = false)
|
20
|
-
|
20
|
+
method_name.to_s.in?(components.map(&:id))
|
21
21
|
end
|
22
22
|
|
23
23
|
def method_missing(method_name, *args, &block)
|
24
|
-
|
24
|
+
component = components.find { |component| component.id == method_name.to_s }
|
25
|
+
|
26
|
+
if component && component.type == 'date'
|
27
|
+
date_answer(component.id)
|
28
|
+
else
|
29
|
+
answers[method_name.to_s]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def date_answer(component_id)
|
34
|
+
date = raw_date_answer(component_id)
|
35
|
+
|
36
|
+
MetadataPresenter::DateField.new(day: date[0], month: date[1], year: date[2])
|
37
|
+
end
|
38
|
+
|
39
|
+
def raw_date_answer(component_id)
|
40
|
+
[
|
41
|
+
GOVUKDesignSystemFormBuilder::Elements::Date::SEGMENTS[:day],
|
42
|
+
GOVUKDesignSystemFormBuilder::Elements::Date::SEGMENTS[:month],
|
43
|
+
GOVUKDesignSystemFormBuilder::Elements::Date::SEGMENTS[:year]
|
44
|
+
].map do |segment|
|
45
|
+
answers["#{component_id.to_s}(#{segment})"]
|
46
|
+
end
|
25
47
|
end
|
26
48
|
|
27
49
|
private
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module MetadataPresenter
|
2
|
+
class PageAnswersPresenter
|
3
|
+
def self.map(view:, pages:, answers:)
|
4
|
+
pages.map do |page|
|
5
|
+
Array(page.components).map do |component|
|
6
|
+
new(
|
7
|
+
view: view,
|
8
|
+
component: component,
|
9
|
+
page: page,
|
10
|
+
answers: answers
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end.flatten
|
14
|
+
end
|
15
|
+
|
16
|
+
attr_reader :view, :component, :page, :answers
|
17
|
+
delegate :url, to: :page
|
18
|
+
delegate :humanised_title, to: :component
|
19
|
+
|
20
|
+
def initialize(view:, component:, page:, answers:)
|
21
|
+
@view = view
|
22
|
+
@component = component
|
23
|
+
@page = page
|
24
|
+
@answers = answers
|
25
|
+
|
26
|
+
@page_answers = PageAnswers.new(page, answers)
|
27
|
+
end
|
28
|
+
|
29
|
+
def answer
|
30
|
+
value = @page_answers.send(component.id)
|
31
|
+
|
32
|
+
return '' if value.blank?
|
33
|
+
if self.class.private_method_defined?(component.type.to_sym)
|
34
|
+
send(component.type.to_sym, value)
|
35
|
+
else
|
36
|
+
value
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def date(value)
|
43
|
+
I18n.l(
|
44
|
+
Date.civil(value.year.to_i, value.month.to_i, value.day.to_i),
|
45
|
+
format: '%d %B %Y'
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
def textarea(value)
|
50
|
+
view.simple_format(value, {}, wrapper_tag: 'span')
|
51
|
+
end
|
52
|
+
|
53
|
+
def checkboxes(value)
|
54
|
+
value.reject(&:blank?).join("<br>").html_safe
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -38,7 +38,7 @@ module MetadataPresenter
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def valid?
|
41
|
-
return true if
|
41
|
+
return true if allow_blank?
|
42
42
|
|
43
43
|
if invalid_answer?
|
44
44
|
error_message = custom_error_message || default_error_message
|
@@ -63,7 +63,12 @@ module MetadataPresenter
|
|
63
63
|
# @return [String] user answer for the specific component
|
64
64
|
#
|
65
65
|
def user_answer
|
66
|
-
page_answers.send(component.name)
|
66
|
+
value = page_answers.send(component.name)
|
67
|
+
if component.type == 'checkboxes'
|
68
|
+
Array(value).reject(&:blank?)
|
69
|
+
else
|
70
|
+
value
|
71
|
+
end
|
67
72
|
end
|
68
73
|
|
69
74
|
# The default error message will be look using the schema key.
|
@@ -115,7 +120,7 @@ module MetadataPresenter
|
|
115
120
|
#
|
116
121
|
def error_message_hash
|
117
122
|
{
|
118
|
-
control: component.
|
123
|
+
control: component.humanised_title,
|
119
124
|
schema_key.to_sym => component.validation[schema_key]
|
120
125
|
}
|
121
126
|
end
|
@@ -127,7 +132,7 @@ module MetadataPresenter
|
|
127
132
|
# @return [TrueClass]
|
128
133
|
#
|
129
134
|
def allow_blank?
|
130
|
-
|
135
|
+
user_answer.blank? && !self.class.name.demodulize.include?('RequiredValidator')
|
131
136
|
end
|
132
137
|
end
|
133
138
|
end
|
@@ -27,27 +27,25 @@
|
|
27
27
|
<%= form_for @page, url: reserved_submissions_path do |f| %>
|
28
28
|
<div data-block-id="page.checkanswers.answers" data-block-type="answers">
|
29
29
|
<dl class="fb-block fb-block-answers govuk-summary-list">
|
30
|
-
<%
|
31
|
-
|
32
|
-
<
|
33
|
-
|
34
|
-
|
35
|
-
</dt>
|
30
|
+
<% page_answers_presenters.each do |page_answers_presenter| %>
|
31
|
+
<div class="govuk-summary-list__row">
|
32
|
+
<dt class="govuk-summary-list__key">
|
33
|
+
<%= page_answers_presenter.humanised_title %>
|
34
|
+
</dt>
|
36
35
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
<% end %>
|
36
|
+
<dd class="govuk-summary-list__value">
|
37
|
+
<%= page_answers_presenter.answer %>
|
38
|
+
</dd>
|
39
|
+
<dd class="govuk-summary-list__actions">
|
40
|
+
<%= link_to(
|
41
|
+
change_answer_path(url: page_answers_presenter.url),
|
42
|
+
class: 'govuk-link'
|
43
|
+
) do %>
|
44
|
+
Change<span class="govuk-visually-hidden"> Your answer for <%= page_answers_presenter.humanised_title %></span>
|
45
|
+
<% end %>
|
46
|
+
</a>
|
47
|
+
</dd>
|
48
|
+
</div>
|
51
49
|
<% end %>
|
52
50
|
</dl>
|
53
51
|
</div>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
{
|
2
|
+
"_id": "component.checkboxes",
|
3
|
+
"_type": "checkboxes",
|
4
|
+
"errors": {},
|
5
|
+
"hint": "[Hint text (optional)]",
|
6
|
+
"items": [
|
7
|
+
{
|
8
|
+
"_id": "component_checkbox_1",
|
9
|
+
"_type": "checkbox",
|
10
|
+
"label": "Option",
|
11
|
+
"hint": "[Hint text (optional)]",
|
12
|
+
"value": "value-1"
|
13
|
+
},
|
14
|
+
{
|
15
|
+
"_id": "component_checkbox_2",
|
16
|
+
"_type": "checkbox",
|
17
|
+
"label": "Option",
|
18
|
+
"hint": "[Hint text (optional)]",
|
19
|
+
"value": "value-2"
|
20
|
+
}
|
21
|
+
],
|
22
|
+
"name": "component-name",
|
23
|
+
"legend": "Question"
|
24
|
+
}
|
@@ -2,9 +2,23 @@
|
|
2
2
|
"_id": "component.radios",
|
3
3
|
"_type": "radios",
|
4
4
|
"errors": {},
|
5
|
-
"hint": "
|
6
|
-
"
|
7
|
-
|
5
|
+
"hint": "[Hint text (optional)]",
|
6
|
+
"items": [
|
7
|
+
{
|
8
|
+
"_id": "component_radio_1",
|
9
|
+
"_type": "radio",
|
10
|
+
"label": "Option",
|
11
|
+
"hint": "[Hint text (optional)]",
|
12
|
+
"value": "value-1"
|
13
|
+
},
|
14
|
+
{
|
15
|
+
"_id": "component_radio_2",
|
16
|
+
"_type": "radio",
|
17
|
+
"label": "Option",
|
18
|
+
"hint": "[Hint text (optional)]",
|
19
|
+
"value": "value-2"
|
20
|
+
}
|
21
|
+
],
|
8
22
|
"name": "component-name",
|
9
|
-
"legend": "
|
23
|
+
"legend": "Question"
|
10
24
|
}
|
data/fixtures/version.json
CHANGED
@@ -165,6 +165,107 @@
|
|
165
165
|
"heading": "Family Hobbies",
|
166
166
|
"url": "/family-hobbies"
|
167
167
|
},
|
168
|
+
{
|
169
|
+
"_uuid": "4251b25e-08de-4dcb-8f2f-dd9848dcdca6",
|
170
|
+
"_id": "page.do-you-like-star-wars",
|
171
|
+
"_type": "page.singlequestion",
|
172
|
+
"components": [
|
173
|
+
{
|
174
|
+
"_id": "do-you-like-star-wars_radios_1",
|
175
|
+
"_type": "radios",
|
176
|
+
"errors": {},
|
177
|
+
"hint": "Component hint",
|
178
|
+
"legend": "Do you like Star Wars?",
|
179
|
+
"items": [
|
180
|
+
{
|
181
|
+
"_id": "do-you-like-star-wars_radio_1",
|
182
|
+
"_type": "radio",
|
183
|
+
"label": "Only on weekends",
|
184
|
+
"hint": "Optional item hint",
|
185
|
+
"value": "only-on-weekends"
|
186
|
+
},
|
187
|
+
{
|
188
|
+
"_id": "do-you-like-star-wars_radio_2",
|
189
|
+
"_type": "radio",
|
190
|
+
"label": "Hell no!",
|
191
|
+
"hint": "Optional item hint",
|
192
|
+
"value": "hell-no"
|
193
|
+
}
|
194
|
+
],
|
195
|
+
"name": "do-you-like-star-wars_radios_1",
|
196
|
+
"validation": {
|
197
|
+
"required": true
|
198
|
+
}
|
199
|
+
}
|
200
|
+
],
|
201
|
+
"heading": "Radio buttons",
|
202
|
+
"url": "/do-you-like-star-wars"
|
203
|
+
},
|
204
|
+
{
|
205
|
+
"_id": "page.holiday",
|
206
|
+
"url": "holiday",
|
207
|
+
"_type":"page.singlequestion",
|
208
|
+
"_uuid":"ff4557b2-486b-481e-9eef-f315718639e8",
|
209
|
+
"heading":"Question",
|
210
|
+
"components": [
|
211
|
+
{
|
212
|
+
"_id": "holiday_date_1",
|
213
|
+
"hint": "Component hint",
|
214
|
+
"name": "holiday_date_1",
|
215
|
+
"_type": "date",
|
216
|
+
"legend": "What is the day that you like to take holidays?",
|
217
|
+
"errors": {},
|
218
|
+
"date_type": "day-month-year",
|
219
|
+
"validation": {
|
220
|
+
"date": true,
|
221
|
+
"required": true
|
222
|
+
}
|
223
|
+
}
|
224
|
+
]
|
225
|
+
},
|
226
|
+
{
|
227
|
+
"_uuid": "7b748584-100e-4d81-a54a-5049190136cc",
|
228
|
+
"_id": "page.burgers",
|
229
|
+
"_type": "page.singlequestion",
|
230
|
+
"components": [
|
231
|
+
{
|
232
|
+
"_id": "burgers_checkboxes_1",
|
233
|
+
"_type": "checkboxes",
|
234
|
+
"errors": {},
|
235
|
+
"hint": "Select all that apply",
|
236
|
+
"legend": "What would you like on your burger?",
|
237
|
+
"items": [
|
238
|
+
{
|
239
|
+
"_id": "burgers_checkbox_1",
|
240
|
+
"_type": "checkbox",
|
241
|
+
"label": "Beef, cheese, tomato",
|
242
|
+
"hint": "Optional item hint",
|
243
|
+
"value": "beef-cheese-tomato"
|
244
|
+
},
|
245
|
+
{
|
246
|
+
"_id": "burgers_checkbox_2",
|
247
|
+
"_type": "checkbox",
|
248
|
+
"label": "Chicken, cheese, tomato",
|
249
|
+
"hint": "Optional item hint",
|
250
|
+
"value": "chicken-cheese-tomato"
|
251
|
+
},
|
252
|
+
{
|
253
|
+
"_id": "burgers_checkbox_3",
|
254
|
+
"_type": "checkbox",
|
255
|
+
"label": "Mozzarella, cheddar, feta",
|
256
|
+
"hint": "Optional item hint",
|
257
|
+
"value": "mozzarella-cheddar-feta"
|
258
|
+
}
|
259
|
+
],
|
260
|
+
"name": "burgers_checkboxes_1",
|
261
|
+
"validation": {
|
262
|
+
"required": true
|
263
|
+
}
|
264
|
+
}
|
265
|
+
],
|
266
|
+
"heading": "Checkboxes",
|
267
|
+
"url": "/burgers"
|
268
|
+
},
|
168
269
|
{
|
169
270
|
"_uuid": "e819d0c2-7062-4997-89cf-44d26d098404",
|
170
271
|
"_id": "page._check-answers",
|
@@ -0,0 +1,33 @@
|
|
1
|
+
{
|
2
|
+
"$id": "http://gov.uk/schema/v1.0.0/checkboxes",
|
3
|
+
"_name": "component.checkboxes",
|
4
|
+
"title": "Checkboxes",
|
5
|
+
"description": "Let users select one or more options from a list",
|
6
|
+
"type": "object",
|
7
|
+
"properties": {
|
8
|
+
"_type": {
|
9
|
+
"const": "checkboxes"
|
10
|
+
},
|
11
|
+
"items": {
|
12
|
+
"title": "Options",
|
13
|
+
"description": "Items that users can select",
|
14
|
+
"type": "array",
|
15
|
+
"items": {
|
16
|
+
"$ref": "definition.checkbox"
|
17
|
+
}
|
18
|
+
}
|
19
|
+
},
|
20
|
+
"allOf": [
|
21
|
+
{
|
22
|
+
"$ref": "definition.fieldset"
|
23
|
+
}
|
24
|
+
],
|
25
|
+
"transforms": {
|
26
|
+
"namespace": {
|
27
|
+
"propagation": "items[?(@._type === 'checkbox')]"
|
28
|
+
}
|
29
|
+
},
|
30
|
+
"required": [
|
31
|
+
"items"
|
32
|
+
]
|
33
|
+
}
|
@@ -0,0 +1,48 @@
|
|
1
|
+
{
|
2
|
+
"$id": "http://gov.uk/schema/v1.0.0/date",
|
3
|
+
"_name": "component.date",
|
4
|
+
"title": "Date",
|
5
|
+
"description": "Let users enter an exact date",
|
6
|
+
"type": "object",
|
7
|
+
"properties": {
|
8
|
+
"_type": {
|
9
|
+
"const": "date"
|
10
|
+
},
|
11
|
+
"name": {
|
12
|
+
"inputType": "date"
|
13
|
+
},
|
14
|
+
"date_type": {
|
15
|
+
"title": "Date type",
|
16
|
+
"description": "The format for entering dates",
|
17
|
+
"type": "string",
|
18
|
+
"enum": [
|
19
|
+
"day-month-year",
|
20
|
+
"month-year",
|
21
|
+
"day-month",
|
22
|
+
"year"
|
23
|
+
],
|
24
|
+
"default": "day-month-year"
|
25
|
+
}
|
26
|
+
},
|
27
|
+
"allOf": [
|
28
|
+
{
|
29
|
+
"$ref": "definition.fieldset"
|
30
|
+
},
|
31
|
+
{
|
32
|
+
"$ref": "validations#/definitions/date_bundle"
|
33
|
+
}
|
34
|
+
],
|
35
|
+
"composite": [
|
36
|
+
"day",
|
37
|
+
"month",
|
38
|
+
"year"
|
39
|
+
],
|
40
|
+
"definitions": {
|
41
|
+
"date_type_enum": {
|
42
|
+
"day-month-year": "Day / Month / Year",
|
43
|
+
"month-year": "Month / Year",
|
44
|
+
"year": "Year",
|
45
|
+
"day-month": "Day / Month"
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
{
|
2
|
+
"$id": "http://gov.uk/schema/v1.0.0/checkbox",
|
3
|
+
"_name": "definition.checkbox",
|
4
|
+
"title": "Checkbox item",
|
5
|
+
"description": "Component that provides a checkbox item",
|
6
|
+
"type": "object",
|
7
|
+
"properties": {
|
8
|
+
"_type": {
|
9
|
+
"const": "checkbox"
|
10
|
+
},
|
11
|
+
"value": {
|
12
|
+
"default": "yes"
|
13
|
+
},
|
14
|
+
"label": {
|
15
|
+
"skipOptional": true
|
16
|
+
},
|
17
|
+
"hint": {
|
18
|
+
"title": "Hint text",
|
19
|
+
"description": "Text to help users understand an option - appears in grey under the label",
|
20
|
+
"type": "string",
|
21
|
+
"content": true
|
22
|
+
},
|
23
|
+
"conditional_component": {
|
24
|
+
"$ref": "definition.conditionalcomponent"
|
25
|
+
}
|
26
|
+
},
|
27
|
+
"allOf": [
|
28
|
+
{
|
29
|
+
"$ref": "definition.namespace"
|
30
|
+
},
|
31
|
+
{
|
32
|
+
"$ref": "definition.option"
|
33
|
+
},
|
34
|
+
{
|
35
|
+
"$ref": "definition.name"
|
36
|
+
}
|
37
|
+
],
|
38
|
+
"required": [
|
39
|
+
"label"
|
40
|
+
],
|
41
|
+
"transforms": {
|
42
|
+
"namespace": {
|
43
|
+
"propagation": "conditional_component"
|
44
|
+
}
|
45
|
+
}
|
46
|
+
}
|
@@ -25,6 +25,15 @@
|
|
25
25
|
],
|
26
26
|
"default": true
|
27
27
|
},
|
28
|
+
"date": {
|
29
|
+
"title": "Date",
|
30
|
+
"description": "Whether the user must answer with a valid date",
|
31
|
+
"oneOf": [
|
32
|
+
{
|
33
|
+
"$ref": "definition.conditional.boolean"
|
34
|
+
}
|
35
|
+
]
|
36
|
+
},
|
28
37
|
"errors_required": {
|
29
38
|
"title": "Error messages for ‘Required’",
|
30
39
|
"allOf": [
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metadata_presenter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.13.2
|
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-02-
|
11
|
+
date: 2021-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -233,12 +233,15 @@ files:
|
|
233
233
|
- app/helpers/metadata_presenter/application_helper.rb
|
234
234
|
- app/jobs/metadata_presenter/application_job.rb
|
235
235
|
- app/models/metadata_presenter/component.rb
|
236
|
+
- app/models/metadata_presenter/date_field.rb
|
236
237
|
- app/models/metadata_presenter/metadata.rb
|
237
238
|
- app/models/metadata_presenter/next_page.rb
|
238
239
|
- app/models/metadata_presenter/page.rb
|
239
240
|
- app/models/metadata_presenter/page_answers.rb
|
240
241
|
- app/models/metadata_presenter/service.rb
|
242
|
+
- app/presenters/metadata_presenter/page_answers_presenter.rb
|
241
243
|
- app/validators/metadata_presenter/base_validator.rb
|
244
|
+
- app/validators/metadata_presenter/date_validator.rb
|
242
245
|
- app/validators/metadata_presenter/max_length_validator.rb
|
243
246
|
- app/validators/metadata_presenter/min_length_validator.rb
|
244
247
|
- app/validators/metadata_presenter/number_validator.rb
|
@@ -247,7 +250,10 @@ files:
|
|
247
250
|
- app/validators/metadata_presenter/validate_schema.rb
|
248
251
|
- app/views/errors/404.html
|
249
252
|
- app/views/layouts/metadata_presenter/application.html.erb
|
253
|
+
- app/views/metadata_presenter/component/_checkboxes.html.erb
|
254
|
+
- app/views/metadata_presenter/component/_date.html.erb
|
250
255
|
- app/views/metadata_presenter/component/_number.html.erb
|
256
|
+
- app/views/metadata_presenter/component/_radios.html.erb
|
251
257
|
- app/views/metadata_presenter/component/_text.html.erb
|
252
258
|
- app/views/metadata_presenter/component/_textarea.html.erb
|
253
259
|
- app/views/metadata_presenter/header/show.html.erb
|
@@ -259,18 +265,22 @@ files:
|
|
259
265
|
- config/initializers/default_metadata.rb
|
260
266
|
- config/initializers/schemas.rb
|
261
267
|
- config/routes.rb
|
268
|
+
- default_metadata/component/checkboxes.json
|
269
|
+
- default_metadata/component/date.json
|
262
270
|
- default_metadata/component/number.json
|
263
271
|
- default_metadata/component/radios.json
|
264
272
|
- default_metadata/component/text.json
|
265
273
|
- default_metadata/component/textarea.json
|
266
274
|
- default_metadata/config/meta.json
|
267
275
|
- default_metadata/config/service.json
|
276
|
+
- default_metadata/definition/checkbox.json
|
268
277
|
- default_metadata/definition/radio.json
|
269
278
|
- default_metadata/page/checkanswers.json
|
270
279
|
- default_metadata/page/confirmation.json
|
271
280
|
- default_metadata/page/singlequestion.json
|
272
281
|
- default_metadata/page/start.json
|
273
282
|
- default_metadata/service/base.json
|
283
|
+
- default_metadata/string/error.date.json
|
274
284
|
- default_metadata/string/error.max_length.json
|
275
285
|
- default_metadata/string/error.min_length.json
|
276
286
|
- default_metadata/string/error.number.json
|
@@ -283,6 +293,8 @@ files:
|
|
283
293
|
- lib/metadata_presenter/test_helpers.rb
|
284
294
|
- lib/metadata_presenter/version.rb
|
285
295
|
- lib/tasks/metadata_presenter_tasks.rake
|
296
|
+
- schemas/component/checkboxes.json
|
297
|
+
- schemas/component/date.json
|
286
298
|
- schemas/component/number.json
|
287
299
|
- schemas/component/radios.json
|
288
300
|
- schemas/component/text.json
|
@@ -291,6 +303,7 @@ files:
|
|
291
303
|
- schemas/config/meta.json
|
292
304
|
- schemas/config/service.json
|
293
305
|
- schemas/definition/block.json
|
306
|
+
- schemas/definition/checkbox.json
|
294
307
|
- schemas/definition/component.json
|
295
308
|
- schemas/definition/components.json
|
296
309
|
- schemas/definition/condition.base.json
|