govuk_design_system_formbuilder 1.1.11 → 1.2.1

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 (41) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/lib/govuk_design_system_formbuilder.rb +7 -1
  4. data/lib/govuk_design_system_formbuilder/base.rb +17 -0
  5. data/lib/govuk_design_system_formbuilder/builder.rb +205 -77
  6. data/lib/govuk_design_system_formbuilder/containers/character_count.rb +2 -2
  7. data/lib/govuk_design_system_formbuilder/containers/check_boxes.rb +5 -3
  8. data/lib/govuk_design_system_formbuilder/containers/check_boxes_fieldset.rb +12 -11
  9. data/lib/govuk_design_system_formbuilder/containers/fieldset.rb +37 -20
  10. data/lib/govuk_design_system_formbuilder/containers/form_group.rb +4 -2
  11. data/lib/govuk_design_system_formbuilder/containers/radio_buttons_fieldset.rb +12 -11
  12. data/lib/govuk_design_system_formbuilder/containers/radios.rb +7 -5
  13. data/lib/govuk_design_system_formbuilder/elements/caption.rb +34 -0
  14. data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection.rb +11 -13
  15. data/lib/govuk_design_system_formbuilder/elements/check_boxes/collection_check_box.rb +20 -16
  16. data/lib/govuk_design_system_formbuilder/elements/check_boxes/fieldset_check_box.rb +24 -29
  17. data/lib/govuk_design_system_formbuilder/elements/check_boxes/label.rb +3 -1
  18. data/lib/govuk_design_system_formbuilder/elements/date.rb +31 -31
  19. data/lib/govuk_design_system_formbuilder/elements/error_message.rb +11 -8
  20. data/lib/govuk_design_system_formbuilder/elements/error_summary.rb +26 -29
  21. data/lib/govuk_design_system_formbuilder/elements/file.rb +22 -21
  22. data/lib/govuk_design_system_formbuilder/elements/hint.rb +6 -7
  23. data/lib/govuk_design_system_formbuilder/elements/inputs/email.rb +2 -0
  24. data/lib/govuk_design_system_formbuilder/elements/inputs/number.rb +2 -0
  25. data/lib/govuk_design_system_formbuilder/elements/inputs/password.rb +2 -0
  26. data/lib/govuk_design_system_formbuilder/elements/inputs/phone.rb +2 -0
  27. data/lib/govuk_design_system_formbuilder/elements/inputs/text.rb +2 -0
  28. data/lib/govuk_design_system_formbuilder/elements/inputs/url.rb +2 -0
  29. data/lib/govuk_design_system_formbuilder/elements/label.rb +39 -26
  30. data/lib/govuk_design_system_formbuilder/elements/radios/collection.rb +26 -24
  31. data/lib/govuk_design_system_formbuilder/elements/radios/collection_radio_button.rb +16 -14
  32. data/lib/govuk_design_system_formbuilder/elements/radios/fieldset_radio_button.rb +19 -21
  33. data/lib/govuk_design_system_formbuilder/elements/select.rb +12 -20
  34. data/lib/govuk_design_system_formbuilder/elements/submit.rb +29 -27
  35. data/lib/govuk_design_system_formbuilder/elements/text_area.rb +27 -27
  36. data/lib/govuk_design_system_formbuilder/traits/caption.rb +23 -0
  37. data/lib/govuk_design_system_formbuilder/traits/input.rb +33 -41
  38. data/lib/govuk_design_system_formbuilder/traits/label.rb +12 -1
  39. data/lib/govuk_design_system_formbuilder/traits/localisation.rb +2 -0
  40. data/lib/govuk_design_system_formbuilder/version.rb +1 -1
  41. metadata +19 -17
@@ -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,50 +1,42 @@
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
- %w(govuk-input).push(width_classes, error_classes).compact
35
+ [%(#{brand}-input)].push(width_classes, error_classes).compact
44
36
  end
45
37
 
46
38
  def error_classes
47
- 'govuk-input--error' if has_errors?
39
+ %(#{brand}-input--error) if has_errors?
48
40
  end
49
41
 
50
42
  def width_classes
@@ -53,20 +45,20 @@ module GOVUKDesignSystemFormBuilder
53
45
  case @width
54
46
 
55
47
  # fixed (character) widths
56
- when 20 then 'govuk-input--width-20'
57
- when 10 then 'govuk-input--width-10'
58
- when 5 then 'govuk-input--width-5'
59
- when 4 then 'govuk-input--width-4'
60
- when 3 then 'govuk-input--width-3'
61
- when 2 then 'govuk-input--width-2'
48
+ when 20 then %(#{brand}-input--width-20)
49
+ when 10 then %(#{brand}-input--width-10)
50
+ when 5 then %(#{brand}-input--width-5)
51
+ when 4 then %(#{brand}-input--width-4)
52
+ when 3 then %(#{brand}-input--width-3)
53
+ when 2 then %(#{brand}-input--width-2)
62
54
 
63
55
  # fluid widths
64
- when 'full' then 'govuk-!-width-full'
65
- when 'three-quarters' then 'govuk-!-width-three-quarters'
66
- when 'two-thirds' then 'govuk-!-width-two-thirds'
67
- when 'one-half' then 'govuk-!-width-one-half'
68
- when 'one-third' then 'govuk-!-width-one-third'
69
- when 'one-quarter' then 'govuk-!-width-one-quarter'
56
+ when 'full' then %(#{brand}-!-width-full)
57
+ when 'three-quarters' then %(#{brand}-!-width-three-quarters)
58
+ when 'two-thirds' then %(#{brand}-!-width-two-thirds)
59
+ when 'one-half' then %(#{brand}-!-width-one-half)
60
+ when 'one-third' then %(#{brand}-!-width-one-third)
61
+ when 'one-quarter' then %(#{brand}-!-width-one-quarter)
70
62
 
71
63
  else fail(ArgumentError, "invalid width '#{@width}'")
72
64
  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.1.11'.freeze
2
+ VERSION = '1.2.1'.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.1.11
4
+ version: 1.2.1
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-20 00:00:00.000000000 Z
11
+ date: 2020-06-24 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,14 +134,14 @@ dependencies:
134
134
  requirements:
135
135
  - - "~>"
136
136
  - !ruby/object:Gem::Version
137
- version: 0.17.1
137
+ version: 0.18.5
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.17.1
144
+ version: 0.18.5
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.18.0
179
+ version: 3.19.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.18.0
186
+ version: 3.19.0
187
187
  - !ruby/object:Gem::Dependency
188
188
  name: rubypants
189
189
  requirement: !ruby/object:Gem::Requirement
@@ -232,14 +232,14 @@ dependencies:
232
232
  requirements:
233
233
  - - "~>"
234
234
  - !ruby/object:Gem::Version
235
- version: 4.0.1
235
+ version: 4.1.0
236
236
  type: :development
237
237
  prerelease: false
238
238
  version_requirements: !ruby/object:Gem::Requirement
239
239
  requirements:
240
240
  - - "~>"
241
241
  - !ruby/object:Gem::Version
242
- version: 4.0.1
242
+ version: 4.1.0
243
243
  description: A Rails form builder that generates form inputs adhering to the GOV.UK
244
244
  Design System
245
245
  email:
@@ -260,6 +260,7 @@ files:
260
260
  - lib/govuk_design_system_formbuilder/containers/radio_buttons_fieldset.rb
261
261
  - lib/govuk_design_system_formbuilder/containers/radios.rb
262
262
  - lib/govuk_design_system_formbuilder/containers/supplemental.rb
263
+ - lib/govuk_design_system_formbuilder/elements/caption.rb
263
264
  - lib/govuk_design_system_formbuilder/elements/check_boxes/collection.rb
264
265
  - lib/govuk_design_system_formbuilder/elements/check_boxes/collection_check_box.rb
265
266
  - lib/govuk_design_system_formbuilder/elements/check_boxes/fieldset_check_box.rb
@@ -282,6 +283,7 @@ files:
282
283
  - lib/govuk_design_system_formbuilder/elements/select.rb
283
284
  - lib/govuk_design_system_formbuilder/elements/submit.rb
284
285
  - lib/govuk_design_system_formbuilder/elements/text_area.rb
286
+ - lib/govuk_design_system_formbuilder/traits/caption.rb
285
287
  - lib/govuk_design_system_formbuilder/traits/collection_item.rb
286
288
  - lib/govuk_design_system_formbuilder/traits/conditional.rb
287
289
  - lib/govuk_design_system_formbuilder/traits/error.rb
@@ -315,7 +317,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
315
317
  - !ruby/object:Gem::Version
316
318
  version: '0'
317
319
  requirements: []
318
- rubygems_version: 3.0.3
320
+ rubygems_version: 3.1.2
319
321
  signing_key:
320
322
  specification_version: 4
321
323
  summary: GOV.UK-compliant Rails form builder