metadata_presenter 2.17.13 → 2.17.14

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: 268aeb32fbc8b5e3bf2bf779dc9b3084b5720705974c637b083d9f4fb7a375ac
4
- data.tar.gz: d60414f947c4896709b8f546d9e3d8f41ddaf64a89d448552efd7ff75ddf8ddf
3
+ metadata.gz: e97452ef08994e231a3652ad8f9ccdae67668e04bb3e449fd958a0872e4320ca
4
+ data.tar.gz: 6bacb894b8f40bda5ac33ffa4625d9a0970ba676d11184cdd97c8c1c5db2d0d4
5
5
  SHA512:
6
- metadata.gz: c1ef5a82ce1be109e3f5fa6a4d8b8da0a7384f2087da4828e62aa97fc957336d3b4cc194609052d355f1de30efbaea7a90b0517880b5f4721956b50cef364298
7
- data.tar.gz: 153703f311912d4c5b6aaf8e768a4027e6bb58706fede917d598abbbde2c65376f52f8469cedfa527207bea401a95e113af07ec71cd8c488b01b50a810380a25
6
+ metadata.gz: c446088262eea4845c754ed6f17b30237fc50acdd1b9f96b9bb78e2acb28d45445bf50d26a699188497ef58e90e8799fa2d7d384f350dac509e46d98b77faa36
7
+ data.tar.gz: e583b37191f8d82e357c06eb0bd17113bf2531ae1f7e4de3a40991d20ddcb4ce2877bf9cfa8bc81ae8da1964ab5c0b0150154feb2e6f8e7a013eed632fdf07e1
@@ -4,7 +4,7 @@ module MetadataPresenter
4
4
 
5
5
  def create
6
6
  @previous_answers = reload_user_data.deep_dup
7
- @page_answers = PageAnswers.new(page, answers_params)
7
+ @page_answers = PageAnswers.new(page, answers_params, autocomplete_items(page.components))
8
8
 
9
9
  upload_files if upload?
10
10
 
@@ -43,6 +43,8 @@ module MetadataPresenter
43
43
 
44
44
  def render_validation_error
45
45
  @user_data = answers_params
46
+ load_autocomplete_items
47
+
46
48
  render template: page.template, status: :unprocessable_entity
47
49
  end
48
50
 
@@ -57,6 +57,13 @@ module MetadataPresenter
57
57
  end
58
58
  helper_method :analytics_tags_present?
59
59
 
60
+ def load_autocomplete_items
61
+ if @page.autocomplete_component_present?
62
+ items = autocomplete_items(@page.components)
63
+ @page.assign_autocomplete_items(items)
64
+ end
65
+ end
66
+
60
67
  private
61
68
 
62
69
  def not_found
@@ -5,10 +5,7 @@ module MetadataPresenter
5
5
  @page ||= service.find_page_by_url(request.env['PATH_INFO'])
6
6
 
7
7
  if @page
8
- if @page.autocomplete_component_present?
9
- items = autocomplete_items(@page.components)
10
- @page.assign_autocomplete_items(items)
11
- end
8
+ load_autocomplete_items
12
9
 
13
10
  @page_answers = PageAnswers.new(@page, @user_data)
14
11
  render template: @page.template
@@ -3,16 +3,17 @@ module MetadataPresenter
3
3
  include ActiveModel::Model
4
4
  include ActiveModel::Validations
5
5
  include ActionView::Helpers
6
- attr_reader :page, :answers, :uploaded_files
6
+ attr_reader :page, :answers, :uploaded_files, :autocomplete_items
7
7
 
8
- def initialize(page, answers)
8
+ def initialize(page, answers, autocomplete_items = nil)
9
9
  @page = page
10
10
  @answers = answers
11
+ @autocomplete_items = autocomplete_items
11
12
  @uploaded_files = []
12
13
  end
13
14
 
14
15
  def validate_answers
15
- ValidateAnswers.new(self, components: components).valid?
16
+ ValidateAnswers.new(self, components: components, autocomplete_items: autocomplete_items).valid?
16
17
  end
17
18
 
18
19
  delegate :components, to: :page
@@ -0,0 +1,21 @@
1
+ module MetadataPresenter
2
+ class AutocompleteValidator < BaseValidator
3
+ attr_reader :autocomplete_items
4
+
5
+ def initialize(page_answers:, component:, autocomplete_items:)
6
+ super(page_answers: page_answers, component: component)
7
+
8
+ @autocomplete_items = autocomplete_items
9
+ end
10
+
11
+ def invalid_answer?
12
+ return if autocomplete_item_list.blank?
13
+
14
+ autocomplete_item_list.exclude?(JSON.parse(user_answer))
15
+ end
16
+
17
+ def autocomplete_item_list
18
+ @autocomplete_item_list ||= autocomplete_items[component.uuid]
19
+ end
20
+ end
21
+ end
@@ -1,10 +1,11 @@
1
1
  module MetadataPresenter
2
2
  class ValidateAnswers
3
- attr_reader :page_answers, :components
3
+ attr_reader :page_answers, :components, :autocomplete_items
4
4
 
5
- def initialize(page_answers, components:)
5
+ def initialize(page_answers, components:, autocomplete_items:)
6
6
  @page_answers = page_answers
7
7
  @components = Array(components)
8
+ @autocomplete_items = autocomplete_items
8
9
  end
9
10
 
10
11
  def valid?
@@ -21,8 +22,10 @@ module MetadataPresenter
21
22
  components.map { |component|
22
23
  component_validations(component).map do |key|
23
24
  "MetadataPresenter::#{key.classify}Validator".constantize.new(
24
- page_answers: page_answers,
25
- component: component
25
+ {
26
+ component: component,
27
+ page_answers: page_answers
28
+ }.merge(autocomplete_param(key))
26
29
  )
27
30
  end
28
31
  }.compact.flatten
@@ -33,5 +36,9 @@ module MetadataPresenter
33
36
 
34
37
  component.validation.select { |_, value| value.present? }.keys
35
38
  end
39
+
40
+ def autocomplete_param(key)
41
+ key == 'autocomplete_item' ? { autocomplete_items: autocomplete_items } : {}
42
+ end
36
43
  end
37
44
  end
@@ -7,6 +7,7 @@
7
7
  "name": "component-name",
8
8
  "legend": "Question",
9
9
  "validation": {
10
- "required": true
10
+ "required": true,
11
+ "autocomplete": true
11
12
  }
12
13
  }
@@ -0,0 +1,6 @@
1
+ {
2
+ "_id": "error.autocomplete",
3
+ "_type": "string.error",
4
+ "description": "Autocomplete item is not on the list",
5
+ "value": "Select an option from the list"
6
+ }
@@ -595,7 +595,8 @@
595
595
  },
596
596
  "legend": "Countries",
597
597
  "validation": {
598
- "required": true
598
+ "required": true,
599
+ "autocomplete": true
599
600
  }
600
601
  }
601
602
  ],
@@ -1,3 +1,3 @@
1
1
  module MetadataPresenter
2
- VERSION = '2.17.13'.freeze
2
+ VERSION = '2.17.14'.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: 2.17.13
4
+ version: 2.17.14
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-07-29 00:00:00.000000000 Z
11
+ date: 2022-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: govuk_design_system_formbuilder
@@ -299,6 +299,7 @@ files:
299
299
  - app/operators/metadata_presenter/operator.rb
300
300
  - app/presenters/metadata_presenter/page_answers_presenter.rb
301
301
  - app/validators/metadata_presenter/accept_validator.rb
302
+ - app/validators/metadata_presenter/autocomplete_validator.rb
302
303
  - app/validators/metadata_presenter/base_validator.rb
303
304
  - app/validators/metadata_presenter/date_after_validator.rb
304
305
  - app/validators/metadata_presenter/date_before_validator.rb
@@ -390,6 +391,7 @@ files:
390
391
  - default_metadata/page/start.json
391
392
  - default_metadata/service/base.json
392
393
  - default_metadata/string/error.accept.json
394
+ - default_metadata/string/error.autocomplete.json
393
395
  - default_metadata/string/error.date.json
394
396
  - default_metadata/string/error.date_after.json
395
397
  - default_metadata/string/error.date_before.json