govuk_design_system_formbuilder 1.2.0b1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/lib/govuk_design_system_formbuilder.rb +2 -1
  4. data/lib/govuk_design_system_formbuilder/base.rb +5 -0
  5. data/lib/govuk_design_system_formbuilder/builder.rb +205 -77
  6. data/lib/govuk_design_system_formbuilder/containers/check_boxes_fieldset.rb +12 -11
  7. data/lib/govuk_design_system_formbuilder/containers/fieldset.rb +32 -16
  8. data/lib/govuk_design_system_formbuilder/containers/radio_buttons_fieldset.rb +12 -11
  9. data/lib/govuk_design_system_formbuilder/elements/caption.rb +34 -0
  10. data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection.rb +11 -13
  11. data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection_check_box.rb +17 -15
  12. data/lib/govuk_design_system_formbuilder/elements/check_boxes/fieldset_check_box.rb +20 -27
  13. data/lib/govuk_design_system_formbuilder/elements/date.rb +23 -25
  14. data/lib/govuk_design_system_formbuilder/elements/error_message.rb +8 -7
  15. data/lib/govuk_design_system_formbuilder/elements/error_summary.rb +23 -26
  16. data/lib/govuk_design_system_formbuilder/elements/file.rb +18 -19
  17. data/lib/govuk_design_system_formbuilder/elements/hint.rb +1 -4
  18. data/lib/govuk_design_system_formbuilder/elements/label.rb +30 -19
  19. data/lib/govuk_design_system_formbuilder/elements/radios/collection.rb +26 -24
  20. data/lib/govuk_design_system_formbuilder/elements/radios/collection_radio_button.rb +13 -13
  21. data/lib/govuk_design_system_formbuilder/elements/radios/fieldset_radio_button.rb +15 -19
  22. data/lib/govuk_design_system_formbuilder/elements/select.rb +8 -18
  23. data/lib/govuk_design_system_formbuilder/elements/submit.rb +27 -23
  24. data/lib/govuk_design_system_formbuilder/elements/text_area.rb +17 -23
  25. data/lib/govuk_design_system_formbuilder/traits/caption.rb +23 -0
  26. data/lib/govuk_design_system_formbuilder/traits/input.rb +19 -27
  27. data/lib/govuk_design_system_formbuilder/traits/label.rb +12 -1
  28. data/lib/govuk_design_system_formbuilder/traits/localisation.rb +2 -0
  29. data/lib/govuk_design_system_formbuilder/version.rb +1 -1
  30. metadata +21 -47
@@ -3,7 +3,7 @@ module GOVUKDesignSystemFormBuilder
3
3
  class Submit < Base
4
4
  using PrefixableArray
5
5
 
6
- def initialize(builder, text, warning:, secondary:, classes:, prevent_double_click:, validate:, &block)
6
+ def initialize(builder, text, warning:, secondary:, classes:, prevent_double_click:, validate:, disabled:, &block)
7
7
  fail ArgumentError, 'buttons can be warning or secondary' if warning && secondary
8
8
 
9
9
  @builder = builder
@@ -13,29 +13,38 @@ module GOVUKDesignSystemFormBuilder
13
13
  @secondary = secondary
14
14
  @classes = classes
15
15
  @validate = validate
16
+ @disabled = disabled
16
17
  @block_content = capture { block.call } if block_given?
17
18
  end
18
19
 
19
20
  def html
20
- safe_join(
21
- [
22
- @builder.submit(
23
- @text,
24
- class: %w(button).prefix(brand).push(
25
- warning_class,
26
- secondary_class,
27
- @classes,
28
- padding_class(@block_content.present?)
29
- ).compact,
30
- **extra_args
31
- ),
32
- @block_content
33
- ]
34
- )
21
+ safe_join([submit, @block_content])
35
22
  end
36
23
 
37
24
  private
38
25
 
26
+ def submit
27
+ @builder.submit(@text, class: submit_classes, **submit_options)
28
+ end
29
+
30
+ def submit_classes
31
+ %w(button)
32
+ .prefix(brand)
33
+ .push(warning_class, secondary_class, disabled_class, @classes, padding_class(@block_content.present?))
34
+ .compact
35
+ end
36
+
37
+ def submit_options
38
+ {
39
+ formnovalidate: !@validate,
40
+ disabled: @disabled,
41
+ data: {
42
+ module: %(#{brand}-button),
43
+ 'prevent-double-click': @prevent_double_click
44
+ }.select { |_k, v| v.present? }
45
+ }
46
+ end
47
+
39
48
  def warning_class
40
49
  %(#{brand}-button--warning) if @warning
41
50
  end
@@ -48,13 +57,8 @@ module GOVUKDesignSystemFormBuilder
48
57
  %(#{brand}-!-margin-right-1) if content_present
49
58
  end
50
59
 
51
- def extra_args
52
- {
53
- formnovalidate: !@validate,
54
- data: {
55
- module: %(#{brand}-button), 'prevent-double-click' => @prevent_double_click
56
- }.select { |_k, v| v.present? }
57
- }
60
+ def disabled_class
61
+ %(#{brand}-button--disabled) if @disabled
58
62
  end
59
63
  end
60
64
  end
@@ -8,12 +8,13 @@ module GOVUKDesignSystemFormBuilder
8
8
  include Traits::Label
9
9
  include Traits::Supplemental
10
10
 
11
- def initialize(builder, object_name, attribute_name, hint_text:, label:, rows:, max_words:, max_chars:, threshold:, **extra_args, &block)
11
+ def initialize(builder, object_name, attribute_name, hint_text:, label:, caption:, rows:, max_words:, max_chars:, threshold:, **kwargs, &block)
12
12
  super(builder, object_name, attribute_name, &block)
13
13
 
14
14
  @label = label
15
+ @caption = caption
15
16
  @hint_text = hint_text
16
- @extra_args = extra_args
17
+ @attributes = kwargs
17
18
  @max_words = max_words
18
19
  @max_chars = max_chars
19
20
  @threshold = threshold
@@ -23,39 +24,32 @@ module GOVUKDesignSystemFormBuilder
23
24
  def html
24
25
  Containers::CharacterCount.new(@builder, max_words: @max_words, max_chars: @max_chars, threshold: @threshold).html do
25
26
  Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
26
- safe_join(
27
- [
28
- [
29
- label_element,
30
- supplemental_content,
31
- hint_element,
32
- error_element
33
- ].map(&:html),
34
- @builder.text_area(
35
- @attribute_name,
36
- id: field_id(link_errors: true),
37
- class: govuk_textarea_classes,
38
- aria: {
39
- describedby: described_by(hint_id, error_id, supplemental_id, limit_description_id)
40
- },
41
- **@extra_args.merge(rows: @rows)
42
- ),
43
- limit_description
44
- ].flatten.compact
45
- )
27
+ safe_join([label_element, supplemental_content, hint_element, error_element, text_area, limit_description])
46
28
  end
47
29
  end
48
30
  end
49
31
 
50
32
  private
51
33
 
52
- def govuk_textarea_classes
34
+ def text_area
35
+ @builder.text_area(@attribute_name, **text_area_options, **@attributes.merge(rows: @rows))
36
+ end
37
+
38
+ def text_area_classes
53
39
  %w(textarea).prefix(brand).tap do |classes|
54
40
  classes.push(%(#{brand}-textarea--error)) if has_errors?
55
41
  classes.push(%(#{brand}-js-character-count)) if limit?
56
42
  end
57
43
  end
58
44
 
45
+ def text_area_options
46
+ {
47
+ id: field_id(link_errors: true),
48
+ class: text_area_classes,
49
+ aria: { describedby: described_by(hint_id, error_id, supplemental_id, limit_description_id) },
50
+ }
51
+ end
52
+
59
53
  # Provides an id for use by the textual description of character and word limits.
60
54
  #
61
55
  # @note In order for the GOV.UK Frontend JavaScript to pick up this associated field
@@ -0,0 +1,23 @@
1
+ module GOVUKDesignSystemFormBuilder
2
+ module Traits
3
+ module Caption
4
+ private
5
+
6
+ def caption_element
7
+ @caption_element ||= Elements::Caption.new(@builder, @object_name, @attribute_name, **caption_options)
8
+ end
9
+
10
+ def caption_options
11
+ { text: nil }.merge({ text: caption_text, size: caption_size }.compact)
12
+ end
13
+
14
+ def caption_text
15
+ @caption&.dig(:text)
16
+ end
17
+
18
+ def caption_size
19
+ @caption&.dig(:size)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,44 +1,36 @@
1
1
  module GOVUKDesignSystemFormBuilder
2
2
  module Traits
3
3
  module Input
4
- def initialize(builder, object_name, attribute_name, hint_text:, label:, width:, **extra_args, &block)
4
+ def initialize(builder, object_name, attribute_name, hint_text:, label:, caption:, width:, **kwargs, &block)
5
5
  super(builder, object_name, attribute_name, &block)
6
6
 
7
- @width = width
8
- @extra_args = extra_args
9
- @label = label
10
- @hint_text = hint_text
7
+ @width = width
8
+ @attributes = kwargs
9
+ @label = label
10
+ @caption = caption
11
+ @hint_text = hint_text
11
12
  end
12
13
 
13
14
  def html
14
15
  Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
15
- safe_join(
16
- [
17
- label_element.html,
18
- supplemental_content.html,
19
- hint_element.html,
20
- error_element.html,
21
- @builder.send(
22
- builder_method,
23
- @attribute_name,
24
- id: field_id(link_errors: true),
25
- class: input_classes,
26
- aria: {
27
- describedby: described_by(
28
- hint_id,
29
- error_id,
30
- supplemental_id
31
- )
32
- },
33
- **@extra_args
34
- )
35
- ]
36
- )
16
+ safe_join([label_element, supplemental_content, hint_element, error_element, input])
37
17
  end
38
18
  end
39
19
 
40
20
  private
41
21
 
22
+ def input
23
+ @builder.send(builder_method, @attribute_name, **input_options.merge(@attributes))
24
+ end
25
+
26
+ def input_options
27
+ {
28
+ id: field_id(link_errors: true),
29
+ class: input_classes,
30
+ aria: { describedby: described_by(hint_id, error_id, supplemental_id) }
31
+ }
32
+ end
33
+
42
34
  def input_classes
43
35
  [%(#{brand}-input)].push(width_classes, error_classes).compact
44
36
  end
@@ -4,7 +4,18 @@ module GOVUKDesignSystemFormBuilder
4
4
  private
5
5
 
6
6
  def label_element
7
- @label_element ||= Elements::Label.new(@builder, @object_name, @attribute_name, **@label)
7
+ @label_element ||= Elements::Label.new(@builder, @object_name, @attribute_name, caption: @caption, **label_options)
8
+ end
9
+
10
+ def label_options
11
+ case @label
12
+ when Hash
13
+ @label
14
+ when Proc
15
+ { content: @label }
16
+ else
17
+ fail(ArgumentError, %(label must be a Proc or Hash))
18
+ end
8
19
  end
9
20
  end
10
21
  end
@@ -40,6 +40,8 @@ module GOVUKDesignSystemFormBuilder
40
40
  config.localisation_schema_hint
41
41
  when :label
42
42
  config.localisation_schema_label
43
+ when :caption
44
+ config.localisation_schema_caption
43
45
  end
44
46
 
45
47
  (contextual_schema || config.localisation_schema_fallback).dup
@@ -1,3 +1,3 @@
1
1
  module GOVUKDesignSystemFormBuilder
2
- VERSION = '1.2.0b1'.freeze
2
+ VERSION = '1.2.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: 1.2.0b1
4
+ version: 1.2.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: 2020-05-15 00:00:00.000000000 Z
11
+ date: 2020-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionview
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: 3.9.0
61
+ version: 3.14.0
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: 3.9.0
68
+ version: 3.14.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: pry
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -84,22 +84,22 @@ dependencies:
84
84
  name: pry-byebug
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: 3.9.0
90
87
  - - "~>"
91
88
  - !ruby/object:Gem::Version
92
89
  version: '3.9'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 3.9.0
93
93
  type: :development
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
96
96
  requirements:
97
- - - ">="
98
- - !ruby/object:Gem::Version
99
- version: 3.9.0
100
97
  - - "~>"
101
98
  - !ruby/object:Gem::Version
102
99
  version: '3.9'
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 3.9.0
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: rspec-html-matchers
105
105
  requirement: !ruby/object:Gem::Requirement
@@ -134,42 +134,14 @@ dependencies:
134
134
  requirements:
135
135
  - - "~>"
136
136
  - !ruby/object:Gem::Version
137
- version: 0.17.1
138
- type: :development
139
- prerelease: false
140
- version_requirements: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - "~>"
143
- - !ruby/object:Gem::Version
144
- version: 0.17.1
145
- - !ruby/object:Gem::Dependency
146
- name: adsf
147
- requirement: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - "~>"
150
- - !ruby/object:Gem::Version
151
- version: 1.4.2
137
+ version: 0.18.5
152
138
  type: :development
153
139
  prerelease: false
154
140
  version_requirements: !ruby/object:Gem::Requirement
155
141
  requirements:
156
142
  - - "~>"
157
143
  - !ruby/object:Gem::Version
158
- version: 1.4.2
159
- - !ruby/object:Gem::Dependency
160
- name: adsf-live
161
- requirement: !ruby/object:Gem::Requirement
162
- requirements:
163
- - - "~>"
164
- - !ruby/object:Gem::Version
165
- version: 1.4.2
166
- type: :development
167
- prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- requirements:
170
- - - "~>"
171
- - !ruby/object:Gem::Version
172
- version: 1.4.2
144
+ version: 0.18.5
173
145
  - !ruby/object:Gem::Dependency
174
146
  name: htmlbeautifier
175
147
  requirement: !ruby/object:Gem::Requirement
@@ -204,14 +176,14 @@ dependencies:
204
176
  requirements:
205
177
  - - "~>"
206
178
  - !ruby/object:Gem::Version
207
- version: 3.18.0
179
+ version: 3.19.0
208
180
  type: :development
209
181
  prerelease: false
210
182
  version_requirements: !ruby/object:Gem::Requirement
211
183
  requirements:
212
184
  - - "~>"
213
185
  - !ruby/object:Gem::Version
214
- version: 3.18.0
186
+ version: 3.19.0
215
187
  - !ruby/object:Gem::Dependency
216
188
  name: rubypants
217
189
  requirement: !ruby/object:Gem::Requirement
@@ -260,14 +232,14 @@ dependencies:
260
232
  requirements:
261
233
  - - "~>"
262
234
  - !ruby/object:Gem::Version
263
- version: 4.0.1
235
+ version: 4.1.0
264
236
  type: :development
265
237
  prerelease: false
266
238
  version_requirements: !ruby/object:Gem::Requirement
267
239
  requirements:
268
240
  - - "~>"
269
241
  - !ruby/object:Gem::Version
270
- version: 4.0.1
242
+ version: 4.1.0
271
243
  description: A Rails form builder that generates form inputs adhering to the GOV.UK
272
244
  Design System
273
245
  email:
@@ -288,6 +260,7 @@ files:
288
260
  - lib/govuk_design_system_formbuilder/containers/radio_buttons_fieldset.rb
289
261
  - lib/govuk_design_system_formbuilder/containers/radios.rb
290
262
  - lib/govuk_design_system_formbuilder/containers/supplemental.rb
263
+ - lib/govuk_design_system_formbuilder/elements/caption.rb
291
264
  - lib/govuk_design_system_formbuilder/elements/check_boxes/collection.rb
292
265
  - lib/govuk_design_system_formbuilder/elements/check_boxes/collection_check_box.rb
293
266
  - lib/govuk_design_system_formbuilder/elements/check_boxes/fieldset_check_box.rb
@@ -310,6 +283,7 @@ files:
310
283
  - lib/govuk_design_system_formbuilder/elements/select.rb
311
284
  - lib/govuk_design_system_formbuilder/elements/submit.rb
312
285
  - lib/govuk_design_system_formbuilder/elements/text_area.rb
286
+ - lib/govuk_design_system_formbuilder/traits/caption.rb
313
287
  - lib/govuk_design_system_formbuilder/traits/collection_item.rb
314
288
  - lib/govuk_design_system_formbuilder/traits/conditional.rb
315
289
  - lib/govuk_design_system_formbuilder/traits/error.rb
@@ -339,11 +313,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
339
313
  version: '0'
340
314
  required_rubygems_version: !ruby/object:Gem::Requirement
341
315
  requirements:
342
- - - ">"
316
+ - - ">="
343
317
  - !ruby/object:Gem::Version
344
- version: 1.3.1
318
+ version: '0'
345
319
  requirements: []
346
- rubygems_version: 3.0.3
320
+ rubygems_version: 3.1.2
347
321
  signing_key:
348
322
  specification_version: 4
349
323
  summary: GOV.UK-compliant Rails form builder