metadata_presenter 2.16.3 → 2.16.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9b65c4788c5db434ecab81b6fe447e1197c6d5feed250ab185f859bf0bf1020c
4
- data.tar.gz: c012c27627b1ffb8a1efdd40018646adb9e361bd4c578efce70117abc93e8d49
3
+ metadata.gz: c9f50e8249cf5e5e3c1c18b3894169d367354434711fcf6bd7cfc53f95b78665
4
+ data.tar.gz: 662a5efde45a3e2d24461a9d76c0d6d380337094365210d1604ede6d01468b6a
5
5
  SHA512:
6
- metadata.gz: ee3186b76cb361a99b83d40af98c2b0d8820d63c650dd976eac5c434f96f565fb9cfcc10a6ce3ead48f27b0c983ca197bd508dc7240826ba2c92cd29ad2ae29d
7
- data.tar.gz: 287750099341c719fb2fbfd538d11f25ab32b47c91001d79eb815d6122e1b60267fe6b4104c5b9123dedab3cee59da6b12005939b5a4966bfbe4a52bc4890e50
6
+ metadata.gz: 0542b36a6eabe1fff9555a1311619b005c03e47c54fdb90177b5aff8d5d553db637769b4152b9986656bdfb7c15a64529f33ffeae7aa47a6f6eeb55bdeedcb13
7
+ data.tar.gz: '08844c20d86b8fd3fb5dae503dff343841cd2850d673a395732580ef15fabfe849e4c9a2db34cfbb615e8fb427eccd0ed971e67b9994cb2f32b747bb44d48d51'
@@ -1,4 +1,11 @@
1
1
  class MetadataPresenter::Component < MetadataPresenter::Metadata
2
+ VALIDATION_BUNDLES = {
3
+ 'date' => 'date',
4
+ 'number' => 'number',
5
+ 'text' => 'string',
6
+ 'textarea' => 'string'
7
+ }.freeze
8
+
2
9
  def to_partial_path
3
10
  "metadata_presenter/component/#{type}"
4
11
  end
@@ -30,4 +37,22 @@ class MetadataPresenter::Component < MetadataPresenter::Metadata
30
37
  def find_item_by_uuid(uuid)
31
38
  items.find { |item| item.uuid == uuid }
32
39
  end
40
+
41
+ def supported_validations
42
+ return [] if validation_bundle_key.nil?
43
+
44
+ JSON::Validator.schema_for_uri(validation_bundle_key)
45
+ .schema['properties']['validation']['properties']
46
+ .keys
47
+ end
48
+
49
+ private
50
+
51
+ def validation_bundle_key
52
+ @validation_bundle_key ||=
53
+ if type.in?(VALIDATION_BUNDLES.keys)
54
+ definition_bundle = VALIDATION_BUNDLES[type]
55
+ "validations.#{definition_bundle}_bundle"
56
+ end
57
+ end
33
58
  end
@@ -0,0 +1,8 @@
1
+ module MetadataPresenter
2
+ class DateAfterValidator < BaseValidator
3
+ def invalid_answer?
4
+ answer_date = "#{user_answer.year}-#{user_answer.month}-#{user_answer.day}"
5
+ Date.parse(answer_date).iso8601 > Date.parse(component.validation[schema_key]).iso8601
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module MetadataPresenter
2
+ class DateBeforeValidator < BaseValidator
3
+ def invalid_answer?
4
+ answer_date = "#{user_answer.year}-#{user_answer.month}-#{user_answer.day}"
5
+ Date.parse(answer_date).iso8601 < Date.parse(component.validation[schema_key]).iso8601
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ module MetadataPresenter
2
+ class MaxWordValidator < BaseValidator
3
+ include WordCount
4
+
5
+ def invalid_answer?
6
+ Float(word_count(user_answer), exception: false) > Float(component.validation[schema_key], exception: false)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module MetadataPresenter
2
+ class MinWordValidator < BaseValidator
3
+ include WordCount
4
+
5
+ def invalid_answer?
6
+ Float(word_count(user_answer), exception: false) < Float(component.validation[schema_key], exception: false)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ module MetadataPresenter
2
+ module WordCount
3
+ def word_count(text)
4
+ strip_tags(text).split.size
5
+ end
6
+
7
+ def strip_tags(text)
8
+ strip_punctuation(ActionController::Base.helpers.strip_tags(text))
9
+ end
10
+
11
+ def strip_punctuation(text)
12
+ text.gsub(/[^a-z0-9\s]/i, '')
13
+ end
14
+ end
15
+ end
@@ -30,7 +30,6 @@
30
30
  </div>
31
31
  <%= render template: 'metadata_presenter/footer/footer' %>
32
32
 
33
- <%= javascript_pack_tag 'application' %>
34
33
  <%= javascript_pack_tag 'govuk' %>
35
34
  </body>
36
35
  </html>
@@ -1,5 +1,5 @@
1
1
  <div class="fb-main-grid-wrapper" data-fb-pagetype="<%= @page.type %>">
2
- <div class="govuk-panel govuk-panel--confirmation">
2
+ <div class="govuk-panel govuk-panel--confirmation govuk-grid-column-two-thirds">
3
3
  <h1 class="fb-editable govuk-panel__title"
4
4
  data-fb-content-type="element"
5
5
  data-fb-content-id="page[heading]">
@@ -0,0 +1,6 @@
1
+ {
2
+ "_id": "error.date_after",
3
+ "_type": "string.error",
4
+ "description": "Input (date) is later than allowed",
5
+ "value": "Enter a later date for %{control}"
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "_id": "error.date_before",
3
+ "_type": "string.error",
4
+ "description": "Input (date) is earlier than allowed",
5
+ "value": "Enter an earlier date for %{control}"
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "_id": "error.max_word",
3
+ "_type": "string.error",
4
+ "description": "Input (number) is higher than the maximum number of words allowed",
5
+ "value": "Enter a lower number of words for %{control}"
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "_id": "error.min_word",
3
+ "_type": "string.error",
4
+ "description": "Input (number) is lower than the minimum number of words allowed",
5
+ "value": "Enter a higher number of words for %{control}"
6
+ }
@@ -0,0 +1 @@
1
+ { "date_after": "" }
@@ -0,0 +1 @@
1
+ { "date_before": "" }
@@ -0,0 +1 @@
1
+ { "max_length": "0" }
@@ -0,0 +1 @@
1
+ { "max_word": "0" }
@@ -0,0 +1 @@
1
+ { "maximum": "0" }
@@ -0,0 +1 @@
1
+ { "min_length": "0" }
@@ -0,0 +1 @@
1
+ { "min_word": "0" }
@@ -1,3 +1,3 @@
1
1
  module MetadataPresenter
2
- VERSION = '2.16.3'.freeze
2
+ VERSION = '2.16.6'.freeze
3
3
  end
@@ -69,8 +69,7 @@
69
69
  "min_length": {
70
70
  "title": "Minimum length",
71
71
  "description": "The minimum characters users must enter",
72
- "type": "number",
73
- "minimum": 0
72
+ "type": "string"
74
73
  },
75
74
  "errors_min_length": {
76
75
  "title": "Error messages for ‘Minimum length’",
@@ -83,8 +82,7 @@
83
82
  "max_length": {
84
83
  "title": "Maximum length",
85
84
  "description": "The maximum characters users can enter",
86
- "type": "number",
87
- "minimum": 0
85
+ "type": "string"
88
86
  },
89
87
  "errors_max_length": {
90
88
  "title": "Error messages for ‘Maximum length’",
@@ -94,6 +92,32 @@
94
92
  }
95
93
  ]
96
94
  },
95
+ "min_word": {
96
+ "title": "Minimum words",
97
+ "description": "The minimum number of words users must enter",
98
+ "type": "string"
99
+ },
100
+ "errors_min_word": {
101
+ "title": "Error messages for 'Minimum words'",
102
+ "allOf": [
103
+ {
104
+ "$ref": "#/definitions/error_strings"
105
+ }
106
+ ]
107
+ },
108
+ "max_word": {
109
+ "title": "Maximum words",
110
+ "description": "The maximum number of words users may enter",
111
+ "type": "string"
112
+ },
113
+ "errors_max_word": {
114
+ "title": "Error messages for 'Maximum words'",
115
+ "allOf": [
116
+ {
117
+ "$ref": "#/definitions/error_strings"
118
+ }
119
+ ]
120
+ },
97
121
  "pattern": {
98
122
  "title": "Pattern to match string against",
99
123
  "description": "A regular expression for validating users’ answers",
@@ -123,8 +147,7 @@
123
147
  "multiple_of": {
124
148
  "title": "Multiple of",
125
149
  "description": "Whether users must enter a multiple of another number",
126
- "type": "number",
127
- "minimum": 0
150
+ "type": "string"
128
151
  },
129
152
  "errors_multiple_of": {
130
153
  "title": "Error messages for ‘Multiple of’",
@@ -137,8 +160,7 @@
137
160
  "maximum": {
138
161
  "title": "Maximum value",
139
162
  "description": "The largest number that users can enter",
140
- "type": "number",
141
- "minimum": 0
163
+ "type": "string"
142
164
  },
143
165
  "errors_maximum": {
144
166
  "title": "Error messages for ‘Maximum value’",
@@ -164,8 +186,7 @@
164
186
  "minimum": {
165
187
  "title": "Minimum value",
166
188
  "description": "The smallest number that users can enter",
167
- "type": "number",
168
- "minimum": 0
189
+ "type": "string"
169
190
  },
170
191
  "errors_minimum": {
171
192
  "title": "Error messages for for ‘Minimum value’",
@@ -372,6 +393,12 @@
372
393
  "max_length": {
373
394
  "$ref": "#/definitions/max_length"
374
395
  },
396
+ "min_word": {
397
+ "$ref": "#/definitions/min_word"
398
+ },
399
+ "max_word": {
400
+ "$ref": "#/definitions/max_word"
401
+ },
375
402
  "pattern": {
376
403
  "$ref": "#/definitions/pattern"
377
404
  },
@@ -388,6 +415,12 @@
388
415
  "max_length": {
389
416
  "$ref": "#/definitions/errors_max_length"
390
417
  },
418
+ "min_word": {
419
+ "$ref": "#/definitions/errors_min_word"
420
+ },
421
+ "max_word": {
422
+ "$ref": "#/definitions/errors_max_word"
423
+ },
391
424
  "pattern": {
392
425
  "$ref": "#/definitions/errors_pattern"
393
426
  },
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: 2.16.3
4
+ version: 2.16.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - MoJ Forms
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-05 00:00:00.000000000 Z
11
+ date: 2022-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: govuk_design_system_formbuilder
@@ -313,12 +313,16 @@ files:
313
313
  - app/presenters/metadata_presenter/page_answers_presenter.rb
314
314
  - app/validators/metadata_presenter/accept_validator.rb
315
315
  - app/validators/metadata_presenter/base_validator.rb
316
+ - app/validators/metadata_presenter/date_after_validator.rb
317
+ - app/validators/metadata_presenter/date_before_validator.rb
316
318
  - app/validators/metadata_presenter/date_validator.rb
317
319
  - app/validators/metadata_presenter/email_validator.rb
318
320
  - app/validators/metadata_presenter/max_length_validator.rb
319
321
  - app/validators/metadata_presenter/max_size_validator.rb
322
+ - app/validators/metadata_presenter/max_word_validator.rb
320
323
  - app/validators/metadata_presenter/maximum_validator.rb
321
324
  - app/validators/metadata_presenter/min_length_validator.rb
325
+ - app/validators/metadata_presenter/min_word_validator.rb
322
326
  - app/validators/metadata_presenter/minimum_validator.rb
323
327
  - app/validators/metadata_presenter/number_validator.rb
324
328
  - app/validators/metadata_presenter/required_validator.rb
@@ -326,6 +330,7 @@ files:
326
330
  - app/validators/metadata_presenter/validate_answers.rb
327
331
  - app/validators/metadata_presenter/validate_schema.rb
328
332
  - app/validators/metadata_presenter/virus_scan_validator.rb
333
+ - app/validators/metadata_presenter/word_count.rb
329
334
  - app/views/errors/404.html
330
335
  - app/views/layouts/metadata_presenter/application.html.erb
331
336
  - app/views/metadata_presenter/attribute/_body.html.erb
@@ -388,15 +393,26 @@ files:
388
393
  - default_metadata/service/base.json
389
394
  - default_metadata/string/error.accept.json
390
395
  - default_metadata/string/error.date.json
396
+ - default_metadata/string/error.date_after.json
397
+ - default_metadata/string/error.date_before.json
391
398
  - default_metadata/string/error.email.json
392
399
  - default_metadata/string/error.max_length.json
393
400
  - default_metadata/string/error.max_size.json
401
+ - default_metadata/string/error.max_word.json
394
402
  - default_metadata/string/error.maximum.json
395
403
  - default_metadata/string/error.min_length.json
404
+ - default_metadata/string/error.min_word.json
396
405
  - default_metadata/string/error.minimum.json
397
406
  - default_metadata/string/error.number.json
398
407
  - default_metadata/string/error.required.json
399
408
  - default_metadata/string/error.virus_scan.json
409
+ - default_metadata/validations/date_after.json
410
+ - default_metadata/validations/date_before.json
411
+ - default_metadata/validations/max_length.json
412
+ - default_metadata/validations/max_word.json
413
+ - default_metadata/validations/maximum.json
414
+ - default_metadata/validations/min_length.json
415
+ - default_metadata/validations/min_word.json
400
416
  - default_metadata/validations/minimum.json
401
417
  - default_text/content.json
402
418
  - fixtures/branching.json