metadata_presenter 3.3.2 → 3.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6b4dbad514bcffef84647d078cffbf0780d9913b2432f2ae2f9b266105017766
4
- data.tar.gz: a4e7481c08379633df45023fe4f3bce5296086a8328b3d3306afc3f11a36ad20
3
+ metadata.gz: cc84786b2ed09dc03a4df7af7d096346b18bce085b4c7e9cf40d15bb0778000a
4
+ data.tar.gz: 708f4c349746f9d80dfb405860dc7b37cd6773eef9cc86c931540848b5205b5b
5
5
  SHA512:
6
- metadata.gz: a4caff0ac656b1356984b11588c402ead85557c3a3eff89219e6bf41ebc69fde21c61373827f28d90670a795bd61295f2d33d65cac919afaf27de92cfef17331
7
- data.tar.gz: 2aa8c5a38417c2a2e0d65a7892bc9413526539364e080e002b16a2df88a33384127a74f46f6c6fe8ad507ec5777c861688ebcc9bbc5f0fe787627a85e93d31d8
6
+ metadata.gz: cc8b1eb03836a7a4e649e509e66018e0718ef90cedab16da9e11a9fab7412bc8a6c38f612e9c6c617641bc1a8483ea0dd21c14d53866c2d88449eeb491215cf0
7
+ data.tar.gz: 1feebdd5af39db1c9a116e5d6419bef27b6131e234fa1dfb9910952a0927fff6f87d25115c614b5a4e5597def786bdf0471e71097e03fcb6fb4ed677bfb0fa4d
@@ -1,18 +1,7 @@
1
1
  module MetadataPresenter
2
- class AcceptValidator < UploadValidator
2
+ class AcceptValidator < BaseUploadValidator
3
3
  def error_name
4
4
  'accept'
5
5
  end
6
-
7
- def error_message_hash
8
- if component.type == 'multiupload'
9
- {
10
- control: page_answers.send(component.id)[component.id].last['original_filename'],
11
- schema_key.to_sym => component.validation[schema_key]
12
- }
13
- else
14
- super
15
- end
16
- end
17
6
  end
18
7
  end
@@ -0,0 +1,27 @@
1
+ module MetadataPresenter
2
+ class BaseUploadValidator < BaseValidator
3
+ def invalid_answer?
4
+ user_answer.error_name == error_name
5
+ end
6
+
7
+ def user_answer
8
+ page_answers.uploaded_files.find do |uploaded_file|
9
+ component.id == uploaded_file.component.id
10
+ end
11
+ end
12
+
13
+ def error_message_hash
14
+ super.merge(control:)
15
+ end
16
+
17
+ private
18
+
19
+ def control
20
+ if component.type == 'multiupload'
21
+ page_answers.send(component.id)[component.id].last['original_filename']
22
+ else
23
+ page_answers.send(component.id)['original_filename']
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,24 @@
1
+ module MetadataPresenter
2
+ class CatchAllValidator < BaseValidator
3
+ ERROR_NAME_PREFIX = 'error.'.freeze
4
+
5
+ # NOTE: generic errors in other components can be implemented
6
+ # by introducing new case branching if neccessary.
7
+ def invalid_answer?
8
+ case component.type
9
+ when 'upload', 'multiupload'
10
+ upload_user_answer&.error_name.to_s.start_with?(ERROR_NAME_PREFIX)
11
+ else
12
+ false
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def upload_user_answer
19
+ page_answers.uploaded_files.find do |uploaded_file|
20
+ component.id == uploaded_file.component.id
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,13 +1,18 @@
1
1
  module MetadataPresenter
2
2
  class DateValidator < BaseValidator
3
3
  DATE_STRING_VALIDATIONS = %w[date_after date_before].freeze
4
+ YEAR_LOWER_BOUND = 1000
5
+ YEAR_UPPER_BOUND = 3000
4
6
 
5
7
  def invalid_answer?
6
- Date.strptime(
7
- "#{user_answer.year}-#{user_answer.month}-#{user_answer.day}",
8
- '%Y-%m-%d'
8
+ date = Date.civil(
9
+ user_answer.year.to_i, user_answer.month.to_i, user_answer.day.to_i
9
10
  )
10
11
 
12
+ # additional validations that `#civil` will not raise as errors
13
+ return true if date.year < YEAR_LOWER_BOUND
14
+ return true if date.year > YEAR_UPPER_BOUND
15
+
11
16
  false
12
17
  rescue Date::Error
13
18
  true
@@ -1,5 +1,5 @@
1
1
  module MetadataPresenter
2
- class MaxSizeValidator < UploadValidator
2
+ class MaxSizeValidator < BaseUploadValidator
3
3
  def error_name
4
4
  'invalid.too-large'
5
5
  end
@@ -1,22 +1,9 @@
1
1
  module MetadataPresenter
2
- class MultiuploadValidator < BaseValidator
2
+ class MultiuploadValidator < BaseUploadValidator
3
3
  def invalid_answer?
4
4
  user_answer.errors.any? { |error| error.attribute.to_s == error_name }
5
5
  end
6
6
 
7
- def user_answer
8
- page_answers.uploaded_files.find do |uploaded_file|
9
- component.id == uploaded_file.component.id
10
- end
11
- end
12
-
13
- def error_message_hash
14
- {
15
- control: page_answers.send(component.id)[component.id].last['original_filename'],
16
- schema_key.to_sym => component.validation[schema_key]
17
- }
18
- end
19
-
20
7
  def error_name
21
8
  'invalid.multiupload'
22
9
  end
@@ -21,29 +21,24 @@ module MetadataPresenter
21
21
  def validators
22
22
  components.map { |component|
23
23
  component_validations(component).map do |key|
24
- if key == 'max_files'
25
- 'MetadataPresenter::MaxFilesValidator'.constantize.new(
26
- **{
27
- page_answers:,
28
- component:
29
- }.merge(autocomplete_param(key))
30
- )
31
- else
32
- "MetadataPresenter::#{key.classify}Validator".constantize.new(
33
- **{
34
- page_answers:,
35
- component:
36
- }.merge(autocomplete_param(key))
37
- )
38
- end
24
+ "MetadataPresenter::#{key.camelize}Validator".constantize.new(
25
+ **{
26
+ page_answers:,
27
+ component:
28
+ }.merge(autocomplete_param(key))
29
+ )
39
30
  end
40
- }.compact.flatten
31
+ }.flatten.compact
41
32
  end
42
33
 
43
34
  def component_validations(component)
44
35
  return [] if component.validation.blank?
45
36
 
46
- component.validation.select { |_, value| value.present? }.keys
37
+ component.validation.compact_blank.keys + additional_validators
38
+ end
39
+
40
+ def additional_validators
41
+ %w[catch_all].freeze
47
42
  end
48
43
 
49
44
  def autocomplete_param(key)
@@ -1,5 +1,5 @@
1
1
  module MetadataPresenter
2
- class VirusScanValidator < UploadValidator
2
+ class VirusScanValidator < BaseUploadValidator
3
3
  def error_name
4
4
  'invalid.virus'
5
5
  end
@@ -115,7 +115,7 @@ en:
115
115
  continue: 'Continue'
116
116
  progress:
117
117
  heading: '%{service_name}'
118
- content_1: 'You have sucessfuly retrieved your saved information.'
118
+ content_1: 'You have successfully retrieved your saved information.'
119
119
  content_2: 'Here are the answers you have provided so far.'
120
120
  continue: 'Continue'
121
121
  footer:
@@ -0,0 +1,6 @@
1
+ {
2
+ "_id": "error.catch_all",
3
+ "_type": "string.error",
4
+ "description": "A generic validation error not handled by a more concrete validator",
5
+ "value": "We could not save your answer, please try again"
6
+ }
@@ -1,3 +1,3 @@
1
1
  module MetadataPresenter
2
- VERSION = '3.3.2'.freeze
2
+ VERSION = '3.3.3'.freeze
3
3
  end
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.2
4
+ version: 3.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - MoJ Forms
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-16 00:00:00.000000000 Z
11
+ date: 2023-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: govuk_design_system_formbuilder
@@ -373,7 +373,9 @@ files:
373
373
  - app/validators/email_confirmation_validator.rb
374
374
  - app/validators/metadata_presenter/accept_validator.rb
375
375
  - app/validators/metadata_presenter/autocomplete_validator.rb
376
+ - app/validators/metadata_presenter/base_upload_validator.rb
376
377
  - app/validators/metadata_presenter/base_validator.rb
378
+ - app/validators/metadata_presenter/catch_all_validator.rb
377
379
  - app/validators/metadata_presenter/date_after_validator.rb
378
380
  - app/validators/metadata_presenter/date_before_validator.rb
379
381
  - app/validators/metadata_presenter/date_validator.rb
@@ -389,7 +391,6 @@ files:
389
391
  - app/validators/metadata_presenter/multiupload_validator.rb
390
392
  - app/validators/metadata_presenter/number_validator.rb
391
393
  - app/validators/metadata_presenter/required_validator.rb
392
- - app/validators/metadata_presenter/upload_validator.rb
393
394
  - app/validators/metadata_presenter/validate_answers.rb
394
395
  - app/validators/metadata_presenter/validate_schema.rb
395
396
  - app/validators/metadata_presenter/virus_scan_validator.rb
@@ -490,6 +491,7 @@ files:
490
491
  - default_metadata/service/base.json
491
492
  - default_metadata/string/error.accept.json
492
493
  - default_metadata/string/error.autocomplete.json
494
+ - default_metadata/string/error.catch_all.json
493
495
  - default_metadata/string/error.date.json
494
496
  - default_metadata/string/error.date_after.json
495
497
  - default_metadata/string/error.date_before.json
@@ -1,20 +0,0 @@
1
- module MetadataPresenter
2
- class UploadValidator < BaseValidator
3
- def invalid_answer?
4
- user_answer.error_name == error_name
5
- end
6
-
7
- def user_answer
8
- page_answers.uploaded_files.find do |uploaded_file|
9
- component.id == uploaded_file.component.id
10
- end
11
- end
12
-
13
- def error_message_hash
14
- {
15
- control: page_answers.send(component.id)['original_filename'],
16
- schema_key.to_sym => component.validation[schema_key]
17
- }
18
- end
19
- end
20
- end