govuk_design_system_formbuilder 0.7.1 → 0.7.2

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: 843bd26d3611fad40854e1bdfc5864617e64f90ffc51ededfcf1af0a74f4d2ae
4
- data.tar.gz: 530a95ed1fb38467f56ef2904110d153c8b1fe5832d5226914f38ae482c8aca7
3
+ metadata.gz: 5dccd0fa57d48d4d0198307c0c4e11ac03dba8ffacd9bcf7850ba509477e4a82
4
+ data.tar.gz: f3f197d18cc7fb186cf319da8b90f16d9bef48bc0e3c6493857633105872b599
5
5
  SHA512:
6
- metadata.gz: 129ddeaf0fba3811dfd02b6730af2e30adfe1c7a312744aea73ee8bafddade947d92912f86f6e94b94307385b9a6f7dfbf2f58487e4b5d4345c5dc2d53cc1ebd
7
- data.tar.gz: 8ff31c945db767cb82dff353e7355e52f1901d6dc7e517f08f6b6a40ed5816bde09a1832f428b9c1c4d9f71304d64f539acbc9dfdd26e4ccccecd5cd2661ab73
6
+ metadata.gz: dd17c106ef4052149c832e5e8428b7beeddb56cdef0ec4861036242069021d4a5122da8c817e19902c757513a9bc23bf47b4809c63fbc2f20ca19eb983921ee5
7
+ data.tar.gz: c3ee032aa1925b929abcf0a9d400f1a1404bb5a56b8290ae1f66d475018841a88bb4c504fddfa41ae4baf8d1a7094eb645b67d6b2ffbf935d726a023c42bd2a0
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## What's included
4
4
 
5
- * 100% compatibility with the GOV.UK Design System
5
+ * 100% compatibility with the [GOV.UK Design System](https://design-system.service.gov.uk/)
6
6
  * Full control of labels, hints, fieldsets and legends
7
7
  * No overwriting of Rails' default form helpers
8
8
  * Automatic ARIA associations between hints, errors and inputs
@@ -1,7 +1,6 @@
1
1
  module GOVUKDesignSystemFormBuilder
2
2
  module Builder
3
-
4
- # Generates a input of type `text`
3
+ # Generates a input of type +text+
5
4
  #
6
5
  # @param attribute_name [Symbol] The name of the attribute
7
6
  # @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
@@ -11,9 +10,10 @@ module GOVUKDesignSystemFormBuilder
11
10
  # @option label weight [String] the weight of the label font, can be +bold+ or +regular+
12
11
  # @option args [Hash] args additional arguments are applied as attributes to +input+ element
13
12
  # @return [ActiveSupport::SafeBuffer] HTML output
13
+ # @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
14
14
  #
15
15
  # @example A required full name field with a placeholder
16
- # = govuk_text_field :name,
16
+ # = f.govuk_text_field :name,
17
17
  # label: { text: 'Full name' },
18
18
  # hint_text: 'It says it on your birth certificate',
19
19
  # required: true,
@@ -22,7 +22,7 @@ module GOVUKDesignSystemFormBuilder
22
22
  Elements::Input.new(self, object_name, attribute_name, attribute_type: :text, hint_text: hint_text, label: label, **args).html
23
23
  end
24
24
 
25
- # Generates a input of type `tel`
25
+ # Generates a input of type +tel+
26
26
  #
27
27
  # @param attribute_name [Symbol] The name of the attribute
28
28
  # @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
@@ -32,9 +32,11 @@ module GOVUKDesignSystemFormBuilder
32
32
  # @option label weight [String] the weight of the label font, can be +bold+ or +regular+
33
33
  # @option args [Hash] args additional arguments are applied as attributes to +input+ element
34
34
  # @return [ActiveSupport::SafeBuffer] HTML output
35
+ # @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
36
+ # @see https://design-system.service.gov.uk/patterns/telephone-numbers/ GOV.UK Telephone number patterns
35
37
  #
36
38
  # @example A required phone number field with a placeholder
37
- # = govuk_phone_field :phone_number,
39
+ # = f.govuk_phone_field :phone_number,
38
40
  # label: { text: 'UK telephone number' },
39
41
  # hint_text: 'Include the dialling code',
40
42
  # required: true,
@@ -43,7 +45,7 @@ module GOVUKDesignSystemFormBuilder
43
45
  Elements::Input.new(self, object_name, attribute_name, attribute_type: :phone, hint_text: hint_text, label: label, **args).html
44
46
  end
45
47
 
46
- # Generates a input of type `email`
48
+ # Generates a input of type +email+
47
49
  #
48
50
  # @param attribute_name [Symbol] The name of the attribute
49
51
  # @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
@@ -53,16 +55,18 @@ module GOVUKDesignSystemFormBuilder
53
55
  # @option label weight [String] the weight of the label font, can be +bold+ or +regular+
54
56
  # @option args [Hash] args additional arguments are applied as attributes to +input+ element
55
57
  # @return [ActiveSupport::SafeBuffer] HTML output
58
+ # @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
59
+ # @see https://design-system.service.gov.uk/patterns/email-addresses/ GOV.UK Email address patterns
56
60
  #
57
61
  # @example An email address field with a placeholder
58
- # = govuk_email_field :email_address,
62
+ # = f.govuk_email_field :email_address,
59
63
  # label: { text: 'Enter your email address' },
60
64
  # placeholder: 'ralph.wiggum@springfield.edu'
61
65
  def govuk_email_field(attribute_name, hint_text: nil, label: {}, **args)
62
66
  Elements::Input.new(self, object_name, attribute_name, attribute_type: :email, hint_text: hint_text, label: label, **args).html
63
67
  end
64
68
 
65
- # Generates a input of type `url`
69
+ # Generates a input of type +url+
66
70
  #
67
71
  # @param attribute_name [Symbol] The name of the attribute
68
72
  # @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
@@ -72,9 +76,10 @@ module GOVUKDesignSystemFormBuilder
72
76
  # @option label weight [String] the weight of the label font, can be +bold+ or +regular+
73
77
  # @option args [Hash] args additional arguments are applied as attributes to +input+ element
74
78
  # @return [ActiveSupport::SafeBuffer] HTML output
79
+ # @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
75
80
  #
76
81
  # @example A url field with autocomplete
77
- # = govuk_url_field :favourite_website,
82
+ # = f.govuk_url_field :favourite_website,
78
83
  # label: { text: 'Enter your favourite website' },
79
84
  # placeholder: 'https://www.gov.uk',
80
85
  # autocomplete: 'url'
@@ -82,7 +87,7 @@ module GOVUKDesignSystemFormBuilder
82
87
  Elements::Input.new(self, object_name, attribute_name, attribute_type: :url, hint_text: hint_text, label: label, **args).html
83
88
  end
84
89
 
85
- # Generates a input of type `number`
90
+ # Generates a input of type +number+
86
91
  #
87
92
  # @param attribute_name [Symbol] The name of the attribute
88
93
  # @param hint_text [String] The content of the hint. No hint will be injected if left +nil+
@@ -92,9 +97,10 @@ module GOVUKDesignSystemFormBuilder
92
97
  # @option label weight [String] the weight of the label font, can be +bold+ or +regular+
93
98
  # @option args [Hash] args additional arguments are applied as attributes to the +input+ element
94
99
  # @return [ActiveSupport::SafeBuffer] HTML output
100
+ # @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
95
101
  #
96
102
  # @example A number field with placeholder, min, max and step
97
- # = govuk_number_field :iq,
103
+ # = f.govuk_number_field :iq,
98
104
  # label: { text: 'What is your IQ?' },
99
105
  # placeholder: 100,
100
106
  # min: 80,
@@ -124,7 +130,7 @@ module GOVUKDesignSystemFormBuilder
124
130
  # or characters
125
131
  #
126
132
  # @example A number field with placeholder, min, max and step
127
- # = govuk_number_field :cv,
133
+ # = f.govuk_number_field :cv,
128
134
  # label: { text: 'Tell us about your work history' },
129
135
  # rows: 8,
130
136
  # max_words: 300
@@ -142,7 +148,8 @@ module GOVUKDesignSystemFormBuilder
142
148
  # @option label text [String] the label text
143
149
  # @option label size [String] the size of the label font, can be +large+, +medium+, +regular+ or +small+
144
150
  # @option label weight [String] the weight of the label font, can be +bold+ or +regular+
145
- def govuk_collection_select(attribute_name, collection, value_method, text_method, options: {}, html_options: {}, hint_text: nil, label: {})
151
+ # @return [ActiveSupport::SafeBuffer] HTML output
152
+ def govuk_collection_select(attribute_name, collection, value_method, text_method, options: {}, html_options: {}, hint_text: nil, label: {}, &block)
146
153
  label_element = Elements::Label.new(self, object_name, attribute_name, label)
147
154
  hint_element = Elements::Hint.new(self, object_name, attribute_name, hint_text)
148
155
  error_element = Elements::ErrorMessage.new(self, object_name, attribute_name)
@@ -174,7 +181,41 @@ module GOVUKDesignSystemFormBuilder
174
181
  end
175
182
  end
176
183
 
177
- def govuk_collection_radio_buttons(attribute_name, collection, value_method, text_method, hint_method = nil, options: { inline: false }, html_options: {}, hint_text: nil, legend: {})
184
+ # Generates a radio button for each item in the supplied collection
185
+ #
186
+ # @note Unlike the Rails +collection_radio_buttons+ helper, this version can also insert
187
+ # hints per item in the collection by supplying a +:hint_method+
188
+ #
189
+ # @param attribute_name [Symbol] The name of the attribute
190
+ # @param collection [Enumerable<Object>] Options to be added to the +select+ element
191
+ # @param value_method [Symbol] The method called against each member of the collection to provide the value
192
+ # @param text_method [Symbol] The method called against each member of the collection to provide the text
193
+ # @param hint_method [Symbol] The method called against each member of the collection to provide the hint text
194
+ # @param hint_text [String] The content of the fieldset hint. No hint will be injected if left +nil+
195
+ # @param legend [Hash] options for configuring the hash
196
+ # @param inline [Boolean] controls whether the radio buttons are displayed inline or not
197
+ # @option legend text [String] the fieldset legend's text content
198
+ # @option legend size [String] the size of the fieldset legend font, can be +xl+, +l+, +m+ or +s+
199
+ # @param block [Block] any HTML passed in is inserted inside the fieldset container,
200
+ # between the error and the radios container element
201
+ # @return [ActiveSupport::SafeBuffer] HTML output
202
+ #
203
+ # @example A collection of radio buttons for favourite colours
204
+ #
205
+ # @colours = [
206
+ # OpenStruct.new(id: 'red', name: 'Red', description: 'Roses are red'),
207
+ # OpenStruct.new(id: 'blue', name: 'Blue', description: 'Violets are... purple?')
208
+ # ]
209
+ #
210
+ # = f.govuk_collection_radio_buttons :favourite_colour,
211
+ # @colours,
212
+ # :id,
213
+ # :name,
214
+ # :description,
215
+ # legend: { text: 'Pick your favourite colour', size: 'm' },
216
+ # hint_text: 'If you cannot find the exact match choose something close',
217
+ # inline: false
218
+ def govuk_collection_radio_buttons(attribute_name, collection, value_method, text_method, hint_method = nil, hint_text: nil, legend: { text: nil, size: 'm' }, inline: false, &block)
178
219
  hint_element = Elements::Hint.new(self, object_name, attribute_name, hint_text)
179
220
  error_element = Elements::ErrorMessage.new(self, object_name, attribute_name)
180
221
 
@@ -186,7 +227,7 @@ module GOVUKDesignSystemFormBuilder
186
227
  error_element.html,
187
228
 
188
229
  (yield if block_given?),
189
- Containers::Radios.new(self, inline: options.dig(:inline)).html do
230
+ Containers::Radios.new(self, inline: inline).html do
190
231
  safe_join(
191
232
  collection.map do |item|
192
233
  Elements::Radios::CollectionRadio.new(self, object_name, attribute_name, item, value_method, text_method, hint_method).html
@@ -199,7 +240,30 @@ module GOVUKDesignSystemFormBuilder
199
240
  end
200
241
  end
201
242
 
202
- def govuk_radio_buttons_fieldset(attribute_name, options: { inline: false }, hint_text: nil, legend: {})
243
+ # Generates a radio button fieldset container and injects the supplied block contents
244
+ #
245
+ # @note The intention is to use {#govuk_radio_button} and {#govuk_radio_divider} within the passed-in block
246
+ #
247
+ # @param attribute_name [Symbol] The name of the attribute
248
+ # @param hint_text [String] The content of the fieldset hint. No hint will be injected if left +nil+
249
+ # @param legend [Hash] options for configuring the hash
250
+ # @param inline [Boolean] controls whether the radio buttons are displayed inline or not
251
+ # @option legend text [String] the fieldset legend's text content
252
+ # @option legend size [String] the size of the fieldset legend font, can be +xl+, +l+, +m+ or +s+
253
+ # @param block [Block] any HTML passed in will be injected into the fieldset
254
+ # element and should contain radio buttons and optionally a divider
255
+ # @see https://design-system.service.gov.uk/components/radios/ GOV.UK Radios
256
+ # @return [ActiveSupport::SafeBuffer] HTML output
257
+ #
258
+ # @example A collection of radio buttons for favourite colours with a divider
259
+ #
260
+ # = f.govuk_collection_radio_buttons :favourite_colour, inline: false do
261
+ # = f.govuk_radio_button :favourite_colour, :red, label: { text: 'Red' }
262
+ # = f.govuk_radio_button :favourite_colour, :green, label: { text: 'Green' }
263
+ # = f.govuk_radio_divider
264
+ # = f.govuk_radio_button :favourite_colour, :yellow, label: { text: 'Yellow' }
265
+ #
266
+ def govuk_radio_buttons_fieldset(attribute_name, inline: false, hint_text: nil, legend: {}, &block)
203
267
  hint_element = Elements::Hint.new(self, object_name, attribute_name, hint_text)
204
268
  error_element = Elements::ErrorMessage.new(self, object_name, attribute_name)
205
269
 
@@ -208,7 +272,7 @@ module GOVUKDesignSystemFormBuilder
208
272
  safe_join([
209
273
  hint_element.html,
210
274
  error_element.html,
211
- Containers::Radios.new(self, inline: options.dig(:inline)).html do
275
+ Containers::Radios.new(self, inline: inline).html do
212
276
  yield
213
277
  end
214
278
  ])
@@ -216,16 +280,69 @@ module GOVUKDesignSystemFormBuilder
216
280
  end
217
281
  end
218
282
 
219
- # only intended for use inside a #govuk_radio_buttons_fieldset
283
+
284
+ # Generates a radio button
285
+ #
286
+ # @note This should only be used from within a {#govuk_radio_buttons_fieldset}
287
+ # @param attribute_name [Symbol] The name of the attribute
288
+ # @param hint_text [String] the contents of the hint
289
+ # @option legend text [String] the fieldset legend's text content
290
+ # @option legend size [String] the size of the fieldset legend font, can be +xl+, +l+, +m+ or +s+
291
+ # @see https://design-system.service.gov.uk/components/radios/ GOV.UK Radios
292
+ # @param block [Block] Any supplied HTML will be wrapped in a conditional
293
+ # container and only revealed when the radio button is picked
294
+ # @return [ActiveSupport::SafeBuffer] HTML output
295
+ #
296
+ # @example A collection of radio buttons for favourite colours with a divider
297
+ #
298
+ # = f.govuk_collection_radio_buttons :favourite_colour, inline: false do
299
+ # = f.govuk_radio_button :favourite_colour, :red, label: { text: 'Red' } do
300
+ #
220
301
  def govuk_radio_button(attribute_name, value, hint_text: nil, label: {}, &block)
221
302
  Elements::Radios::FieldsetRadio.new(self, object_name, attribute_name, value, hint_text: hint_text, label: label, &block).html
222
303
  end
223
304
 
305
+ # Inserts a text divider into a list of radio buttons
306
+ #
307
+ # @param text [String] The divider text
308
+ # @note This should only be used from within a {#govuk_radio_buttons_fieldset}
309
+ # @see https://design-system.service.gov.uk/components/radios/#radio-items-with-a-text-divider GOV.UK Radios with a text divider
310
+ # @example A custom divider
311
+ # = govuk_radio_divider 'Alternatively'
224
312
  def govuk_radio_divider(text = 'or')
225
313
  tag.div(text, class: %w(govuk-radios__divider))
226
314
  end
227
315
 
228
- def govuk_collection_check_boxes(attribute_name, collection, value_method, text_method, hint_method = nil, html_options: {}, hint_text: nil, legend: {})
316
+ # Generate a list of check boxes from a collection
317
+ #
318
+ # @param attribute_name [Symbol] The name of the attribute
319
+ # @param collection [Enumerable<Object>] Options to be added to the +select+ element
320
+ # @param value_method [Symbol] The method called against each member of the collection to provide the value
321
+ # @param text_method [Symbol] The method called against each member of the collection to provide the text
322
+ # @param hint_method [Symbol] The method called against each member of the collection to provide the hint text
323
+ # @param hint_text [String] The content of the fieldset hint. No hint will be injected if left +nil+
324
+ # @param legend [Hash] options for configuring the hash
325
+ # @option legend text [String] the fieldset legend's text content
326
+ # @option legend size [String] the size of the fieldset legend font, can be +xl+, +l+, +m+ or +s+
327
+ # @param block [Block] any HTML passed in will be injected into the fieldset, after the hint and before the checkboxes
328
+ # @return [ActiveSupport::SafeBuffer] HTML output
329
+ #
330
+ # @example A collection of check boxes for sandwich fillings
331
+ #
332
+ # @fillings = [
333
+ # OpenStruct.new(id: 'pastrami', name: 'Pastrami', description: 'Brined, smoked, steamed and seasoned'),
334
+ # OpenStruct.new(id: 'cheddar', name: 'Cheddar', description: 'A sharp, off-white natural cheese')
335
+ # ]
336
+ #
337
+ # = f.govuk_collection_check_boxes :desired_filling,
338
+ # @fillings,
339
+ # :id,
340
+ # :name,
341
+ # :description,
342
+ # legend: { text: 'What do you want in your sandwich?', size: 'm' },
343
+ # hint_text: "If it isn't listed here, tough luck",
344
+ # inline: false
345
+ def govuk_collection_check_boxes(attribute_name, collection, value_method, text_method, hint_method = nil, hint_text: nil, legend: {}, &block)
229
346
  hint_element = Elements::Hint.new(self, object_name, attribute_name, hint_text)
230
347
  error_element = Elements::ErrorMessage.new(self, object_name, attribute_name)
231
348
 
@@ -235,7 +352,7 @@ module GOVUKDesignSystemFormBuilder
235
352
  [
236
353
  hint_element.html,
237
354
  error_element.html,
238
- (yield if block_given?),
355
+ (block.call if block_given?),
239
356
  collection_check_boxes(attribute_name, collection, value_method, text_method) do |check_box|
240
357
  Elements::CheckBoxes::CollectionCheckBox.new(self, attribute_name, check_box, hint_method).html
241
358
  end
@@ -245,10 +362,52 @@ module GOVUKDesignSystemFormBuilder
245
362
  end
246
363
  end
247
364
 
365
+ # Generates a submit button, green by default
366
+ #
367
+ # @param text [String] the button text
368
+ # @param warning [Boolean] makes the button red ({https://design-system.service.gov.uk/components/button/#warning-buttons warning}) when true
369
+ # @param secondary [Boolean] makes the button grey ({https://design-system.service.gov.uk/components/button/#secondary-buttons secondary}) when true
370
+ # @todo The GOV.UK design system also supports {https://design-system.service.gov.uk/components/button/#disabled-buttons disabled buttons}, they
371
+ # should probably be supported too
372
+ # @param prevent_double_click [Boolean] adds JavaScript to safeguard the
373
+ # form from being submitted more than once
374
+ # @param block [Block] Any supplied HTML will be inserted immediately after
375
+ # the submit button. It is intended for other buttons directly related to
376
+ # the form's operation, such as 'Cancel' or 'Safe draft'
377
+ # @raise [ArgumentError] raised if both +warning+ and +secondary+ are true
378
+ # @return [ActiveSupport::SafeBuffer] HTML output
379
+ # @note Only the first additional button or link (passed in via a block) will be given the
380
+ # correct left margin, subsequent buttons will need to be manually accounted for
381
+ # @see https://design-system.service.gov.uk/components/button/#stop-users-from-accidentally-sending-information-more-than-once
382
+ # GOV.UK double click prevention
383
+ #
384
+ # @example A submit button with custom text, double click protection and an inline cancel link
385
+ # = f.govuk_submit "Proceed", prevent_double_click: true do
386
+ # = link_to 'Cancel', some_other_path, class: 'govuk-button__secondary'
387
+ #
248
388
  def govuk_submit(text = 'Continue', warning: false, secondary: false, prevent_double_click: true, &block)
249
389
  Elements::Submit.new(self, text, warning: warning, secondary: secondary, prevent_double_click: prevent_double_click, &block).html
250
390
  end
251
391
 
392
+ # Generates three number inputs for the +day+, +month+ and +year+ components of a date
393
+ #
394
+ # @note When using this input be aware that Rails's multiparam time and date handling falls foul
395
+ # of {https://bugs.ruby-lang.org/issues/5988 this} bug, so incorrect dates like +2019-09-31+ will
396
+ # be 'rounded' up to +2019-10-01+.
397
+ # @param attribute_name [Symbol] The name of the attribute
398
+ # @param hint_text [String] the contents of the hint
399
+ # @param legend [Hash] options for configuring the hash
400
+ # @option legend text [String] the fieldset legend's text content
401
+ # @option legend size [String] the size of the fieldset legend font, can be +xl+, +l+, +m+ or +s+
402
+ # @param block [Block] arbitrary HTML that will be rendered between the hint and the input group
403
+ # @param date_of_birth [Boolean] if +true+ {https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete#Values birth date auto completion attributes}
404
+ # will be added to the inputs
405
+ # @return [ActiveSupport::SafeBuffer] HTML output
406
+ #
407
+ # @example A regular date input with a legend and hint
408
+ # = f.govuk_date_field :starts_on,
409
+ # legend: { 'When does your event start?' },
410
+ # hint_text: 'Leave this field blank if you don't know exactly' }
252
411
  def govuk_date_field(attribute_name, hint_text: nil, legend: {}, date_of_birth: false, &block)
253
412
  Elements::Date.new(self, object_name, attribute_name, hint_text: hint_text, legend: legend, date_of_birth: date_of_birth, &block).html
254
413
  end
@@ -1,3 +1,3 @@
1
1
  module GOVUKDesignSystemFormBuilder
2
- VERSION = '0.7.1'.freeze
2
+ VERSION = '0.7.2'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: govuk_design_system_formbuilder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Yates
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-28 00:00:00.000000000 Z
11
+ date: 2019-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -105,6 +105,9 @@ dependencies:
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '3.7'
110
+ - - ">="
108
111
  - !ruby/object:Gem::Version
109
112
  version: 3.7.0
110
113
  type: :development
@@ -112,6 +115,9 @@ dependencies:
112
115
  version_requirements: !ruby/object:Gem::Requirement
113
116
  requirements:
114
117
  - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '3.7'
120
+ - - ">="
115
121
  - !ruby/object:Gem::Version
116
122
  version: 3.7.0
117
123
  description: A Rails form builder that generates form inputs adhering to the GOV.UK