metadata_presenter 3.3.8 → 3.3.9
Sign up to get free protection for your applications and to get access to all the features.
- 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 +24 -2
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,14 +1,14 @@
|
|
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
|
@@ -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
|