govuk_design_system_formbuilder 1.2.1 → 1.2.6

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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/lib/govuk_design_system_formbuilder.rb +4 -0
  4. data/lib/govuk_design_system_formbuilder/builder.rb +49 -29
  5. data/lib/govuk_design_system_formbuilder/containers/character_count.rb +8 -7
  6. data/lib/govuk_design_system_formbuilder/containers/check_boxes.rb +18 -10
  7. data/lib/govuk_design_system_formbuilder/containers/check_boxes_fieldset.rb +18 -9
  8. data/lib/govuk_design_system_formbuilder/containers/fieldset.rb +15 -55
  9. data/lib/govuk_design_system_formbuilder/containers/form_group.rb +18 -10
  10. data/lib/govuk_design_system_formbuilder/containers/radio_buttons_fieldset.rb +19 -10
  11. data/lib/govuk_design_system_formbuilder/containers/radios.rb +22 -11
  12. data/lib/govuk_design_system_formbuilder/containers/supplemental.rb +3 -3
  13. data/lib/govuk_design_system_formbuilder/elements/caption.rb +8 -6
  14. data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection.rb +21 -12
  15. data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection_check_box.rb +2 -2
  16. data/lib/govuk_design_system_formbuilder/elements/check_boxes/fieldset_check_box.rb +16 -12
  17. data/lib/govuk_design_system_formbuilder/elements/date.rb +48 -41
  18. data/lib/govuk_design_system_formbuilder/elements/error_message.rb +3 -3
  19. data/lib/govuk_design_system_formbuilder/elements/error_summary.rb +15 -15
  20. data/lib/govuk_design_system_formbuilder/elements/file.rb +11 -10
  21. data/lib/govuk_design_system_formbuilder/elements/hint.rb +13 -13
  22. data/lib/govuk_design_system_formbuilder/elements/inputs/email.rb +2 -0
  23. data/lib/govuk_design_system_formbuilder/elements/label.rb +31 -23
  24. data/lib/govuk_design_system_formbuilder/elements/legend.rb +79 -0
  25. data/lib/govuk_design_system_formbuilder/elements/radios/collection.rb +23 -14
  26. data/lib/govuk_design_system_formbuilder/elements/radios/collection_radio_button.rb +13 -3
  27. data/lib/govuk_design_system_formbuilder/elements/radios/fieldset_radio_button.rb +7 -3
  28. data/lib/govuk_design_system_formbuilder/elements/select.rb +24 -19
  29. data/lib/govuk_design_system_formbuilder/elements/submit.rb +14 -6
  30. data/lib/govuk_design_system_formbuilder/elements/text_area.rb +29 -23
  31. data/lib/govuk_design_system_formbuilder/traits/input.rb +9 -8
  32. data/lib/govuk_design_system_formbuilder/traits/label.rb +2 -2
  33. data/lib/govuk_design_system_formbuilder/version.rb +1 -1
  34. metadata +9 -8
@@ -35,7 +35,11 @@ module GOVUKDesignSystemFormBuilder
35
35
  end
36
36
 
37
37
  def label_element
38
- @label_element ||= Elements::Label.new(@builder, @object_name, @attribute_name, radio: true, value: @value, link_errors: @link_errors, **label_options)
38
+ @label_element ||= Elements::Label.new(@builder, @object_name, @attribute_name, **label_content, **label_options)
39
+ end
40
+
41
+ def label_options
42
+ { radio: true, value: @value, link_errors: @link_errors }
39
43
  end
40
44
 
41
45
  def hint_element
@@ -43,10 +47,10 @@ module GOVUKDesignSystemFormBuilder
43
47
  end
44
48
 
45
49
  def input
46
- @builder.radio_button(@attribute_name, @value, input_options)
50
+ @builder.radio_button(@attribute_name, @value, **options)
47
51
  end
48
52
 
49
- def input_options
53
+ def options
50
54
  {
51
55
  id: field_id(link_errors: @link_errors),
52
56
  aria: { describedby: hint_id },
@@ -1,28 +1,27 @@
1
1
  module GOVUKDesignSystemFormBuilder
2
2
  module Elements
3
3
  class Select < Base
4
- using PrefixableArray
5
-
6
4
  include Traits::Error
7
5
  include Traits::Label
8
6
  include Traits::Hint
9
7
  include Traits::Supplemental
10
8
 
11
- def initialize(builder, object_name, attribute_name, collection, value_method:, text_method:, options: {}, html_options: {}, hint_text:, label:, caption:, &block)
9
+ def initialize(builder, object_name, attribute_name, collection, value_method:, text_method:, options: {}, html_options: {}, hint_text:, label:, caption:, form_group_classes:, &block)
12
10
  super(builder, object_name, attribute_name, &block)
13
11
 
14
- @collection = collection
15
- @value_method = value_method
16
- @text_method = text_method
17
- @options = options
18
- @html_options = html_options
19
- @label = label
20
- @caption = caption
21
- @hint_text = hint_text
12
+ @collection = collection
13
+ @value_method = value_method
14
+ @text_method = text_method
15
+ @options = options
16
+ @html_options = html_options
17
+ @label = label
18
+ @caption = caption
19
+ @hint_text = hint_text
20
+ @form_group_classes = form_group_classes
22
21
  end
23
22
 
24
23
  def html
25
- Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
24
+ Containers::FormGroup.new(@builder, @object_name, @attribute_name, classes: @form_group_classes).html do
26
25
  safe_join([label_element, supplemental_content, hint_element, error_element, select])
27
26
  end
28
27
  end
@@ -30,21 +29,27 @@ module GOVUKDesignSystemFormBuilder
30
29
  private
31
30
 
32
31
  def select
33
- @builder.collection_select(@attribute_name, @collection, @value_method, @text_method, @options, select_options)
32
+ @builder.collection_select(@attribute_name, @collection, @value_method, @text_method, @options, **options)
34
33
  end
35
34
 
36
- def select_options
35
+ def options
37
36
  @html_options.deep_merge(
38
37
  id: field_id(link_errors: true),
39
- class: select_classes,
38
+ class: classes,
40
39
  aria: { describedby: described_by(hint_id, error_id, supplemental_id) }
41
40
  )
42
41
  end
43
42
 
44
- def select_classes
45
- %w(select).prefix(brand).tap do |classes|
46
- classes.push(%(#{brand}-select--error)) if has_errors?
47
- end
43
+ def classes
44
+ [%(#{brand}-select), error_class, custom_classes].flatten.compact
45
+ end
46
+
47
+ def error_class
48
+ %(#{brand}-select--error) if has_errors?
49
+ end
50
+
51
+ def custom_classes
52
+ @html_options.dig(:class)
48
53
  end
49
54
  end
50
55
  end
@@ -24,14 +24,18 @@ module GOVUKDesignSystemFormBuilder
24
24
  private
25
25
 
26
26
  def submit
27
- @builder.submit(@text, class: submit_classes, **submit_options)
27
+ @builder.submit(@text, class: classes, **options)
28
28
  end
29
29
 
30
- def submit_classes
31
- %w(button).prefix(brand).push(warning_class, secondary_class, disabled_class, @classes, padding_class(@block_content.present?))
30
+ def classes
31
+ %w(button)
32
+ .prefix(brand)
33
+ .push(warning_class, secondary_class, disabled_class, padding_class, custom_classes)
34
+ .flatten
35
+ .compact
32
36
  end
33
37
 
34
- def submit_options
38
+ def options
35
39
  {
36
40
  formnovalidate: !@validate,
37
41
  disabled: @disabled,
@@ -50,13 +54,17 @@ module GOVUKDesignSystemFormBuilder
50
54
  %(#{brand}-button--secondary) if @secondary
51
55
  end
52
56
 
53
- def padding_class(content_present)
54
- %(#{brand}-!-margin-right-1) if content_present
57
+ def padding_class
58
+ %(#{brand}-!-margin-right-1) if @block_content
55
59
  end
56
60
 
57
61
  def disabled_class
58
62
  %(#{brand}-button--disabled) if @disabled
59
63
  end
64
+
65
+ def custom_classes
66
+ Array.wrap(@classes)
67
+ end
60
68
  end
61
69
  end
62
70
  end
@@ -8,22 +8,23 @@ 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:, caption:, rows:, max_words:, max_chars:, threshold:, **kwargs, &block)
11
+ def initialize(builder, object_name, attribute_name, hint_text:, label:, caption:, rows:, max_words:, max_chars:, threshold:, form_group_classes:, **kwargs, &block)
12
12
  super(builder, object_name, attribute_name, &block)
13
13
 
14
- @label = label
15
- @caption = caption
16
- @hint_text = hint_text
17
- @attributes = kwargs
18
- @max_words = max_words
19
- @max_chars = max_chars
20
- @threshold = threshold
21
- @rows = rows
14
+ @label = label
15
+ @caption = caption
16
+ @hint_text = hint_text
17
+ @max_words = max_words
18
+ @max_chars = max_chars
19
+ @threshold = threshold
20
+ @rows = rows
21
+ @form_group_classes = form_group_classes
22
+ @html_attributes = kwargs
22
23
  end
23
24
 
24
25
  def html
25
- Containers::CharacterCount.new(@builder, max_words: @max_words, max_chars: @max_chars, threshold: @threshold).html do
26
- Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
26
+ Containers::CharacterCount.new(@builder, **character_count_options).html do
27
+ Containers::FormGroup.new(@builder, @object_name, @attribute_name, classes: @form_group_classes).html do
27
28
  safe_join([label_element, supplemental_content, hint_element, error_element, text_area, limit_description])
28
29
  end
29
30
  end
@@ -31,21 +32,26 @@ module GOVUKDesignSystemFormBuilder
31
32
 
32
33
  private
33
34
 
35
+ def character_count_options
36
+ { max_words: @max_words, max_chars: @max_chars, threshold: @threshold }
37
+ end
38
+
34
39
  def text_area
35
- @builder.text_area(@attribute_name, **text_area_options, **@attributes.merge(rows: @rows))
40
+ @builder.text_area(@attribute_name, **options, **@html_attributes)
36
41
  end
37
42
 
38
- def text_area_classes
43
+ def classes
39
44
  %w(textarea).prefix(brand).tap do |classes|
40
45
  classes.push(%(#{brand}-textarea--error)) if has_errors?
41
46
  classes.push(%(#{brand}-js-character-count)) if limit?
42
47
  end
43
48
  end
44
49
 
45
- def text_area_options
50
+ def options
46
51
  {
47
52
  id: field_id(link_errors: true),
48
- class: text_area_classes,
53
+ class: classes,
54
+ rows: @rows,
49
55
  aria: { describedby: described_by(hint_id, error_id, supplemental_id, limit_description_id) },
50
56
  }
51
57
  end
@@ -59,9 +65,17 @@ module GOVUKDesignSystemFormBuilder
59
65
  end
60
66
 
61
67
  def limit?
68
+ limit_quantity.present?
69
+ end
70
+
71
+ def limit_quantity
62
72
  @max_words || @max_chars
63
73
  end
64
74
 
75
+ def limit_type
76
+ @max_words.present? ? 'words' : 'characters'
77
+ end
78
+
65
79
  def limit_description
66
80
  return nil unless limit?
67
81
 
@@ -74,14 +88,6 @@ module GOVUKDesignSystemFormBuilder
74
88
  %w(hint character-count__message).prefix(brand)
75
89
  end
76
90
 
77
- def limit_quantity
78
- @max_words || @max_chars
79
- end
80
-
81
- def limit_type
82
- @max_words.present? ? 'words' : 'characters'
83
- end
84
-
85
91
  def limit_description_id
86
92
  return nil unless limit?
87
93
 
@@ -1,18 +1,19 @@
1
1
  module GOVUKDesignSystemFormBuilder
2
2
  module Traits
3
3
  module Input
4
- def initialize(builder, object_name, attribute_name, hint_text:, label:, caption:, width:, **kwargs, &block)
4
+ def initialize(builder, object_name, attribute_name, hint_text:, label:, caption:, width:, form_group_classes:, **kwargs, &block)
5
5
  super(builder, object_name, attribute_name, &block)
6
6
 
7
- @width = width
8
- @attributes = kwargs
9
- @label = label
10
- @caption = caption
11
- @hint_text = hint_text
7
+ @width = width
8
+ @label = label
9
+ @caption = caption
10
+ @hint_text = hint_text
11
+ @html_attributes = kwargs
12
+ @form_group_classes = form_group_classes
12
13
  end
13
14
 
14
15
  def html
15
- Containers::FormGroup.new(@builder, @object_name, @attribute_name).html do
16
+ Containers::FormGroup.new(@builder, @object_name, @attribute_name, classes: @form_group_classes).html do
16
17
  safe_join([label_element, supplemental_content, hint_element, error_element, input])
17
18
  end
18
19
  end
@@ -20,7 +21,7 @@ module GOVUKDesignSystemFormBuilder
20
21
  private
21
22
 
22
23
  def input
23
- @builder.send(builder_method, @attribute_name, **input_options.merge(@attributes))
24
+ @builder.send(builder_method, @attribute_name, **input_options, **@html_attributes)
24
25
  end
25
26
 
26
27
  def input_options
@@ -4,10 +4,10 @@ module GOVUKDesignSystemFormBuilder
4
4
  private
5
5
 
6
6
  def label_element
7
- @label_element ||= Elements::Label.new(@builder, @object_name, @attribute_name, caption: @caption, **label_options)
7
+ @label_element ||= Elements::Label.new(@builder, @object_name, @attribute_name, caption: @caption, **label_content)
8
8
  end
9
9
 
10
- def label_options
10
+ def label_content
11
11
  case @label
12
12
  when Hash
13
13
  @label
@@ -1,3 +1,3 @@
1
1
  module GOVUKDesignSystemFormBuilder
2
- VERSION = '1.2.1'.freeze
2
+ VERSION = '1.2.6'.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.1
4
+ version: 1.2.6
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-06-24 00:00:00.000000000 Z
11
+ date: 2020-07-29 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.14.0
61
+ version: 3.16.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.14.0
68
+ version: 3.16.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: pry
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -176,14 +176,14 @@ dependencies:
176
176
  requirements:
177
177
  - - "~>"
178
178
  - !ruby/object:Gem::Version
179
- version: 3.19.0
179
+ version: 3.20.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.19.0
186
+ version: 3.20.0
187
187
  - !ruby/object:Gem::Dependency
188
188
  name: rubypants
189
189
  requirement: !ruby/object:Gem::Requirement
@@ -204,14 +204,14 @@ dependencies:
204
204
  requirements:
205
205
  - - "~>"
206
206
  - !ruby/object:Gem::Version
207
- version: 2.3.0
207
+ version: 2.4.0
208
208
  type: :development
209
209
  prerelease: false
210
210
  version_requirements: !ruby/object:Gem::Requirement
211
211
  requirements:
212
212
  - - "~>"
213
213
  - !ruby/object:Gem::Version
214
- version: 2.3.0
214
+ version: 2.4.0
215
215
  - !ruby/object:Gem::Dependency
216
216
  name: sass
217
217
  requirement: !ruby/object:Gem::Requirement
@@ -277,6 +277,7 @@ files:
277
277
  - lib/govuk_design_system_formbuilder/elements/inputs/text.rb
278
278
  - lib/govuk_design_system_formbuilder/elements/inputs/url.rb
279
279
  - lib/govuk_design_system_formbuilder/elements/label.rb
280
+ - lib/govuk_design_system_formbuilder/elements/legend.rb
280
281
  - lib/govuk_design_system_formbuilder/elements/radios/collection.rb
281
282
  - lib/govuk_design_system_formbuilder/elements/radios/collection_radio_button.rb
282
283
  - lib/govuk_design_system_formbuilder/elements/radios/fieldset_radio_button.rb