crown_marketplace_utils 0.1.0.beta.3 → 0.1.0.beta.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -21,11 +21,11 @@ module CrownMarketplaceUtils
21
21
  # @param error_message [String] the error message to be displayed
22
22
  # @param govuk_textarea_options [Hash] options that will be used for the parts of the form group, label, hint and textarea
23
23
  #
24
- # @option govuk_textarea_options [Hash] :form_group_options see {govuk_field}
24
+ # @option govuk_textarea_options [Hash] :form_group see {govuk_field}
25
25
  # @option govuk_textarea_options [Hash] :label see {govuk_field}
26
26
  # @option govuk_textarea_options [Hash] :hint see {govuk_field}
27
- # @option govuk_textarea_options [Hash] :textarea_options ({}) the options that will be used when rendering the textarea.
28
- # See {govuk_textarea_field} for more details.
27
+ # @option govuk_textarea_options [Hash] :textarea ({}) the options that will be used when rendering the textarea.
28
+ # See {govuk_textarea_field} for more details.
29
29
  #
30
30
  # @return [ActiveSupport::SafeBuffer] the HTML for the GOV.UK textarea
31
31
  # which can then be rendered on the page
@@ -36,18 +36,33 @@ module CrownMarketplaceUtils
36
36
  end
37
37
  end
38
38
 
39
+ # Generates the HTML for the GOV.UK textarea component using an ActiveModel.
40
+ # Unlike {#govuk_textarea}, the method will be able to automatically determine if the error message needs to be shown.
41
+ #
42
+ # @param model [ActiveModel] model that will be used to find an error message and content of the textarea
43
+ # @param attribute [String, Symbol] the attribute of the textarea
44
+ # @param govuk_textarea_options [Hash] options that will be used for the parts of the form group, label, hint and textarea
45
+ #
46
+ # @option (see govuk_textarea)
47
+ #
48
+ # @return (see govuk_textarea)
49
+
50
+ def govuk_textarea_with_model(model, attribute, **govuk_textarea_options)
51
+ (govuk_textarea_options[:textarea] ||= {})[:content] = model.send(attribute)
52
+
53
+ govuk_field_with_model(:textarea, model, attribute, **govuk_textarea_options) do |govuk_field_options, error_message|
54
+ concat(govuk_textarea_field(attribute, error_message, **govuk_field_options))
55
+ end
56
+ end
57
+
39
58
  # Generates the HTML for the GOV.UK textarea component using an ActionView::Helpers::FormBuilder.
40
59
  # Unlike {#govuk_textarea}, the method will be able to automatically determine if the error message needs to be shown.
41
60
  #
42
- # @param form [ActionView::Helpers::FormBuilder] :form the form builder used to create the textarea
61
+ # @param form [ActionView::Helpers::FormBuilder] the form builder used to create the textarea
43
62
  # @param attribute [String, Symbol] the attribute of the textarea
44
63
  # @param govuk_textarea_options [Hash] options that will be used for the parts of the form group, label, hint and textarea
45
64
  #
46
- # @option govuk_textarea_options [Hash] :form_group_options see {govuk_field_with_form}
47
- # @option govuk_textarea_options [Hash] :label see {govuk_field_with_form}
48
- # @option govuk_textarea_options [Hash] :hint see {govuk_field_with_form}
49
- # @option govuk_textarea_options [Hash] :textarea_options ({}) the options that will be used when rendering the textarea.
50
- # See {govuk_textarea_field_with_form} for more details.
65
+ # @option (see govuk_textarea)
51
66
  #
52
67
  # @return (see govuk_textarea)
53
68
 
@@ -65,34 +80,45 @@ module CrownMarketplaceUtils
65
80
  # @param error_message [String] used to indicate if there is an error which will add extra classes
66
81
  # @param govuk_text_textarea_options [Hash] options that will be used in customising the HTML
67
82
  #
68
- # @option (see _govuk_textarea_field)
83
+ # @option (see set_govuk_textarea_field_options)
69
84
  #
70
85
  # @return [ActiveSupport::SafeBuffer] the HTML for the textarea field which is used in {govuk_textarea}
71
86
 
72
87
  def govuk_textarea_field(attribute, error_message, **govuk_text_textarea_options)
73
- _govuk_textarea_field(error_message, **govuk_text_textarea_options) do |govuk_text_textarea_classes, govuk_text_textarea_rows, govuk_text_textarea_attributes|
74
- text_area_tag(attribute, govuk_text_textarea_options[:content], class: govuk_text_textarea_classes, rows: govuk_text_textarea_rows, **govuk_text_textarea_attributes)
75
- end
88
+ set_govuk_textarea_field_options(error_message, govuk_text_textarea_options)
89
+
90
+ text_area_tag(
91
+ attribute,
92
+ govuk_text_textarea_options[:content],
93
+ class: govuk_text_textarea_options[:classes],
94
+ rows: govuk_text_textarea_options[:rows],
95
+ **govuk_text_textarea_options[:attributes]
96
+ )
76
97
  end
77
98
 
78
99
  # Generates the textarea HTML for {govuk_textarea_with_form}
79
100
  #
80
- # @param form [ActionView::Helpers::FormBuilder] :form the form builder used to create the textarea
101
+ # @param form [ActionView::Helpers::FormBuilder] the form builder used to create the textarea
81
102
  # @param attribute [String, Symbol] the attribute of the textarea
82
103
  # @param error_message [String] used to indicate if there is an error which will add extra classes
83
104
  # @param govuk_text_textarea_options [Hash] options that will be used in customising the HTML
84
105
  #
85
- # @option (see _govuk_textarea_field)
106
+ # @option (see set_govuk_textarea_field_options)
86
107
  #
87
108
  # @return [ActiveSupport::SafeBuffer] the HTML for the textarea field which is used in {govuk_textarea_with_form}
88
109
 
89
110
  def govuk_textarea_field_with_form(form, attribute, error_message, **govuk_text_textarea_options)
90
- _govuk_textarea_field(error_message, **govuk_text_textarea_options) do |govuk_text_textarea_classes, govuk_text_textarea_rows, govuk_text_textarea_attributes|
91
- form.text_area(attribute, class: govuk_text_textarea_classes, rows: govuk_text_textarea_rows, **govuk_text_textarea_attributes)
92
- end
111
+ set_govuk_textarea_field_options(error_message, govuk_text_textarea_options)
112
+
113
+ form.text_area(
114
+ attribute,
115
+ class: govuk_text_textarea_options[:classes],
116
+ rows: govuk_text_textarea_options[:rows],
117
+ **govuk_text_textarea_options[:attributes]
118
+ )
93
119
  end
94
120
 
95
- # Wrapper method used by {govuk_textarea_field} and {govuk_textarea_field_with_form} to generate the textarea HTML
121
+ # Initialises the attributes for the textarea input
96
122
  #
97
123
  # @param error_message [String] used to indicate if there is an error which will add extra classes
98
124
  # @param govuk_text_textarea_options [Hash] options that will be used in customising the HTML
@@ -101,27 +127,14 @@ module CrownMarketplaceUtils
101
127
  # @option govuk_text_textarea_options [String] :content (nil) the content of the textarea
102
128
  # @option govuk_text_textarea_options [String] :rows (5) the number of rows for the text area
103
129
  # @option govuk_text_textarea_options [Hash] :attributes ({}) any additional attributes that will added as part of the HTML
104
- #
105
- # @yield the textarea HTML generated by {govuk_textarea_field} or {govuk_textarea_field_with_form}
106
- #
107
- # @yieldparam govuk_text_textarea_classes [Array] the classes for the label HTML
108
- # @yieldparam govuk_text_textarea_rows [Integer, String] (5) the number of rows for the text area
109
- # @yieldparam govuk_text_textarea_attributes [Hash] additional attributes that will added as part of the HTML
110
- #
111
- # @return [ActiveSupport::SafeBuffer] the HTML for the textarea field which is used in {govuk_textarea_field} or {govuk_textarea_field_with_form}
112
130
 
113
- def _govuk_textarea_field(error_message, **govuk_text_textarea_options)
114
- govuk_text_textarea_classes = ['govuk-textarea']
115
- govuk_text_textarea_classes += ['govuk-textarea--error'] if error_message
116
- govuk_text_textarea_classes << govuk_text_textarea_options[:classes]
131
+ def set_govuk_textarea_field_options(error_message, govuk_text_textarea_options)
132
+ govuk_text_textarea_options[:classes] = "govuk-textarea #{govuk_text_textarea_options[:classes]}".rstrip
133
+ govuk_text_textarea_options[:classes] << ' govuk-textarea--error' if error_message
117
134
  govuk_text_textarea_options[:attributes] ||= {}
118
135
  govuk_text_textarea_options[:rows] ||= 5
119
-
120
- yield(govuk_text_textarea_classes, govuk_text_textarea_options[:rows], govuk_text_textarea_options[:attributes])
121
136
  end
122
137
  end
123
138
  end
124
139
  end
125
140
  end
126
-
127
- ActionView::Base.field_error_proc = proc { |html_tag, _instance| html_tag }
@@ -7,6 +7,8 @@ require_relative 'label'
7
7
 
8
8
  module CrownMarketplaceUtils
9
9
  module GovUkHelper
10
+ # rubocop:disable Metrics/ModuleLength
11
+
10
12
  # = GOV.UK Field
11
13
  #
12
14
  # This module contains methods to wrap the:
@@ -28,21 +30,17 @@ module CrownMarketplaceUtils
28
30
 
29
31
  # Generates the HTML to wrap arround a GDS input field component.
30
32
  #
31
- # @param type [Symbol] the type of the field
33
+ # @param field [Symbol] the type of the field
32
34
  # @param attribute [String, Symbol] the attribute of the field
33
35
  # @param error_message [String] the error message to be displayed
34
36
  # @param govuk_field_options [Hash] options that will be used for the parts of the form group, label, hint and field
35
37
  #
36
- # @option govuk_field_options [Hash] :form_group_options ({}) the options for govuk_form_group {govuk_form_group}
37
- # @option govuk_field_options [Hash] :label the parameters that will be used to create the label for the field:
38
- # - +:text+ (required) - the label text
39
- # - +:options+ - default: { } - the options for govuk_label {govuk_label}
40
- # @option govuk_field_options [Hash] :hint (nil) the parameters that will be used to create the hint for the field
41
- # - +:text+ (required) - the hint text
42
- # - +:options+ - default: { } - the options for govuk_hint {govuk_hint}
38
+ # @option govuk_field_options [Hash] :form_group ({}) the options for govuk_form_group {govuk_form_group}
39
+ # @option govuk_field_options [Hash] :label the parameters that will be used to create the label for the field, see {govuk_label}
40
+ # @option govuk_field_options [Hash] :hint (nil) the parameters that will be used to create the hint for the field, see {govuk_hint}.
43
41
  # If no hint is given then no hint will be rendered
44
42
  # @option govuk_field_options [Hash] :field_options ({}) the options that will be used when rendering the field.
45
- # For more details look at a module that uses +Field+.
43
+ # For more details look at the specific module that uses +Field+.
46
44
  #
47
45
  # @yield the field HTML
48
46
  #
@@ -50,20 +48,51 @@ module CrownMarketplaceUtils
50
48
  #
51
49
  # @return [ActiveSupport::SafeBuffer] the HTML that wraps arround the field
52
50
 
53
- def govuk_field(type, attribute, error_message = nil, **govuk_field_options)
54
- field_key = :"#{type}_options"
51
+ def govuk_field(field, attribute, error_message = nil, **govuk_field_options)
52
+ set_label_for_if_custom_id(field, govuk_field_options)
53
+ set_hint_id(attribute, govuk_field_options)
54
+
55
+ govuk_form_group(attribute, error_message, **(govuk_field_options[:form_group] || {})) do |display_error_message|
56
+ set_field_described_by(field, attribute, error_message, govuk_field_options)
55
57
 
56
- set_label_for_if_custom_id(field_key, govuk_field_options)
58
+ capture do
59
+ concat(govuk_label(attribute, govuk_field_options[:label][:text], **govuk_field_options[:label]))
60
+ concat(govuk_hint(govuk_field_options[:hint][:text], **govuk_field_options[:hint])) if govuk_field_options[:hint]
61
+ concat(display_error_message)
62
+ yield(govuk_field_options[field])
63
+ end
64
+ end
65
+ end
66
+
67
+ # Generates the HTML to wrap arround a GDS input field component using an ActiveModel.
68
+ # Unlike {govuk_field}, the method will be able to automatically determine if the error message needs to be shown.
69
+ #
70
+ # @param field [Symbol] the type of the field
71
+ # @param model [ActiveModel] model that will be used to find an error message
72
+ # @param attribute [String, Symbol] the attribute of the field
73
+ # @param govuk_field_options [Hash] options that will be used for the parts of the form group, label, hint and field
74
+ #
75
+ # @option (see govuk_field)
76
+ #
77
+ # @yield (see govuk_field)
78
+ #
79
+ # @yieldparam (see govuk_field)
80
+ # @yieldparam error_message [ActiveSupport::SafeBuffer] used by the field to indicate if there is an error
81
+ #
82
+ # @return (see govuk_field)
83
+
84
+ def govuk_field_with_model(field, model, attribute, **govuk_field_options)
85
+ set_label_for_if_custom_id(field, govuk_field_options)
57
86
  set_hint_id(attribute, govuk_field_options)
58
87
 
59
- govuk_form_group(attribute, error_message, **(govuk_field_options[:form_group_options] || {})) do |display_error_message|
60
- set_field_described_by(field_key, attribute, error_message, govuk_field_options)
88
+ govuk_form_group_with_model(model, attribute, **(govuk_field_options[:form_group] || {})) do |display_error_message|
89
+ set_field_described_by(field, attribute, display_error_message, govuk_field_options)
61
90
 
62
91
  capture do
63
- concat(govuk_label(attribute, govuk_field_options[:label][:text], **govuk_field_options[:label][:options]))
64
- concat(govuk_hint(govuk_field_options[:hint][:text], **govuk_field_options[:hint][:options])) if govuk_field_options[:hint]
92
+ concat(govuk_label(attribute, govuk_field_options[:label][:text], **govuk_field_options[:label]))
93
+ concat(govuk_hint(govuk_field_options[:hint][:text], **govuk_field_options[:hint])) if govuk_field_options[:hint]
65
94
  concat(display_error_message)
66
- yield(govuk_field_options[field_key])
95
+ yield(govuk_field_options[field], display_error_message)
67
96
  end
68
97
  end
69
98
  end
@@ -71,43 +100,32 @@ module CrownMarketplaceUtils
71
100
  # Generates the HTML to wrap arround a GDS input field component using an ActionView::Helpers::FormBuilder.
72
101
  # Unlike {govuk_field}, the method will be able to automatically determine if the error message needs to be shown.
73
102
  #
74
- # @param type [Symbol] the type of the field
75
- # @param form [ActionView::Helpers::FormBuilder] :form the form builder used to create the label
103
+ # @param field [Symbol] the type of the field
104
+ # @param form [ActionView::Helpers::FormBuilder] the form builder used to create the label
76
105
  # @param attribute [String, Symbol] the attribute of the field
77
106
  # @param govuk_field_options [Hash] options that will be used for the parts of the form group, label, hint and field
78
107
  #
79
- # @option govuk_field_options [Hash] :form_group_options ({}) the options for govuk_form_group {govuk_form_group}
80
- # @option govuk_field_options [Hash] :label the parameters that will be used to create the label for the field:
81
- # - +:text+ (required) - the label text
82
- # - +:options+ - default: { } - the options for govuk_label {govuk_label}
83
- # @option govuk_field_options [Hash] :hint (nil) the parameters that will be used to create the hint for the field
84
- # - +:text+ (required) - the hint text
85
- # - +:options+ - default: { } - the options for govuk_hint {govuk_hint}
86
- # If no hint is given then no hint will be rendered
87
- # @option govuk_field_options [Hash] :field_options ({}) the options that will be used when rendering the field.
88
- # For more details look at a module that uses +Field+.
108
+ # @option (see govuk_field)
89
109
  #
90
- # @yield the field HTML
110
+ # @yield (see govuk_field)
91
111
  #
92
- # @yieldparam govuk_field_options [Hash] the HTML options used when rendering the field
112
+ # @yieldparam (see govuk_field)
93
113
  # @yieldparam error_message [ActiveSupport::SafeBuffer] used by the field to indicate if there is an error
94
114
  #
95
115
  # @return (see govuk_field)
96
116
 
97
- def govuk_field_with_form(type, form, attribute, **govuk_field_options)
98
- field_key = :"#{type}_options"
99
-
100
- set_label_for_if_custom_id(field_key, govuk_field_options)
117
+ def govuk_field_with_form(field, form, attribute, **govuk_field_options)
118
+ set_label_for_if_custom_id(field, govuk_field_options)
101
119
  set_hint_id(attribute, govuk_field_options)
102
120
 
103
- govuk_form_group_with_model(form.object, attribute, **(govuk_field_options[:form_group_options] || {})) do |display_error_message|
104
- set_field_described_by(field_key, attribute, display_error_message, govuk_field_options)
121
+ govuk_form_group_with_model(form.object, attribute, **(govuk_field_options[:form_group] || {})) do |display_error_message|
122
+ set_field_described_by(field, attribute, display_error_message, govuk_field_options)
105
123
 
106
124
  capture do
107
- concat(govuk_label_with_form(form, attribute, govuk_field_options[:label][:text], **(govuk_field_options[:label][:options] || {})))
108
- concat(govuk_hint(govuk_field_options[:hint][:text], **govuk_field_options[:hint][:options])) if govuk_field_options[:hint]
125
+ concat(govuk_label_with_form(form, attribute, govuk_field_options[:label][:text], **(govuk_field_options[:label] || {})))
126
+ concat(govuk_hint(govuk_field_options[:hint][:text], **govuk_field_options[:hint])) if govuk_field_options[:hint]
109
127
  concat(display_error_message)
110
- yield(govuk_field_options[field_key], display_error_message)
128
+ yield(govuk_field_options[field], display_error_message)
111
129
  end
112
130
  end
113
131
  end
@@ -115,16 +133,14 @@ module CrownMarketplaceUtils
115
133
  # Generates the HTML to wrap arround a GDS input fields component.
116
134
  # These are inputs that require being wrapped in a fieldset, for example radio buttons.
117
135
  #
118
- # @param type [Symbol] the type of the fields
136
+ # @param field [Symbol] the type of the fields
119
137
  # @param attribute [String, Symbol] the attribute of the fields
120
138
  # @param error_message [String] the error message to be displayed
121
139
  # @param govuk_fields_options [Hash] options that will be used for the parts of the fieldset, form group, hint and fields
122
140
  #
123
- # @option govuk_fields_options [Hash] :form_group_options ({}) the options for govuk_form_group {govuk_form_group}
124
- # @option govuk_fields_options [Hash] :fieldset_options ({}) the options for govuk_fieldset {govuk_fieldset}
125
- # @option govuk_fields_options [Hash] :hint (nil) the parameters that will be used to create the hint for the fields
126
- # - +:text+ (required) - the hint text
127
- # - +:options+ - default: { } - the options for govuk_hint {govuk_hint}
141
+ # @option govuk_fields_options [Hash] :form_group ({}) the options for govuk_form_group {govuk_form_group}
142
+ # @option govuk_fields_options [Hash] :fieldset ({}) the options for govuk_fieldset {govuk_fieldset}
143
+ # @option govuk_fields_options [Hash] :hint (nil) the parameters that will be used to create the hint for the field, see {govuk_hint}.
128
144
  # If no hint is given then no hint will be rendered
129
145
  # @option govuk_fields_options [Hash] :field_options ({}) the options that will be used when rendering the fields.
130
146
  # For more details look at a module that uses +Field+.
@@ -135,21 +151,53 @@ module CrownMarketplaceUtils
135
151
  #
136
152
  # @return [ActiveSupport::SafeBuffer] the HTML that wraps arround the fields
137
153
 
138
- def govuk_fields(type, attribute, error_message = nil, **govuk_fields_options)
139
- field_key = :"#{type}_options"
154
+ def govuk_fields(field, attribute, error_message = nil, **govuk_fields_options)
155
+ set_hint_id(attribute, govuk_fields_options)
156
+
157
+ govuk_form_group(attribute, error_message, **(govuk_fields_options[:form_group] || {})) do |display_error_message|
158
+ set_field_described_by(:fieldset, attribute, error_message, govuk_fields_options)
159
+ (govuk_fields_options[field] ||= {})[:attributes] ||= {}
160
+
161
+ govuk_fieldset(**govuk_fields_options[:fieldset]) do
162
+ concat(capture do
163
+ concat(govuk_hint(govuk_fields_options[:hint][:text], **govuk_fields_options[:hint])) if govuk_fields_options[:hint]
164
+ concat(display_error_message)
165
+ yield(govuk_fields_options[field])
166
+ end)
167
+ end
168
+ end
169
+ end
170
+
171
+ # Generates the HTML to wrap arround a GDS input fields component using an ActiveModel.
172
+ # These are inputs that require being wrapped in a fieldset, for example radio buttons.
173
+ #
174
+ # @param field [Symbol] the type of the fields
175
+ # @param model [ActiveModel] model that will be used to find an error message
176
+ # @param attribute [String, Symbol] the attribute of the fields
177
+ # @param govuk_fields_options [Hash] options that will be used for the parts of the fieldset, form group, hint and fields
178
+ #
179
+ # @option (see govuk_fields)
180
+ #
181
+ # @yield (see govuk_fields)
182
+ #
183
+ # @yieldparam (see govuk_fields)
184
+ # @yieldparam any_errors flag to indicate if there are errors present
185
+ #
186
+ # @return (see govuk_fields)
140
187
 
188
+ def govuk_fields_with_model(field, model, attribute, **govuk_fields_options)
141
189
  set_hint_id(attribute, govuk_fields_options)
142
190
 
143
- govuk_form_group(attribute, error_message, **(govuk_fields_options[:form_group_options] || {})) do |display_error_message|
144
- set_field_described_by(:fieldset_options, attribute, error_message, govuk_fields_options)
145
- (govuk_fields_options[field_key] ||= {})[:attributes] ||= {}
191
+ govuk_form_group_with_model(model, attribute, **(govuk_fields_options[:form_group] || {})) do |display_error_message|
192
+ set_field_described_by(:fieldset, attribute, display_error_message, govuk_fields_options)
193
+ (govuk_fields_options[field] ||= {})[:attributes] ||= {}
146
194
 
147
- govuk_fieldset(**govuk_fields_options[:fieldset_options]) do
148
- capture do
149
- concat(govuk_hint(govuk_fields_options[:hint][:text], **govuk_fields_options[:hint][:options])) if govuk_fields_options[:hint]
195
+ govuk_fieldset(**govuk_fields_options[:fieldset]) do
196
+ concat(capture do
197
+ concat(govuk_hint(govuk_fields_options[:hint][:text], **govuk_fields_options[:hint])) if govuk_fields_options[:hint]
150
198
  concat(display_error_message)
151
- yield(govuk_fields_options[field_key])
152
- end
199
+ yield(govuk_fields_options[field], display_error_message)
200
+ end)
153
201
  end
154
202
  end
155
203
  end
@@ -159,41 +207,32 @@ module CrownMarketplaceUtils
159
207
  #
160
208
  # Unlike {govuk_fields}, the method will be able to automatically determine if the error message needs to be shown.
161
209
  #
162
- # @param type [Symbol] the type of the fields
163
- # @param form [ActionView::Helpers::FormBuilder] :form the form builder used to create the label
210
+ # @param field [Symbol] the type of the fields
211
+ # @param form [ActionView::Helpers::FormBuilder] the form builder used to create the label
164
212
  # @param attribute [String, Symbol] the attribute of the fields
165
213
  # @param govuk_fields_options [Hash] options that will be used for the parts of the fieldset, form group, hint and fields
166
214
  #
167
- # @option govuk_fields_options [Hash] :form_group_options ({}) the options for govuk_form_group {govuk_form_group}
168
- # @option govuk_fields_options [Hash] :fieldset_options ({}) the options for govuk_fieldset {govuk_fieldset}
169
- # @option govuk_fields_options [Hash] :hint (nil) the parameters that will be used to create the hint for the fields
170
- # - +:text+ (required) - the hint text
171
- # - +:options+ - default: { } - the options for govuk_hint {govuk_hint}
172
- # If no hint is given then no hint will be rendered
173
- # @option govuk_fields_options [Hash] :field_options ({}) the options that will be used when rendering the fields.
174
- # For more details look at a module that uses +Field+.
215
+ # @option (see govuk_fields)
175
216
  #
176
- # @yield the fields HTML
217
+ # @yield (see govuk_fields)
177
218
  #
178
- # @yieldparam govuk_fields_options [Hash] the HTML options used when rendering the fields
219
+ # @yieldparam (see govuk_fields_with_model)
179
220
  #
180
221
  # @return (see govuk_fields)
181
222
 
182
- def govuk_fields_with_form(type, form, attribute, **govuk_fields_options)
183
- field_key = :"#{type}_options"
184
-
223
+ def govuk_fields_with_form(field, form, attribute, **govuk_fields_options)
185
224
  set_hint_id(attribute, govuk_fields_options)
186
225
 
187
- govuk_form_group_with_model(form.object, attribute, **(govuk_fields_options[:form_group_options] || {})) do |display_error_message|
188
- set_field_described_by(:fieldset_options, attribute, display_error_message, govuk_fields_options)
189
- (govuk_fields_options[field_key] ||= {})[:attributes] ||= {}
226
+ govuk_form_group_with_model(form.object, attribute, **(govuk_fields_options[:form_group] || {})) do |display_error_message|
227
+ set_field_described_by(:fieldset, attribute, display_error_message, govuk_fields_options)
228
+ (govuk_fields_options[field] ||= {})[:attributes] ||= {}
190
229
 
191
- govuk_fieldset(**govuk_fields_options[:fieldset_options]) do
192
- capture do
193
- concat(govuk_hint(govuk_fields_options[:hint][:text], **govuk_fields_options[:hint][:options])) if govuk_fields_options[:hint]
230
+ govuk_fieldset(**govuk_fields_options[:fieldset]) do
231
+ concat(capture do
232
+ concat(govuk_hint(govuk_fields_options[:hint][:text], **govuk_fields_options[:hint])) if govuk_fields_options[:hint]
194
233
  concat(display_error_message)
195
- yield(govuk_fields_options[field_key])
196
- end
234
+ yield(govuk_fields_options[field], display_error_message)
235
+ end)
197
236
  end
198
237
  end
199
238
  end
@@ -204,11 +243,11 @@ module CrownMarketplaceUtils
204
243
  #
205
244
  # @param govuk_field_options [Hash] see {govuk_field} for details
206
245
 
207
- def set_label_for_if_custom_id(field_key, govuk_field_options)
208
- field_id = govuk_field_options.dig(field_key, :attributes, :id)
246
+ def set_label_for_if_custom_id(field, govuk_field_options)
247
+ field_id = govuk_field_options.dig(field, :attributes, :id)
209
248
 
210
- govuk_field_options[:label][:options] ||= {}
211
- (govuk_field_options[:label][:options][:attributes] ||= {}).merge!({ for: field_id }) if field_id
249
+ govuk_field_options[:label] ||= {}
250
+ (govuk_field_options[:label][:attributes] ||= {}).merge!({ for: field_id }) if field_id
212
251
  end
213
252
 
214
253
  # Sets the hint ID if there is a hint, and the ID for the hint has not been sent
@@ -217,10 +256,10 @@ module CrownMarketplaceUtils
217
256
  # @param govuk_field_options [Hash] see {govuk_field} for details
218
257
 
219
258
  def set_hint_id(attribute, govuk_field_options)
220
- return if !govuk_field_options[:hint] || govuk_field_options.dig(:hint, :options, :attributes, :id)
259
+ return if !govuk_field_options[:hint] || govuk_field_options.dig(:hint, :attributes, :id)
221
260
 
222
- govuk_field_options[:hint][:options] ||= {}
223
- (govuk_field_options[:hint][:options][:attributes] ||= {}).merge!({ id: "#{attribute}-hint" })
261
+ govuk_field_options[:hint] ||= {}
262
+ (govuk_field_options[:hint][:attributes] ||= {}).merge!({ id: "#{attribute}-hint" })
224
263
  end
225
264
 
226
265
  # Adds the aira-describedby attribute for the field
@@ -230,19 +269,19 @@ module CrownMarketplaceUtils
230
269
  # @param error_message [String] used to indicate if there is an error
231
270
  # @param govuk_field_options [Hash] see {#govuk_field} for details
232
271
 
233
- def set_field_described_by(field_key, attribute, error_message, govuk_field_options)
272
+ def set_field_described_by(field, attribute, error_message, govuk_field_options)
234
273
  aria_described_by = []
235
- aria_described_by << govuk_field_options.dig(field_key, :attributes, :aria, :describedby)
236
- aria_described_by << govuk_field_options[:hint][:options][:attributes][:id] if govuk_field_options[:hint]
274
+ aria_described_by << govuk_field_options.dig(field, :attributes, :aria, :describedby)
275
+ aria_described_by << govuk_field_options[:hint][:attributes][:id] if govuk_field_options[:hint]
237
276
  aria_described_by << "#{attribute}-error" if error_message
238
277
  aria_described_by.compact!
239
278
 
240
- govuk_field_options[field_key] ||= {}
241
- govuk_field_options[field_key][:attributes] ||= {}
279
+ govuk_field_options[field] ||= {}
280
+ govuk_field_options[field][:attributes] ||= {}
242
281
 
243
282
  return unless aria_described_by.any?
244
283
 
245
- (govuk_field_options[field_key][:attributes][:aria] ||= {}).merge!({ describedby: aria_described_by.join(' ') })
284
+ (govuk_field_options[field][:attributes][:aria] ||= {}).merge!({ describedby: aria_described_by.join(' ') })
246
285
  end
247
286
 
248
287
  # Sets the hint classes and adds the aira-describedby attribute for a fields item
@@ -252,12 +291,15 @@ module CrownMarketplaceUtils
252
291
  # @param item [Hash] the options for that item
253
292
 
254
293
  def set_item_options_for_hint(type, attribute, item)
255
- (item[:hint][:options] ||= {})[:attributes] ||= {}
256
- item[:hint][:options][:classes] = "govuk-#{type}__hint #{item[:hint][:options][:classes]}".rstrip
257
- item[:hint][:options][:attributes][:id] ||= "#{attribute}_#{item[:value]}-item-hint"
294
+ (item[:hint] ||= {})[:attributes] ||= {}
295
+ item[:hint][:classes] = "govuk-#{type}__hint #{item[:hint][:classes]}".rstrip
296
+ item[:hint][:attributes][:id] ||= "#{attribute}_#{item[:value]}-item-hint"
258
297
 
259
- (item[:attributes][:aria] ||= {})[:describedby] = item[:hint][:options][:attributes][:id]
298
+ (item[:attributes][:aria] ||= {})[:describedby] = item[:hint][:attributes][:id]
260
299
  end
261
300
  end
301
+ # rubocop:enable Metrics/ModuleLength
262
302
  end
263
303
  end
304
+
305
+ ActionView::Base.field_error_proc = proc { |html_tag, _instance| html_tag }
@@ -35,7 +35,7 @@ module CrownMarketplaceUtils
35
35
  tag.fieldset(class: govuk_fieldset_classes, **govuk_fieldset_options[:attributes]) do
36
36
  capture do
37
37
  concat(govuk_legend(govuk_fieldset_options[:legend])) if govuk_fieldset_options[:legend]
38
- concat(yield)
38
+ yield
39
39
  end
40
40
  end
41
41
  end
@@ -44,8 +44,8 @@ module CrownMarketplaceUtils
44
44
  if govuk_header_options[:service_options].present? || govuk_header_options[:navigation_options].present?
45
45
  concat(tag.div(class: 'govuk-header__content') do
46
46
  capture do
47
- concat(govuk_header_service_name(service_options)) if govuk_header_options[:service_options].present?
48
- concat(govuk_header_navigation(navigation_options)) if govuk_header_options[:navigation_options].present?
47
+ concat(govuk_header_service_name(govuk_header_options[:service_options])) if govuk_header_options[:service_options].present?
48
+ concat(govuk_header_navigation(govuk_header_options[:navigation_options])) if govuk_header_options[:navigation_options].present?
49
49
  end
50
50
  end)
51
51
  end
@@ -43,7 +43,7 @@ module CrownMarketplaceUtils
43
43
 
44
44
  # Generates the HTML for the GOV.UK label component using an ActionView::Helpers::FormBuilder
45
45
  #
46
- # @param form [ActionView::Helpers::FormBuilder] :form the form builder used to create the label
46
+ # @param form [ActionView::Helpers::FormBuilder] the form builder used to create the label
47
47
  # @param attribute [String, Symbol] the attribute of the input that requires a label
48
48
  # @param label_text [String] the label text, it is ignored if a block is given
49
49
  # @param govuk_label_options [Hash] options that will be used in customising the HTML
@@ -199,7 +199,7 @@ module CrownMarketplaceUtils
199
199
  end
200
200
 
201
201
  tag.li(class: govuk_pagination_item_classes) do
202
- link_to(govuk_pagination_item[:href], govuk_pagination_item[:number], class: 'govuk-link govuk-pagination__link', **govuk_pagination_item[:attributes])
202
+ link_to(govuk_pagination_item[:number], govuk_pagination_item[:href], class: 'govuk-link govuk-pagination__link', **govuk_pagination_item[:attributes])
203
203
  end
204
204
  end
205
205
 
@@ -7,6 +7,8 @@ require_relative 'gov_uk_helper/error_message'
7
7
  require_relative 'gov_uk_helper/field'
8
8
  require_relative 'gov_uk_helper/field/character_count'
9
9
  require_relative 'gov_uk_helper/field/checkboxes'
10
+ require_relative 'gov_uk_helper/field/date_input'
11
+ require_relative 'gov_uk_helper/field/file_upload'
10
12
  require_relative 'gov_uk_helper/field/input'
11
13
  require_relative 'gov_uk_helper/field/select'
12
14
  require_relative 'gov_uk_helper/field/textarea'
@@ -33,6 +35,8 @@ module CrownMarketplaceUtils
33
35
  include Field
34
36
  include Field::CharacterCount
35
37
  include Field::Checkboxes
38
+ include Field::DateInput
39
+ include Field::FileUpload
36
40
  include Field::Input
37
41
  include Field::Radios
38
42
  include Field::Select
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CrownMarketplaceUtils
4
- VERSION = '0.1.0.beta.3'
4
+ VERSION = '0.1.0.beta.4 '
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crown_marketplace_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.beta.3
4
+ version: 0.1.0.beta.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - tim-s-ccs
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-12-02 00:00:00.000000000 Z
11
+ date: 2022-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionview
@@ -176,6 +176,8 @@ files:
176
176
  - lib/crown_marketplace_utils/gov_uk_helper/field.rb
177
177
  - lib/crown_marketplace_utils/gov_uk_helper/field/character_count.rb
178
178
  - lib/crown_marketplace_utils/gov_uk_helper/field/checkboxes.rb
179
+ - lib/crown_marketplace_utils/gov_uk_helper/field/date_input.rb
180
+ - lib/crown_marketplace_utils/gov_uk_helper/field/file_upload.rb
179
181
  - lib/crown_marketplace_utils/gov_uk_helper/field/input.rb
180
182
  - lib/crown_marketplace_utils/gov_uk_helper/field/radios.rb
181
183
  - lib/crown_marketplace_utils/gov_uk_helper/field/select.rb