govuk_design_system_formbuilder 1.1.11 → 1.2.1

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 +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