metadata_presenter 3.3.7 → 3.3.9
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/engine_controller.rb +10 -0
- data/app/controllers/metadata_presenter/submissions_controller.rb +2 -0
- data/app/models/metadata_presenter/address_fieldset.rb +37 -0
- data/app/models/metadata_presenter/component.rb +0 -6
- data/app/models/metadata_presenter/evaluate_content_conditionals.rb +2 -2
- data/app/models/metadata_presenter/page_answers.rb +15 -2
- data/app/presenters/metadata_presenter/page_answers_presenter.rb +6 -0
- data/app/validators/metadata_presenter/address_validator.rb +46 -0
- data/app/validators/metadata_presenter/base_validator.rb +3 -3
- data/app/validators/metadata_presenter/postcode_validator.rb +53 -0
- data/app/views/metadata_presenter/component/_address.html.erb +46 -0
- data/config/initializers/supported_components.rb +2 -2
- data/config/locales/en.yml +10 -0
- data/default_metadata/component/address.json +13 -0
- data/default_metadata/string/error.address.json +6 -0
- data/default_metadata/string/error.postcode.json +6 -0
- data/fixtures/version.json +89 -56
- data/lib/metadata_presenter/version.rb +1 -1
- data/schemas/component/address.json +31 -0
- data/schemas/errors/errors.json +19 -0
- data/schemas/validations/validations.json +18 -0
- metadata +32 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 686438bb706d255bb141b89fe969fd8bc2a948221aca64973243806bb944d6ac
|
4
|
+
data.tar.gz: f812f2ce0b2d47038fcfdb86d627d29a5b33eacaf7f435601b381bc58314b218
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e1ca38299788d27690f79e36df3fb40cb770bfba680143989e0f0c5782c93de5d0787843298ab58429f6167c104ba77a7f793ae1a404b28efa4c4190a8dc813
|
7
|
+
data.tar.gz: 93b4f74dc4150ac14fb05ce8714b0e78e9a8348e8fbd97f7530d24c96806e4a4b24c4386aa27389372dd2475c28edcd013085394eadf5b1ecf97c63516e517c7
|
@@ -8,34 +8,44 @@ module MetadataPresenter
|
|
8
8
|
before_action :show_maintenance_page
|
9
9
|
|
10
10
|
def reload_user_data
|
11
|
+
# :nocov:
|
11
12
|
if defined? super
|
12
13
|
super
|
14
|
+
# :nocov:
|
13
15
|
else
|
14
16
|
load_user_data
|
15
17
|
end
|
16
18
|
end
|
17
19
|
|
18
20
|
def save_form_progress
|
21
|
+
# :nocov:
|
19
22
|
if defined? super
|
20
23
|
super
|
24
|
+
# :nocov:
|
21
25
|
end
|
22
26
|
end
|
23
27
|
|
24
28
|
def get_saved_progress(uuid)
|
29
|
+
# :nocov:
|
25
30
|
if defined? super
|
26
31
|
super(uuid)
|
32
|
+
# :nocov:
|
27
33
|
end
|
28
34
|
end
|
29
35
|
|
30
36
|
def increment_record_counter(uuid)
|
37
|
+
# :nocov:
|
31
38
|
if defined? super
|
32
39
|
super(uuid)
|
40
|
+
# :nocov:
|
33
41
|
end
|
34
42
|
end
|
35
43
|
|
36
44
|
def invalidate_record(uuid)
|
45
|
+
# :nocov:
|
37
46
|
if defined? super
|
38
47
|
super(uuid)
|
48
|
+
# :nocov:
|
39
49
|
end
|
40
50
|
end
|
41
51
|
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module MetadataPresenter
|
2
|
+
class AddressFieldset
|
3
|
+
extend ActiveModel::Translation
|
4
|
+
include ActiveModel::Validations
|
5
|
+
include ActionView::Helpers
|
6
|
+
|
7
|
+
DEFAULT_COUNTRY = 'United Kingdom'.freeze
|
8
|
+
FIELDS = %w[
|
9
|
+
address_line_one
|
10
|
+
address_line_two
|
11
|
+
city
|
12
|
+
county
|
13
|
+
postcode
|
14
|
+
country
|
15
|
+
].freeze
|
16
|
+
|
17
|
+
attr_reader(*FIELDS)
|
18
|
+
|
19
|
+
def initialize(address)
|
20
|
+
FIELDS.each do |field|
|
21
|
+
next unless address[field]
|
22
|
+
|
23
|
+
instance_variable_set(:"@#{field}", conform(address[field]))
|
24
|
+
end
|
25
|
+
|
26
|
+
@country ||= DEFAULT_COUNTRY
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_a
|
30
|
+
instance_values.values_at(*FIELDS).compact_blank
|
31
|
+
end
|
32
|
+
|
33
|
+
def conform(address_field)
|
34
|
+
sanitize(address_field, tags: [], attributes: []).strip
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -88,12 +88,6 @@ class MetadataPresenter::Component < MetadataPresenter::Metadata
|
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
91
|
-
def find_conditional_content_by_uuid(uuid)
|
92
|
-
metadata['conditionals'].select do |conditional|
|
93
|
-
conditional['_uuid'] == uuid
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
91
|
private
|
98
92
|
|
99
93
|
def validation_bundle_key
|
@@ -25,7 +25,7 @@ module MetadataPresenter
|
|
25
25
|
if candidate_component.conditionals.count == 1
|
26
26
|
# if there are only and rules or the particular case where there is only one condition
|
27
27
|
evaluation_conditions << evaluate_condition(candidate_component.conditionals[0])
|
28
|
-
|
28
|
+
candidate_component.uuid if evaluation_conditions.flatten.all?
|
29
29
|
elsif candidate_component.conditionals.count > 1
|
30
30
|
# if there are or rule
|
31
31
|
if candidate_component.conditionals[0][:_type] == 'and'
|
@@ -40,7 +40,7 @@ module MetadataPresenter
|
|
40
40
|
candidate_component.conditionals.map do |conditional|
|
41
41
|
evaluation_conditions << evaluate_condition(conditional)
|
42
42
|
end
|
43
|
-
|
43
|
+
candidate_component.uuid if evaluation_conditions.flatten.any?
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -34,11 +34,15 @@ module MetadataPresenter
|
|
34
34
|
answer_object.to_h if answer_object.present?
|
35
35
|
elsif component && component.type == 'checkboxes'
|
36
36
|
answers[method_name.to_s].to_a
|
37
|
+
elsif component && component.type == 'address'
|
38
|
+
address_answer(method_name.to_s)
|
37
39
|
else
|
38
40
|
sanitize(answers[method_name.to_s])
|
39
41
|
end
|
40
42
|
end
|
41
43
|
|
44
|
+
private
|
45
|
+
|
42
46
|
def upload_answer(component_id, _count)
|
43
47
|
file_details = answers[component_id.to_s]
|
44
48
|
|
@@ -141,8 +145,6 @@ module MetadataPresenter
|
|
141
145
|
end
|
142
146
|
end
|
143
147
|
|
144
|
-
private
|
145
|
-
|
146
148
|
def sanitize_filename(answer)
|
147
149
|
sanitize(filename(update_filename(answer)))
|
148
150
|
end
|
@@ -173,5 +175,16 @@ module MetadataPresenter
|
|
173
175
|
file_extension = File.extname(answer)
|
174
176
|
%w[.jfif .jpg].include?(file_extension)
|
175
177
|
end
|
178
|
+
|
179
|
+
# NOTE: Address component is different to other components in the sense it can
|
180
|
+
# produce different validation errors in different fields, and we need to track
|
181
|
+
# those errors between page renders, thus needing memoisation.
|
182
|
+
def address_answer(component_id)
|
183
|
+
@address_answer ||= {}
|
184
|
+
|
185
|
+
@address_answer[component_id] ||= MetadataPresenter::AddressFieldset.new(
|
186
|
+
answers.fetch(component_id, {})
|
187
|
+
)
|
188
|
+
end
|
176
189
|
end
|
177
190
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module MetadataPresenter
|
2
|
+
class AddressValidator < BaseValidator
|
3
|
+
REQUIRED_FIELDS = %i[
|
4
|
+
address_line_one
|
5
|
+
city
|
6
|
+
postcode
|
7
|
+
country
|
8
|
+
].freeze
|
9
|
+
|
10
|
+
OPTIONAL_FIELDS = %i[
|
11
|
+
address_line_two
|
12
|
+
county
|
13
|
+
].freeze
|
14
|
+
|
15
|
+
def valid?
|
16
|
+
return true if allow_blank?
|
17
|
+
|
18
|
+
validate_required_fields
|
19
|
+
|
20
|
+
user_answer.errors.empty?
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def allow_blank?
|
26
|
+
component.validation.compact_blank.keys.exclude?('required')
|
27
|
+
end
|
28
|
+
|
29
|
+
def validate_required_fields
|
30
|
+
REQUIRED_FIELDS.each { |field| add_error_if_blank(field) }
|
31
|
+
end
|
32
|
+
|
33
|
+
def add_error_if_blank(field)
|
34
|
+
if user_answer.send(field).blank?
|
35
|
+
error_message = default_error_message(field: translated_field(field))
|
36
|
+
|
37
|
+
page_answers.errors.add([component.id, field].join('.'), error_message)
|
38
|
+
user_answer.errors.add(field, error_message)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def translated_field(field)
|
43
|
+
MetadataPresenter::AddressFieldset.human_attribute_name(field).downcase
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -73,14 +73,14 @@ module MetadataPresenter
|
|
73
73
|
# @return [String] returns the default error message
|
74
74
|
# @raise [MetadataPresenter::NoDefaultMessage] raises no default message if
|
75
75
|
# is not present
|
76
|
-
def default_error_message
|
76
|
+
def default_error_message(params = {})
|
77
77
|
default_error_message_key = "error.#{schema_key}"
|
78
78
|
default_message = Rails.application
|
79
79
|
.config
|
80
80
|
.default_metadata[default_error_message_key]
|
81
81
|
|
82
82
|
if default_message.present?
|
83
|
-
default_message['value'] % error_message_hash
|
83
|
+
default_message['value'] % error_message_hash.merge(params)
|
84
84
|
else
|
85
85
|
raise NoDefaultMessage, "No default message found for key '#{default_error_message_key}'."
|
86
86
|
end
|
@@ -129,7 +129,7 @@ module MetadataPresenter
|
|
129
129
|
# blank values. We should not allow blank when performing the required
|
130
130
|
# validation.
|
131
131
|
#
|
132
|
-
# @return [
|
132
|
+
# @return [Boolean]
|
133
133
|
#
|
134
134
|
def allow_blank?
|
135
135
|
user_answer.blank? && !self.class.name.demodulize.include?('RequiredValidator')
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module MetadataPresenter
|
2
|
+
class PostcodeValidator < BaseValidator
|
3
|
+
require 'uk_postcode'
|
4
|
+
|
5
|
+
VALIDATABLE_COUNTRIES = [
|
6
|
+
'UK',
|
7
|
+
'U.K.',
|
8
|
+
'England',
|
9
|
+
'United Kingdom',
|
10
|
+
'Scotland',
|
11
|
+
'Wales',
|
12
|
+
'Cymru',
|
13
|
+
'Channel Islands',
|
14
|
+
'Isle of Man',
|
15
|
+
'Northern Ireland'
|
16
|
+
].freeze
|
17
|
+
|
18
|
+
def valid?
|
19
|
+
validate_postcode if postcode.present?
|
20
|
+
|
21
|
+
user_answer.errors.empty?
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def country
|
27
|
+
user_answer.country
|
28
|
+
end
|
29
|
+
|
30
|
+
def postcode
|
31
|
+
user_answer.postcode
|
32
|
+
end
|
33
|
+
|
34
|
+
def parsed_postcode
|
35
|
+
@parsed_postcode ||= UKPostcode.parse(postcode)
|
36
|
+
end
|
37
|
+
|
38
|
+
def valid_postcode?
|
39
|
+
parsed_postcode.full_valid?
|
40
|
+
end
|
41
|
+
|
42
|
+
def validatable_country?
|
43
|
+
VALIDATABLE_COUNTRIES.grep(/\A#{country}\z/i).any?
|
44
|
+
end
|
45
|
+
|
46
|
+
def validate_postcode
|
47
|
+
return if !validatable_country? || valid_postcode?
|
48
|
+
|
49
|
+
page_answers.errors.add([component.id, :postcode].join('.'), default_error_message)
|
50
|
+
user_answer.errors.add(:postcode, default_error_message)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
<% hint_id = f.field_id(component.id, [:hint]).tr('_', '-') if component.hint.present? %>
|
2
|
+
|
3
|
+
<%= f.govuk_fieldset legend: { text: input_title }, described_by: hint_id do %>
|
4
|
+
<%= f.fields_for component.id, f.object.send(component.id) do |a| %>
|
5
|
+
<% if component.hint.present? %>
|
6
|
+
<div class="govuk-hint govuk-!-margin-bottom-6" id="<%= hint_id %>" data-fb-default-text="<%= default_text('hint') %>">
|
7
|
+
<%= component.hint %>
|
8
|
+
</div>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<%=
|
12
|
+
a.govuk_text_field :address_line_one,
|
13
|
+
label: { text: MetadataPresenter::AddressFieldset.human_attribute_name('address_line_one') },
|
14
|
+
autocorrect: 'off', autocomplete: 'address-line1'
|
15
|
+
%>
|
16
|
+
<%=
|
17
|
+
a.govuk_text_field :address_line_two,
|
18
|
+
label: { text: MetadataPresenter::AddressFieldset.human_attribute_name('address_line_two') },
|
19
|
+
autocorrect: 'off', autocomplete: 'address-line2'
|
20
|
+
%>
|
21
|
+
<%=
|
22
|
+
a.govuk_text_field :city,
|
23
|
+
label: { text: MetadataPresenter::AddressFieldset.human_attribute_name('city') },
|
24
|
+
width: 'two-thirds',
|
25
|
+
autocorrect: 'off', autocomplete: 'address-level2'
|
26
|
+
%>
|
27
|
+
<%=
|
28
|
+
a.govuk_text_field :county,
|
29
|
+
label: { text: MetadataPresenter::AddressFieldset.human_attribute_name('county') },
|
30
|
+
width: 'two-thirds',
|
31
|
+
autocorrect: 'off', autocomplete: 'address-level1'
|
32
|
+
%>
|
33
|
+
<%=
|
34
|
+
a.govuk_text_field :postcode,
|
35
|
+
label: { text: MetadataPresenter::AddressFieldset.human_attribute_name('postcode') },
|
36
|
+
width: 'one-quarter',
|
37
|
+
autocorrect: 'off', autocomplete: 'postal-code'
|
38
|
+
%>
|
39
|
+
<%=
|
40
|
+
a.govuk_text_field :country,
|
41
|
+
label: { text: MetadataPresenter::AddressFieldset.human_attribute_name('country') },
|
42
|
+
width: 'one-quarter',
|
43
|
+
autocorrect: 'off', autocomplete: 'country-name'
|
44
|
+
%>
|
45
|
+
<% end %>
|
46
|
+
<% end %>
|
@@ -17,11 +17,11 @@ Rails.application.config.supported_components =
|
|
17
17
|
content: %w(content)
|
18
18
|
},
|
19
19
|
multiplequestions: {
|
20
|
-
input: %w(text textarea email number date radios checkboxes),
|
20
|
+
input: %w(text textarea email number date address radios checkboxes),
|
21
21
|
content: %w(content)
|
22
22
|
},
|
23
23
|
singlequestion: {
|
24
|
-
input: %w(text textarea number date radios checkboxes email upload multiupload autocomplete),
|
24
|
+
input: %w(text textarea number date address radios checkboxes email upload multiupload autocomplete),
|
25
25
|
content: %w()
|
26
26
|
}
|
27
27
|
})
|
data/config/locales/en.yml
CHANGED
@@ -171,3 +171,13 @@ en:
|
|
171
171
|
- "[date when you performed your basic accessibility check]"
|
172
172
|
- "[insert team or organisation here]"
|
173
173
|
url: 'accessibility'
|
174
|
+
|
175
|
+
activemodel:
|
176
|
+
attributes:
|
177
|
+
metadata_presenter/address_fieldset:
|
178
|
+
address_line_one: Address line 1
|
179
|
+
address_line_two: Address line 2 (optional)
|
180
|
+
city: Town or city
|
181
|
+
county: County (optional)
|
182
|
+
postcode: Postcode
|
183
|
+
country: Country
|
data/fixtures/version.json
CHANGED
@@ -1,104 +1,110 @@
|
|
1
1
|
{
|
2
2
|
"_id": "service.base",
|
3
|
-
"_type": "service.base",
|
4
3
|
"flow": {
|
5
|
-
"
|
6
|
-
"_type": "flow.page",
|
4
|
+
"0c022e95-0748-4dda-8ba5-12fd1d2f596b": {
|
7
5
|
"next": {
|
8
|
-
"default": "
|
9
|
-
}
|
6
|
+
"default": "e8708909-922e-4eaf-87a5-096f7a713fcb"
|
7
|
+
},
|
8
|
+
"_type": "flow.page"
|
10
9
|
},
|
11
|
-
"
|
12
|
-
"_type": "flow.page",
|
10
|
+
"2ef7d11e-0307-49e9-9fe2-345dc528dd66": {
|
13
11
|
"next": {
|
14
|
-
"default": "
|
15
|
-
}
|
12
|
+
"default": "2ef7d11e-0307-49e9-9fe2-345dc528dd67"
|
13
|
+
},
|
14
|
+
"_type": "flow.page"
|
16
15
|
},
|
17
|
-
"
|
18
|
-
"_type": "flow.page",
|
16
|
+
"2ef7d11e-0307-49e9-9fe2-345dc528dd67": {
|
19
17
|
"next": {
|
20
|
-
"default": "
|
21
|
-
}
|
18
|
+
"default": "c7755991-436b-4495-afa6-803db58cefbc"
|
19
|
+
},
|
20
|
+
"_type": "flow.page"
|
22
21
|
},
|
23
22
|
"4b8c6bf3-878a-4446-9198-48351b3e2185": {
|
24
|
-
"_type": "flow.page",
|
25
23
|
"next": {
|
26
24
|
"default": "54ccc6cd-60c0-4749-947b-a97af1bc0aa2"
|
27
|
-
}
|
25
|
+
},
|
26
|
+
"_type": "flow.page"
|
28
27
|
},
|
29
28
|
"54ccc6cd-60c0-4749-947b-a97af1bc0aa2": {
|
30
|
-
"_type": "flow.page",
|
31
29
|
"next": {
|
32
30
|
"default": "b8335af2-6642-4e2f-8192-0dd12279eec7"
|
33
|
-
}
|
34
|
-
|
35
|
-
"b8335af2-6642-4e2f-8192-0dd12279eec7": {
|
36
|
-
"_type": "flow.page",
|
37
|
-
"next": {
|
38
|
-
"default": "68fbb180-9a2a-48f6-9da6-545e28b8d35a"
|
39
|
-
}
|
31
|
+
},
|
32
|
+
"_type": "flow.page"
|
40
33
|
},
|
41
34
|
"68fbb180-9a2a-48f6-9da6-545e28b8d35a": {
|
42
|
-
"_type": "flow.page",
|
43
35
|
"next": {
|
44
36
|
"default": "7806cd64-0c05-450e-ba6f-2325c8b22d46"
|
45
|
-
}
|
37
|
+
},
|
38
|
+
"_type": "flow.page"
|
46
39
|
},
|
47
|
-
"
|
48
|
-
"_type": "flow.page",
|
40
|
+
"6984b0a4-d432-4628-89b7-410170b6f148": {
|
49
41
|
"next": {
|
50
|
-
"default": "
|
51
|
-
}
|
42
|
+
"default": "e337070b-f636-49a3-a65c-f506675265f0"
|
43
|
+
},
|
44
|
+
"_type": "flow.page"
|
52
45
|
},
|
53
|
-
"
|
54
|
-
"_type": "flow.page",
|
46
|
+
"778e364b-9a7f-4829-8eb2-510e08f156a3": {
|
55
47
|
"next": {
|
56
|
-
"default": "
|
57
|
-
}
|
48
|
+
"default": ""
|
49
|
+
},
|
50
|
+
"_type": "flow.page"
|
58
51
|
},
|
59
|
-
"
|
60
|
-
"_type": "flow.page",
|
52
|
+
"7806cd64-0c05-450e-ba6f-2325c8b22d46": {
|
61
53
|
"next": {
|
62
|
-
"default": "
|
63
|
-
}
|
54
|
+
"default": "0c022e95-0748-4dda-8ba5-12fd1d2f596b"
|
55
|
+
},
|
56
|
+
"_type": "flow.page"
|
64
57
|
},
|
65
58
|
"80420693-d6f2-4fce-a860-777ca774a6f5": {
|
66
|
-
"_type": "flow.page",
|
67
59
|
"next": {
|
68
60
|
"default": "2ef7d11e-0307-49e9-9fe2-345dc528dd66"
|
69
|
-
}
|
61
|
+
},
|
62
|
+
"_type": "flow.page"
|
70
63
|
},
|
71
|
-
"
|
72
|
-
"_type": "flow.page",
|
64
|
+
"9e1ba77f-f1e5-42f4-b090-437aa9af7f73": {
|
73
65
|
"next": {
|
74
|
-
"default": "
|
75
|
-
}
|
66
|
+
"default": "adcb61c3-52b1-479b-be51-1bb610876d54"
|
67
|
+
},
|
68
|
+
"_type": "flow.page"
|
76
69
|
},
|
77
|
-
"
|
78
|
-
"_type": "flow.page",
|
70
|
+
"adcb61c3-52b1-479b-be51-1bb610876d54": {
|
79
71
|
"next": {
|
80
|
-
"default": "
|
81
|
-
}
|
72
|
+
"default": "4b8c6bf3-878a-4446-9198-48351b3e2185"
|
73
|
+
},
|
74
|
+
"_type": "flow.page"
|
75
|
+
},
|
76
|
+
"b8335af2-6642-4e2f-8192-0dd12279eec7": {
|
77
|
+
"next": {
|
78
|
+
"default": "68fbb180-9a2a-48f6-9da6-545e28b8d35a"
|
79
|
+
},
|
80
|
+
"_type": "flow.page"
|
82
81
|
},
|
83
82
|
"c7755991-436b-4495-afa6-803db58cefbc": {
|
84
|
-
"_type": "flow.page",
|
85
83
|
"next": {
|
86
|
-
"default": "
|
87
|
-
}
|
84
|
+
"default": "6984b0a4-d432-4628-89b7-410170b6f148"
|
85
|
+
},
|
86
|
+
"_type": "flow.page"
|
87
|
+
},
|
88
|
+
"cf6dc32f-502c-4215-8c27-1151a45735bb": {
|
89
|
+
"next": {
|
90
|
+
"default": "9e1ba77f-f1e5-42f4-b090-437aa9af7f73"
|
91
|
+
},
|
92
|
+
"_type": "flow.page"
|
88
93
|
},
|
89
94
|
"e337070b-f636-49a3-a65c-f506675265f0": {
|
90
|
-
"_type": "flow.page",
|
91
95
|
"next": {
|
92
96
|
"default": "778e364b-9a7f-4829-8eb2-510e08f156a3"
|
93
|
-
}
|
97
|
+
},
|
98
|
+
"_type": "flow.page"
|
94
99
|
},
|
95
|
-
"
|
96
|
-
"_type": "flow.page",
|
100
|
+
"e8708909-922e-4eaf-87a5-096f7a713fcb": {
|
97
101
|
"next": {
|
98
|
-
"default": ""
|
99
|
-
}
|
102
|
+
"default": "80420693-d6f2-4fce-a860-777ca774a6f5"
|
103
|
+
},
|
104
|
+
"_type": "flow.page"
|
100
105
|
}
|
101
106
|
},
|
107
|
+
"_type": "service.base",
|
102
108
|
"pages": [
|
103
109
|
{
|
104
110
|
"_id": "page.start",
|
@@ -675,6 +681,33 @@
|
|
675
681
|
],
|
676
682
|
"section_heading": ""
|
677
683
|
},
|
684
|
+
{
|
685
|
+
"_id": "page.postal-address",
|
686
|
+
"url": "postal-address",
|
687
|
+
"body": "Body section",
|
688
|
+
"lede": "",
|
689
|
+
"_type": "page.singlequestion",
|
690
|
+
"_uuid": "6984b0a4-d432-4628-89b7-410170b6f148",
|
691
|
+
"heading": "",
|
692
|
+
"components": [
|
693
|
+
{
|
694
|
+
"_id": "postal-address_address_1",
|
695
|
+
"hint": "",
|
696
|
+
"name": "postal-address_address_1",
|
697
|
+
"_type": "address",
|
698
|
+
"_uuid": "f72db038-d1cd-4c0d-baea-570b3e4863f5",
|
699
|
+
"errors": {},
|
700
|
+
"legend": "Confirm your postal address",
|
701
|
+
"collection": "components",
|
702
|
+
"validation": {
|
703
|
+
"address": true,
|
704
|
+
"required": true,
|
705
|
+
"postcode": true
|
706
|
+
}
|
707
|
+
}
|
708
|
+
],
|
709
|
+
"section_heading": ""
|
710
|
+
},
|
678
711
|
{
|
679
712
|
"_id": "page.check-answers",
|
680
713
|
"url": "check-answers",
|
@@ -0,0 +1,31 @@
|
|
1
|
+
{
|
2
|
+
"$id": "http://gov.uk/schema/v1.0.0/address",
|
3
|
+
"_name": "component.address",
|
4
|
+
"title": "Address",
|
5
|
+
"description": "Let users enter their address",
|
6
|
+
"type": "object",
|
7
|
+
"properties": {
|
8
|
+
"_type": {
|
9
|
+
"const": "address"
|
10
|
+
}
|
11
|
+
},
|
12
|
+
"allOf": [
|
13
|
+
{
|
14
|
+
"$ref": "definition.fieldset"
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"$ref": "definition.width_class.input"
|
18
|
+
},
|
19
|
+
{
|
20
|
+
"$ref": "validations#/definitions/errors_address"
|
21
|
+
}
|
22
|
+
],
|
23
|
+
"composite": [
|
24
|
+
"address_line_one",
|
25
|
+
"address_line_two",
|
26
|
+
"city",
|
27
|
+
"county",
|
28
|
+
"postcode",
|
29
|
+
"country"
|
30
|
+
]
|
31
|
+
}
|
data/schemas/errors/errors.json
CHANGED
@@ -20,6 +20,14 @@
|
|
20
20
|
}
|
21
21
|
]
|
22
22
|
},
|
23
|
+
"address": {
|
24
|
+
"title": "Error strings for required address fields",
|
25
|
+
"allOf": [
|
26
|
+
{
|
27
|
+
"$ref": "#/definitions/error_strings"
|
28
|
+
}
|
29
|
+
]
|
30
|
+
},
|
23
31
|
"min_length": {
|
24
32
|
"title": "Error strings for minimum length",
|
25
33
|
"allOf": [
|
@@ -95,6 +103,17 @@
|
|
95
103
|
}
|
96
104
|
}
|
97
105
|
},
|
106
|
+
"address_errors": {
|
107
|
+
"properties": {
|
108
|
+
"errors": {
|
109
|
+
"properties": {
|
110
|
+
"address": {
|
111
|
+
"$ref": "#/definitions/address"
|
112
|
+
}
|
113
|
+
}
|
114
|
+
}
|
115
|
+
}
|
116
|
+
},
|
98
117
|
"string_errors": {
|
99
118
|
"properties": {
|
100
119
|
"errors": {
|
@@ -34,6 +34,24 @@
|
|
34
34
|
}
|
35
35
|
]
|
36
36
|
},
|
37
|
+
"address": {
|
38
|
+
"title": "Address",
|
39
|
+
"description": "Address required fields",
|
40
|
+
"oneOf": [
|
41
|
+
{
|
42
|
+
"$ref": "definition.conditional.boolean"
|
43
|
+
}
|
44
|
+
],
|
45
|
+
"default": true
|
46
|
+
},
|
47
|
+
"errors_address": {
|
48
|
+
"title": "Error messages for 'Address'",
|
49
|
+
"allOf": [
|
50
|
+
{
|
51
|
+
"$ref": "#/definitions/error_strings"
|
52
|
+
}
|
53
|
+
]
|
54
|
+
},
|
37
55
|
"errors_required": {
|
38
56
|
"title": "Error messages for ‘Required’",
|
39
57
|
"allOf": [
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metadata_presenter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.3.
|
4
|
+
version: 3.3.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- MoJ Forms
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
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:
|
19
|
+
version: 4.1.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 4.1.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: json-schema
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -42,14 +42,14 @@ dependencies:
|
|
42
42
|
name: kramdown
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 2.4.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 2.4.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
@@ -70,14 +70,14 @@ dependencies:
|
|
70
70
|
name: rails
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: 7.0.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 7.0.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: uk_postcode
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: better_errors
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -328,6 +342,7 @@ files:
|
|
328
342
|
- app/helpers/metadata_presenter/default_metadata.rb
|
329
343
|
- app/helpers/metadata_presenter/default_text.rb
|
330
344
|
- app/jobs/metadata_presenter/application_job.rb
|
345
|
+
- app/models/metadata_presenter/address_fieldset.rb
|
331
346
|
- app/models/metadata_presenter/autocomplete_item.rb
|
332
347
|
- app/models/metadata_presenter/branch_destinations.rb
|
333
348
|
- app/models/metadata_presenter/column_number.rb
|
@@ -371,6 +386,7 @@ files:
|
|
371
386
|
- app/presenters/metadata_presenter/page_answers_presenter.rb
|
372
387
|
- app/validators/email_confirmation_validator.rb
|
373
388
|
- app/validators/metadata_presenter/accept_validator.rb
|
389
|
+
- app/validators/metadata_presenter/address_validator.rb
|
374
390
|
- app/validators/metadata_presenter/autocomplete_validator.rb
|
375
391
|
- app/validators/metadata_presenter/base_upload_validator.rb
|
376
392
|
- app/validators/metadata_presenter/base_validator.rb
|
@@ -389,6 +405,7 @@ files:
|
|
389
405
|
- app/validators/metadata_presenter/minimum_validator.rb
|
390
406
|
- app/validators/metadata_presenter/multiupload_validator.rb
|
391
407
|
- app/validators/metadata_presenter/number_validator.rb
|
408
|
+
- app/validators/metadata_presenter/postcode_validator.rb
|
392
409
|
- app/validators/metadata_presenter/required_validator.rb
|
393
410
|
- app/validators/metadata_presenter/validate_answers.rb
|
394
411
|
- app/validators/metadata_presenter/validate_schema.rb
|
@@ -412,6 +429,7 @@ files:
|
|
412
429
|
- app/views/metadata_presenter/attribute/_heading.html.erb
|
413
430
|
- app/views/metadata_presenter/attribute/_lede.html.erb
|
414
431
|
- app/views/metadata_presenter/attribute/_section_heading.html.erb
|
432
|
+
- app/views/metadata_presenter/component/_address.html.erb
|
415
433
|
- app/views/metadata_presenter/component/_autocomplete.html.erb
|
416
434
|
- app/views/metadata_presenter/component/_checkboxes.html.erb
|
417
435
|
- app/views/metadata_presenter/component/_components.html.erb
|
@@ -460,6 +478,7 @@ files:
|
|
460
478
|
- config/initializers/supported_components.rb
|
461
479
|
- config/locales/en.yml
|
462
480
|
- config/routes.rb
|
481
|
+
- default_metadata/component/address.json
|
463
482
|
- default_metadata/component/autocomplete.json
|
464
483
|
- default_metadata/component/checkboxes.json
|
465
484
|
- default_metadata/component/content.json
|
@@ -489,6 +508,7 @@ files:
|
|
489
508
|
- default_metadata/page/start.json
|
490
509
|
- default_metadata/service/base.json
|
491
510
|
- default_metadata/string/error.accept.json
|
511
|
+
- default_metadata/string/error.address.json
|
492
512
|
- default_metadata/string/error.autocomplete.json
|
493
513
|
- default_metadata/string/error.catch_all.json
|
494
514
|
- default_metadata/string/error.date.json
|
@@ -505,6 +525,7 @@ files:
|
|
505
525
|
- default_metadata/string/error.minimum.json
|
506
526
|
- default_metadata/string/error.multiupload.json
|
507
527
|
- default_metadata/string/error.number.json
|
528
|
+
- default_metadata/string/error.postcode.json
|
508
529
|
- default_metadata/string/error.required.json
|
509
530
|
- default_metadata/string/error.virus_scan.json
|
510
531
|
- default_metadata/validations/date_after.json
|
@@ -554,6 +575,7 @@ files:
|
|
554
575
|
- lib/metadata_presenter/engine.rb
|
555
576
|
- lib/metadata_presenter/test_helpers.rb
|
556
577
|
- lib/metadata_presenter/version.rb
|
578
|
+
- schemas/component/address.json
|
557
579
|
- schemas/component/autocomplete.json
|
558
580
|
- schemas/component/checkboxes.json
|
559
581
|
- schemas/component/content.json
|