govuk_design_system_formbuilder 1.2.2 → 1.2.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/lib/govuk_design_system_formbuilder.rb +5 -1
  4. data/lib/govuk_design_system_formbuilder/base.rb +1 -1
  5. data/lib/govuk_design_system_formbuilder/builder.rb +49 -29
  6. data/lib/govuk_design_system_formbuilder/containers/character_count.rb +8 -7
  7. data/lib/govuk_design_system_formbuilder/containers/check_boxes.rb +18 -10
  8. data/lib/govuk_design_system_formbuilder/containers/check_boxes_fieldset.rb +18 -9
  9. data/lib/govuk_design_system_formbuilder/containers/fieldset.rb +15 -55
  10. data/lib/govuk_design_system_formbuilder/containers/form_group.rb +18 -10
  11. data/lib/govuk_design_system_formbuilder/containers/radio_buttons_fieldset.rb +19 -10
  12. data/lib/govuk_design_system_formbuilder/containers/radios.rb +22 -11
  13. data/lib/govuk_design_system_formbuilder/containers/supplemental.rb +3 -3
  14. data/lib/govuk_design_system_formbuilder/elements/caption.rb +8 -6
  15. data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection.rb +21 -12
  16. data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection_check_box.rb +3 -5
  17. data/lib/govuk_design_system_formbuilder/elements/check_boxes/fieldset_check_box.rb +17 -13
  18. data/lib/govuk_design_system_formbuilder/elements/date.rb +51 -44
  19. data/lib/govuk_design_system_formbuilder/elements/error_message.rb +4 -4
  20. data/lib/govuk_design_system_formbuilder/elements/error_summary.rb +15 -15
  21. data/lib/govuk_design_system_formbuilder/elements/file.rb +11 -10
  22. data/lib/govuk_design_system_formbuilder/elements/hint.rb +13 -13
  23. data/lib/govuk_design_system_formbuilder/elements/inputs/email.rb +2 -2
  24. data/lib/govuk_design_system_formbuilder/elements/inputs/number.rb +0 -2
  25. data/lib/govuk_design_system_formbuilder/elements/inputs/password.rb +0 -2
  26. data/lib/govuk_design_system_formbuilder/elements/inputs/phone.rb +0 -2
  27. data/lib/govuk_design_system_formbuilder/elements/inputs/text.rb +0 -2
  28. data/lib/govuk_design_system_formbuilder/elements/inputs/url.rb +0 -2
  29. data/lib/govuk_design_system_formbuilder/elements/label.rb +33 -25
  30. data/lib/govuk_design_system_formbuilder/elements/legend.rb +79 -0
  31. data/lib/govuk_design_system_formbuilder/elements/radios/collection.rb +23 -14
  32. data/lib/govuk_design_system_formbuilder/elements/radios/collection_radio_button.rb +15 -7
  33. data/lib/govuk_design_system_formbuilder/elements/radios/fieldset_radio_button.rb +8 -4
  34. data/lib/govuk_design_system_formbuilder/elements/select.rb +24 -19
  35. data/lib/govuk_design_system_formbuilder/elements/submit.rb +11 -6
  36. data/lib/govuk_design_system_formbuilder/elements/text_area.rb +31 -25
  37. data/lib/govuk_design_system_formbuilder/traits/conditional.rb +1 -1
  38. data/lib/govuk_design_system_formbuilder/traits/input.rb +9 -8
  39. data/lib/govuk_design_system_formbuilder/traits/label.rb +2 -2
  40. data/lib/govuk_design_system_formbuilder/version.rb +1 -1
  41. metadata +9 -8
@@ -2,8 +2,6 @@ module GOVUKDesignSystemFormBuilder
2
2
  module Elements
3
3
  module Radios
4
4
  class CollectionRadioButton < Base
5
- using PrefixableArray
6
-
7
5
  include Traits::Hint
8
6
  include Traits::CollectionItem
9
7
 
@@ -23,7 +21,7 @@ module GOVUKDesignSystemFormBuilder
23
21
  end
24
22
 
25
23
  def html
26
- content_tag('div', class: %(#{brand}-radios__item)) do
24
+ tag.div(class: %(#{brand}-radios__item)) do
27
25
  safe_join([radio, label_element, hint_element])
28
26
  end
29
27
  end
@@ -31,14 +29,14 @@ module GOVUKDesignSystemFormBuilder
31
29
  private
32
30
 
33
31
  def radio
34
- @builder.radio_button(@attribute_name, @value, **radio_options)
32
+ @builder.radio_button(@attribute_name, @value, **options)
35
33
  end
36
34
 
37
- def radio_options
35
+ def options
38
36
  {
39
37
  id: field_id(link_errors: @link_errors),
40
38
  aria: { describedby: hint_id },
41
- class: %w(radios__input).prefix(brand)
39
+ class: %(#{brand}-radios__input)
42
40
  }
43
41
  end
44
42
 
@@ -47,7 +45,17 @@ module GOVUKDesignSystemFormBuilder
47
45
  end
48
46
 
49
47
  def label_element
50
- @label_element ||= Elements::Label.new(@builder, @object_name, @attribute_name, text: @label_text, value: @value, radio: true, size: label_size, link_errors: @link_errors)
48
+ @label_element ||= Elements::Label.new(@builder, @object_name, @attribute_name, **label_options)
49
+ end
50
+
51
+ def label_options
52
+ {
53
+ text: @label_text,
54
+ value: @value,
55
+ radio: true,
56
+ size: label_size,
57
+ link_errors: @link_errors
58
+ }
51
59
  end
52
60
 
53
61
  def label_size
@@ -29,13 +29,17 @@ module GOVUKDesignSystemFormBuilder
29
29
  private
30
30
 
31
31
  def radio
32
- content_tag('div', class: %(#{brand}-radios__item)) do
32
+ tag.div(class: %(#{brand}-radios__item)) do
33
33
  safe_join([input, label_element, hint_element])
34
34
  end
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,17 +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
30
+ def classes
31
31
  %w(button)
32
32
  .prefix(brand)
33
- .push(warning_class, secondary_class, disabled_class, @classes, padding_class(@block_content.present?))
33
+ .push(warning_class, secondary_class, disabled_class, padding_class, custom_classes)
34
+ .flatten
34
35
  .compact
35
36
  end
36
37
 
37
- def submit_options
38
+ def options
38
39
  {
39
40
  formnovalidate: !@validate,
40
41
  disabled: @disabled,
@@ -53,13 +54,17 @@ module GOVUKDesignSystemFormBuilder
53
54
  %(#{brand}-button--secondary) if @secondary
54
55
  end
55
56
 
56
- def padding_class(content_present)
57
- %(#{brand}-!-margin-right-1) if content_present
57
+ def padding_class
58
+ %(#{brand}-!-margin-right-1) if @block_content
58
59
  end
59
60
 
60
61
  def disabled_class
61
62
  %(#{brand}-button--disabled) if @disabled
62
63
  end
64
+
65
+ def custom_classes
66
+ Array.wrap(@classes)
67
+ end
63
68
  end
64
69
  end
65
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
- classes.push(%(#{brand}-textarea--error)) if has_errors?
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,13 +65,21 @@ 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
 
68
- content_tag('span', id: limit_id, class: limit_description_classes, aria: { live: 'polite' }) do
82
+ tag.span(id: limit_id, class: limit_description_classes, aria: { live: 'polite' }) do
69
83
  "You can enter up to #{limit_quantity} #{limit_type}"
70
84
  end
71
85
  end
@@ -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
 
@@ -8,7 +8,7 @@ module GOVUKDesignSystemFormBuilder
8
8
  end
9
9
 
10
10
  def wrap_conditional(block)
11
- content_tag('div', class: conditional_classes, id: conditional_id) do
11
+ tag.div(class: conditional_classes, id: conditional_id) do
12
12
  capture { block.call }
13
13
  end
14
14
  end
@@ -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.2'.freeze
2
+ VERSION = '1.2.7'.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.2
4
+ version: 1.2.7
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-25 00:00:00.000000000 Z
11
+ date: 2020-08-14 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.17.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.17.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.21.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.21.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