govuk_design_system_formbuilder 0.7.1 → 0.7.2

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: 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