govuk_design_system_formbuilder 2.0.0b3 → 2.0.0b4

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: bde738d424db57a56e70d3c397f166bc9b9cbacb833d4fa934ca3b8e4ad9422e
4
- data.tar.gz: dc3445c229c5e1c7ceb5a24a576aa35546e1cd643f40828896680f2474bf9c57
3
+ metadata.gz: d1a220934d67c1a26afea6d623bd2424156b6b4b71ef88411703da5ae761d778
4
+ data.tar.gz: 808f12be46a25c60e1b1f97d074778bb1a8e1245a78a37672b6282dc4cdeb1fd
5
5
  SHA512:
6
- metadata.gz: 2a3c4e32556ec7b57a3031ce19e53ab4a90ff1651b5de3c0cd047497efd488d8626689d65c18c9024f1886490841803c01ee8fdb3940e4d842d8190c28a565b4
7
- data.tar.gz: '0729f505bb2980b2dd6c3b96c238c8e46eeea3477c0520a564f042896a84a600d97d76dd382a21ff83c32a184544081a80100b2cc2c14b59812275bcdea91e02'
6
+ metadata.gz: 8fa051693840ca2463c6115bb0e4e4e53d68a0322697d49d186f83328635abee391466474da54cdc82fcbc77c28b055b10d7cb8374495965d00d8c4a8562134f
7
+ data.tar.gz: e8e93bdcbcd3d00b6d62477c52e0f2b4fa387de30825c479db38e1dfb4a1be89e316ff091c3eef1a0f0a917ad12581c26a565dc46cdfa55e1f5212053e459992
data/README.md CHANGED
@@ -7,10 +7,10 @@
7
7
  [![Test Coverage](https://api.codeclimate.com/v1/badges/fde73b5dc9476197281b/test_coverage)](https://codeclimate.com/github/DFE-Digital/govuk_design_system_formbuilder/test_coverage)
8
8
  [![Dependabot Status](https://api.dependabot.com/badges/status?host=github&repo=DFE-Digital/govuk_design_system_formbuilder)](https://dependabot.com)
9
9
  [![GitHub license](https://img.shields.io/github/license/DFE-Digital/govuk_design_system_formbuilder)](https://github.com/DFE-Digital/govuk_design_system_formbuilder/blob/master/LICENSE)
10
- [![GOV.UK Design System Version](https://img.shields.io/badge/GOV.UK%20Design%20System-3.8.1-brightgreen)](https://design-system.service.gov.uk)
10
+ [![GOV.UK Design System Version](https://img.shields.io/badge/GOV.UK%20Design%20System-3.9.0-brightgreen)](https://design-system.service.gov.uk)
11
11
 
12
12
  This gem provides a easy-to-use form builder that generates forms that are
13
- fully-compliant with version 3.8.1 of the [GOV.UK Design System](https://design-system.service.gov.uk/),
13
+ fully-compliant with version 3.9.0 of the [GOV.UK Design System](https://design-system.service.gov.uk/),
14
14
  minimising the amount of markup you need to write.
15
15
 
16
16
  In addition to the basic markup, the more-advanced functionality of the Design
@@ -26,6 +26,8 @@ module GOVUKDesignSystemFormBuilder
26
26
  # @param form_group [Hash] configures the form group
27
27
  # @option form_group classes [Array,String] sets the form group's classes
28
28
  # @option form_group kwargs [Hash] additional attributes added to the form group
29
+ # @param prefix_text [String] the text placed before the input. No prefix will be added if left +nil+
30
+ # @param suffix_text [String] the text placed after the input. No suffix will be added if left +nil+
29
31
  # @param block [Block] arbitrary HTML that will be rendered between the hint and the input
30
32
  # @return [ActiveSupport::SafeBuffer] HTML output
31
33
  # @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
@@ -49,8 +51,8 @@ module GOVUKDesignSystemFormBuilder
49
51
  # = f.govuk_text_field :callsign,
50
52
  # label: -> { tag.h3('Call-sign') }
51
53
  #
52
- def govuk_text_field(attribute_name, hint: {}, label: {}, caption: {}, width: nil, form_group: {}, **kwargs, &block)
53
- Elements::Inputs::Text.new(self, object_name, attribute_name, hint: hint, label: label, caption: caption, width: width, form_group: form_group, **kwargs, &block).html
54
+ def govuk_text_field(attribute_name, hint: {}, label: {}, caption: {}, width: nil, form_group: {}, prefix_text: nil, suffix_text: nil, **kwargs, &block)
55
+ Elements::Inputs::Text.new(self, object_name, attribute_name, hint: hint, label: label, caption: caption, width: width, form_group: form_group, prefix_text: prefix_text, suffix_text: suffix_text, **kwargs, &block).html
54
56
  end
55
57
 
56
58
  # Generates a input of type +tel+
@@ -76,6 +78,8 @@ module GOVUKDesignSystemFormBuilder
76
78
  # @param form_group [Hash] configures the form group
77
79
  # @option form_group classes [Array,String] sets the form group's classes
78
80
  # @option form_group kwargs [Hash] additional attributes added to the form group
81
+ # @param prefix_text [String] the text placed before the input. No prefix will be added if left +nil+
82
+ # @param suffix_text [String] the text placed after the input. No suffix will be added if left +nil+
79
83
  # @param block [Block] arbitrary HTML that will be rendered between the hint and the input
80
84
  # @return [ActiveSupport::SafeBuffer] HTML output
81
85
  # @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
@@ -100,8 +104,8 @@ module GOVUKDesignSystemFormBuilder
100
104
  # = f.govuk_phone_field :work_number,
101
105
  # label: -> { tag.h3('Work number') }
102
106
  #
103
- def govuk_phone_field(attribute_name, hint: {}, label: {}, caption: {}, width: nil, form_group: {}, **kwargs, &block)
104
- Elements::Inputs::Phone.new(self, object_name, attribute_name, hint: hint, label: label, caption: caption, width: width, form_group: form_group, **kwargs, &block).html
107
+ def govuk_phone_field(attribute_name, hint: {}, label: {}, caption: {}, width: nil, form_group: {}, prefix_text: nil, suffix_text: nil, **kwargs, &block)
108
+ Elements::Inputs::Phone.new(self, object_name, attribute_name, hint: hint, label: label, caption: caption, width: width, form_group: form_group, prefix_text: prefix_text, suffix_text: suffix_text, **kwargs, &block).html
105
109
  end
106
110
 
107
111
  # Generates a input of type +email+
@@ -127,6 +131,8 @@ module GOVUKDesignSystemFormBuilder
127
131
  # @param form_group [Hash] configures the form group
128
132
  # @option form_group classes [Array,String] sets the form group's classes
129
133
  # @option form_group kwargs [Hash] additional attributes added to the form group
134
+ # @param prefix_text [String] the text placed before the input. No prefix will be added if left +nil+
135
+ # @param suffix_text [String] the text placed after the input. No suffix will be added if left +nil+
130
136
  # @param block [Block] arbitrary HTML that will be rendered between the hint and the input
131
137
  # @return [ActiveSupport::SafeBuffer] HTML output
132
138
  # @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
@@ -149,8 +155,8 @@ module GOVUKDesignSystemFormBuilder
149
155
  # = f.govuk_email_field :personal_email,
150
156
  # label: -> { tag.h3('Personal email address') }
151
157
  #
152
- def govuk_email_field(attribute_name, hint: {}, label: {}, caption: {}, width: nil, form_group: {}, **kwargs, &block)
153
- Elements::Inputs::Email.new(self, object_name, attribute_name, hint: hint, label: label, caption: caption, width: width, form_group: form_group, **kwargs, &block).html
158
+ def govuk_email_field(attribute_name, hint: {}, label: {}, caption: {}, width: nil, form_group: {}, prefix_text: nil, suffix_text: nil, **kwargs, &block)
159
+ Elements::Inputs::Email.new(self, object_name, attribute_name, hint: hint, label: label, caption: caption, width: width, form_group: form_group, prefix_text: prefix_text, suffix_text: suffix_text, **kwargs, &block).html
154
160
  end
155
161
 
156
162
  # Generates a input of type +password+
@@ -176,6 +182,8 @@ module GOVUKDesignSystemFormBuilder
176
182
  # @param form_group [Hash] configures the form group
177
183
  # @option form_group classes [Array,String] sets the form group's classes
178
184
  # @option form_group kwargs [Hash] additional attributes added to the form group
185
+ # @param prefix_text [String] the text placed before the input. No prefix will be added if left +nil+
186
+ # @param suffix_text [String] the text placed after the input. No suffix will be added if left +nil+
179
187
  # @param block [Block] arbitrary HTML that will be rendered between the hint and the input
180
188
  # @return [ActiveSupport::SafeBuffer] HTML output
181
189
  # @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
@@ -197,8 +205,8 @@ module GOVUKDesignSystemFormBuilder
197
205
  # = f.govuk_password_field :passcode,
198
206
  # label: -> { tag.h3('What is your secret pass code?') }
199
207
  #
200
- def govuk_password_field(attribute_name, hint: {}, label: {}, width: nil, form_group: {}, caption: {}, **kwargs, &block)
201
- Elements::Inputs::Password.new(self, object_name, attribute_name, hint: hint, label: label, caption: caption, width: width, form_group: form_group, **kwargs, &block).html
208
+ def govuk_password_field(attribute_name, hint: {}, label: {}, width: nil, form_group: {}, caption: {}, prefix_text: nil, suffix_text: nil, **kwargs, &block)
209
+ Elements::Inputs::Password.new(self, object_name, attribute_name, hint: hint, label: label, caption: caption, width: width, form_group: form_group, prefix_text: prefix_text, suffix_text: suffix_text, **kwargs, &block).html
202
210
  end
203
211
 
204
212
  # Generates a input of type +url+
@@ -224,6 +232,8 @@ module GOVUKDesignSystemFormBuilder
224
232
  # @param form_group [Hash] configures the form group
225
233
  # @option form_group classes [Array,String] sets the form group's classes
226
234
  # @option form_group kwargs [Hash] additional attributes added to the form group
235
+ # @param prefix_text [String] the text placed before the input. No prefix will be added if left +nil+
236
+ # @param suffix_text [String] the text placed after the input. No suffix will be added if left +nil+
227
237
  # @param block [Block] arbitrary HTML that will be rendered between the hint and the input
228
238
  # @return [ActiveSupport::SafeBuffer] HTML output
229
239
  # @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
@@ -246,8 +256,8 @@ module GOVUKDesignSystemFormBuilder
246
256
  # = f.govuk_url_field :work_website,
247
257
  # label: -> { tag.h3("Enter your company's website") }
248
258
  #
249
- def govuk_url_field(attribute_name, hint: {}, label: {}, caption: {}, width: nil, form_group: {}, **kwargs, &block)
250
- Elements::Inputs::URL.new(self, object_name, attribute_name, hint: hint, label: label, caption: caption, width: width, form_group: form_group, **kwargs, &block).html
259
+ def govuk_url_field(attribute_name, hint: {}, label: {}, caption: {}, width: nil, form_group: {}, prefix_text: nil, suffix_text: nil, **kwargs, &block)
260
+ Elements::Inputs::URL.new(self, object_name, attribute_name, hint: hint, label: label, caption: caption, width: width, form_group: form_group, prefix_text: prefix_text, suffix_text: suffix_text, **kwargs, &block).html
251
261
  end
252
262
 
253
263
  # Generates a input of type +number+
@@ -273,6 +283,8 @@ module GOVUKDesignSystemFormBuilder
273
283
  # @param form_group [Hash] configures the form group
274
284
  # @option form_group classes [Array,String] sets the form group's classes
275
285
  # @option form_group kwargs [Hash] additional attributes added to the form group
286
+ # @param prefix_text [String] the text placed before the input. No prefix will be added if left +nil+
287
+ # @param suffix_text [String] the text placed after the input. No suffix will be added if left +nil+
276
288
  # @param block [Block] arbitrary HTML that will be rendered between the hint and the input
277
289
  # @return [ActiveSupport::SafeBuffer] HTML output
278
290
  # @see https://design-system.service.gov.uk/components/text-input/ GOV.UK Text input
@@ -298,8 +310,8 @@ module GOVUKDesignSystemFormBuilder
298
310
  # = f.govuk_url_field :personal_best_over_100m,
299
311
  # label: -> { tag.h3("How many seconds does it take you to run 100m?") }
300
312
  #
301
- def govuk_number_field(attribute_name, hint: {}, label: {}, caption: {}, width: nil, form_group: {}, **kwargs, &block)
302
- Elements::Inputs::Number.new(self, object_name, attribute_name, hint: hint, label: label, caption: caption, width: width, form_group: form_group, **kwargs, &block).html
313
+ def govuk_number_field(attribute_name, hint: {}, label: {}, caption: {}, width: nil, form_group: {}, prefix_text: nil, suffix_text: nil, **kwargs, &block)
314
+ Elements::Inputs::Number.new(self, object_name, attribute_name, hint: hint, label: label, caption: caption, width: width, form_group: form_group, prefix_text: prefix_text, suffix_text: suffix_text, **kwargs, &block).html
303
315
  end
304
316
 
305
317
  # Generates a +textarea+ element with a label, optional hint. Also offers
@@ -710,6 +722,8 @@ module GOVUKDesignSystemFormBuilder
710
722
  # @option caption kwargs [Hash] additional arguments are applied as attributes on the caption +span+ element
711
723
  # @param classes [Array,String] Classes to add to the checkbox container.
712
724
  # @param form_group [Hash] configures the form group
725
+ # @param multiple [Boolean] when true adds a +[]+ suffix the +name+ of the automatically-generated hidden field
726
+ # (ie. <code>project[invoice_attributes][]</code>). When false, no +[]+ suffix is added (ie. <code>project[accepted]</code>)
713
727
  # @option form_group classes [Array,String] sets the form group's classes
714
728
  # @option form_group kwargs [Hash] additional attributes added to the form group
715
729
  # @param block [Block] a block of HTML that will be used to populate the fieldset
@@ -725,7 +739,7 @@ module GOVUKDesignSystemFormBuilder
725
739
  # = f.govuk_check_box :desired_filling, :lemonade, label: { text: 'Lemonade' }, link_errors: true
726
740
  # = f.govuk_check_box :desired_filling, :fizzy_orange, label: { text: 'Fizzy orange' }
727
741
  #
728
- def govuk_check_boxes_fieldset(attribute_name, legend: {}, caption: {}, hint: {}, small: false, classes: nil, form_group: {}, &block)
742
+ def govuk_check_boxes_fieldset(attribute_name, legend: {}, caption: {}, hint: {}, small: false, classes: nil, form_group: {}, multiple: true, &block)
729
743
  Containers::CheckBoxesFieldset.new(
730
744
  self,
731
745
  object_name,
@@ -736,6 +750,7 @@ module GOVUKDesignSystemFormBuilder
736
750
  small: small,
737
751
  classes: classes,
738
752
  form_group: form_group,
753
+ multiple: multiple,
739
754
  &block
740
755
  ).html
741
756
  end
@@ -744,6 +759,7 @@ module GOVUKDesignSystemFormBuilder
744
759
  #
745
760
  # @param attribute_name [Symbol] The name of the attribute
746
761
  # @param value [Boolean,String,Symbol,Integer] The value of the checkbox when it is checked
762
+ # @param unchecked_value [Boolean,String,Symbol,Integer] The value of the checkbox when it is unchecked
747
763
  # @param hint [Hash,Proc] The content of the hint. No hint will be added if 'text' is left +nil+. When a +Proc+ is
748
764
  # supplied the hint will be wrapped in a +div+ instead of a +span+
749
765
  # @option hint text [String] the hint text
@@ -766,12 +782,13 @@ module GOVUKDesignSystemFormBuilder
766
782
  # label: { text: 'Do you agree with our terms and conditions?' },
767
783
  # hint: { text: 'You will not be able to proceed unless you do' }
768
784
  #
769
- def govuk_check_box(attribute_name, value, hint: {}, label: {}, link_errors: false, multiple: true, &block)
785
+ def govuk_check_box(attribute_name, value, unchecked_value = false, hint: {}, label: {}, link_errors: false, multiple: true, &block)
770
786
  Elements::CheckBoxes::FieldsetCheckBox.new(
771
787
  self,
772
788
  object_name,
773
789
  attribute_name,
774
790
  value,
791
+ unchecked_value,
775
792
  hint: hint,
776
793
  label: label,
777
794
  link_errors: link_errors,
@@ -4,7 +4,7 @@ module GOVUKDesignSystemFormBuilder
4
4
  include Traits::Error
5
5
  include Traits::Hint
6
6
 
7
- def initialize(builder, object_name, attribute_name, hint:, legend:, caption:, small:, classes:, form_group:, &block)
7
+ def initialize(builder, object_name, attribute_name, hint:, legend:, caption:, small:, classes:, form_group:, multiple:, &block)
8
8
  super(builder, object_name, attribute_name, &block)
9
9
 
10
10
  @legend = legend
@@ -13,19 +13,30 @@ module GOVUKDesignSystemFormBuilder
13
13
  @small = small
14
14
  @classes = classes
15
15
  @form_group = form_group
16
+ @multiple = multiple
16
17
  @block_content = capture { block.call }
17
18
  end
18
19
 
19
20
  def html
20
21
  Containers::FormGroup.new(@builder, @object_name, @attribute_name, **@form_group).html do
21
22
  Containers::Fieldset.new(@builder, @object_name, @attribute_name, **fieldset_options).html do
22
- safe_join([hint_element, error_element, checkboxes])
23
+ safe_join([hint_element, error_element, hidden_field, checkboxes])
23
24
  end
24
25
  end
25
26
  end
26
27
 
27
28
  private
28
29
 
30
+ def hidden_field
31
+ return unless @multiple
32
+
33
+ @builder.hidden_field(@attribute_name, value: "", name: hidden_field_name)
34
+ end
35
+
36
+ def hidden_field_name
37
+ format("%<object_name>s[%<attribute_name>s][]", object_name: @object_name, attribute_name: @attribute_name)
38
+ end
39
+
29
40
  def fieldset_options
30
41
  {
31
42
  legend: @legend,
@@ -8,14 +8,15 @@ module GOVUKDesignSystemFormBuilder
8
8
  include Traits::Hint
9
9
  include Traits::Conditional
10
10
 
11
- def initialize(builder, object_name, attribute_name, value, label:, hint:, link_errors:, multiple:, &block)
11
+ def initialize(builder, object_name, attribute_name, value, unchecked_value, label:, hint:, link_errors:, multiple:, &block)
12
12
  super(builder, object_name, attribute_name)
13
13
 
14
- @value = value
15
- @label = label
16
- @hint = hint
17
- @multiple = multiple
18
- @link_errors = link_errors
14
+ @value = value
15
+ @unchecked_value = unchecked_value
16
+ @label = label
17
+ @hint = hint
18
+ @multiple = multiple
19
+ @link_errors = link_errors
19
20
 
20
21
  if block_given?
21
22
  @conditional_content = wrap_conditional(block)
@@ -36,7 +37,7 @@ module GOVUKDesignSystemFormBuilder
36
37
  end
37
38
 
38
39
  def check_box
39
- @builder.check_box(@attribute_name, options, @value, false)
40
+ @builder.check_box(@attribute_name, options, @value, @unchecked_value)
40
41
  end
41
42
 
42
43
  def options
@@ -1,38 +1,58 @@
1
1
  module GOVUKDesignSystemFormBuilder
2
2
  module Traits
3
3
  module Input
4
- def initialize(builder, object_name, attribute_name, hint:, label:, caption:, width:, form_group:, **kwargs, &block)
4
+ def initialize(builder, object_name, attribute_name, hint:, label:, caption:, prefix_text:, suffix_text:, width:, form_group:, **kwargs, &block)
5
5
  super(builder, object_name, attribute_name, &block)
6
6
 
7
7
  @width = width
8
8
  @label = label
9
9
  @caption = caption
10
10
  @hint = hint
11
+ @prefix_text = prefix_text
12
+ @suffix_text = suffix_text
11
13
  @html_attributes = kwargs
12
14
  @form_group = form_group
13
15
  end
14
16
 
15
17
  def html
16
18
  Containers::FormGroup.new(@builder, @object_name, @attribute_name, **@form_group).html do
17
- safe_join([label_element, supplemental_content, hint_element, error_element, input])
19
+ safe_join([label_element, supplemental_content, hint_element, error_element, content])
18
20
  end
19
21
  end
20
22
 
21
23
  private
22
24
 
25
+ def content
26
+ if affixed?
27
+ affixed_input
28
+ else
29
+ input
30
+ end
31
+ end
32
+
33
+ def affixed_input
34
+ content_tag('div', class: %(#{brand}-input__wrapper)) do
35
+ safe_join([prefix, input, suffix])
36
+ end
37
+ end
38
+
23
39
  def input
24
- @builder.send(builder_method, @attribute_name, **input_options, **@html_attributes)
40
+ @builder.send(builder_method, @attribute_name, **options, **@html_attributes)
41
+ end
42
+
43
+ def affixed?
44
+ [@prefix_text, @suffix_text].any?
25
45
  end
26
46
 
27
- def input_options
47
+ def options
28
48
  {
29
49
  id: field_id(link_errors: true),
30
- class: input_classes,
50
+ class: classes,
31
51
  aria: { describedby: described_by(hint_id, error_id, supplemental_id) }
32
52
  }
33
53
  end
34
54
 
35
- def input_classes
55
+ def classes
36
56
  [%(#{brand}-input)].push(width_classes, error_classes).compact
37
57
  end
38
58
 
@@ -64,6 +84,22 @@ module GOVUKDesignSystemFormBuilder
64
84
  else fail(ArgumentError, "invalid width '#{@width}'")
65
85
  end
66
86
  end
87
+
88
+ def prefix
89
+ return nil if @prefix_text.blank?
90
+
91
+ tag.span(@prefix_text, class: %(#{brand}-input__prefix), **affix_options)
92
+ end
93
+
94
+ def suffix
95
+ return nil if @suffix_text.blank?
96
+
97
+ tag.span(@suffix_text, class: %(#{brand}-input__suffix), **affix_options)
98
+ end
99
+
100
+ def affix_options
101
+ { aria: { hidden: true } }
102
+ end
67
103
  end
68
104
  end
69
105
  end
@@ -1,3 +1,3 @@
1
1
  module GOVUKDesignSystemFormBuilder
2
- VERSION = '2.0.0b3'.freeze
2
+ VERSION = '2.0.0b4'.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: 2.0.0b3
4
+ version: 2.0.0b4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Yates
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-03 00:00:00.000000000 Z
11
+ date: 2020-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionview
@@ -134,14 +134,14 @@ dependencies:
134
134
  requirements:
135
135
  - - "~>"
136
136
  - !ruby/object:Gem::Version
137
- version: 0.18.5
137
+ version: 0.17.1
138
138
  type: :development
139
139
  prerelease: false
140
140
  version_requirements: !ruby/object:Gem::Requirement
141
141
  requirements:
142
142
  - - "~>"
143
143
  - !ruby/object:Gem::Version
144
- version: 0.18.5
144
+ version: 0.17.1
145
145
  - !ruby/object:Gem::Dependency
146
146
  name: htmlbeautifier
147
147
  requirement: !ruby/object:Gem::Requirement
@@ -176,14 +176,14 @@ dependencies:
176
176
  requirements:
177
177
  - - "~>"
178
178
  - !ruby/object:Gem::Version
179
- version: 3.21.0
179
+ version: 3.22.0
180
180
  type: :development
181
181
  prerelease: false
182
182
  version_requirements: !ruby/object:Gem::Requirement
183
183
  requirements:
184
184
  - - "~>"
185
185
  - !ruby/object:Gem::Version
186
- version: 3.21.0
186
+ version: 3.22.0
187
187
  - !ruby/object:Gem::Dependency
188
188
  name: rubypants
189
189
  requirement: !ruby/object:Gem::Requirement