html-attributes-utils 0.9.2 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3808ce542e4f9fd7160573fe17ff2ebc2e8c918235f1f2d901b1f14f29dbfa5a
4
- data.tar.gz: 7481b962ddd46b11916f19a09d7bd83dd9837d0a79bf81e122b25a15b2c205b8
3
+ metadata.gz: 61d705b8b6000833dbd60e659fcca312f61e6d4cfbd10a3f25bcc13845f6ef27
4
+ data.tar.gz: a5fc3a72c775fd555f94efd98f03a9324010fb0ac9b80385eeddb0b8923a8f0f
5
5
  SHA512:
6
- metadata.gz: 7135311cae1f633bc62f6f833ab2aa78356390ee44d323388d223b273daa1ce4c4ba72ef3acadeae31d64f68ba275db40560e006deb066f6ec1b3ab197d4da0d
7
- data.tar.gz: 29b428ff663d2bf89cac66ec754f8dd4a01232c9af07ad7e9f6b1a74bcdc1b58ea140d7b7cce883848373332106108556681eb773d9d76b7cc1b5274492b4e9c
6
+ metadata.gz: cf02f936411794118c6e001d8ab67452394442859450133e4402d4a04f6c305620e3f215bdb5f340dc55e3249328641efa3d85cb130000a2915ab0756cd651a4
7
+ data.tar.gz: '09d8ca2b7e2444332f64b50b4fe93e19ee6aae4408688f993455e8db19d33b2de36df51c242db97373aa8a1787401f4c651c83587df9ce6bfeb7edc525b6e4a0'
data/README.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # HTML Attributes Utilities
2
2
 
3
+ [![Tests](https://github.com/DFE-Digital/html-attributes-utils/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/DFE-Digital/html-attributes-utils/actions/workflows/tests.yml)
4
+ [![Maintainability](https://api.codeclimate.com/v1/badges/da15b0accce3baf10c34/maintainability)](https://codeclimate.com/github/DFE-Digital/html-attributes-utils/maintainability)
5
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/da15b0accce3baf10c34/test_coverage)](https://codeclimate.com/github/DFE-Digital/html-attributes-utils/test_coverage)
6
+ ![GitHub](https://img.shields.io/github/license/dfe-digital/html-attributes-utils)
7
+ ![Supported ruby versions](https://img.shields.io/badge/ruby-%3E%3D%202.7.6-red)
8
+ ![Supported rails versions](https://img.shields.io/badge/rails-%3E%3D%206.1.6-red)
9
+
10
+
3
11
  This is a small library intended to make it easier to deal with HTML
4
12
  attributes. It was written to reduce overlap in the
5
13
  [govuk-components](https://github.com/DFE-Digital/govuk-components) and
@@ -8,14 +8,16 @@ module HTMLAttributesUtils
8
8
  # They are stored as nested arrays so when we're walking multiple
9
9
  # levels on the deep merge the structure can be identified. This means
10
10
  # the library works with the Rails-preferred format of
11
- # `aria: { describedby: "xyz" }` rather than `aria-describdby: `xyz`
11
+ # `aria: { describedby: "xyz" }` rather than `"aria-describdby" => "xyz"`
12
12
  DEFAULT_MERGEABLE_ATTRIBUTES = [
13
13
  %i(class),
14
14
  %i(aria controls),
15
15
  %i(aria describedby),
16
16
  %i(aria flowto),
17
17
  %i(aria labelledby),
18
+ %i(data aria controls),
18
19
  %i(aria owns),
20
+ %i(rel),
19
21
  ].freeze
20
22
 
21
23
  refine Hash do
@@ -47,12 +49,7 @@ module HTMLAttributesUtils
47
49
  originals.each_with_object(originals) { |(key, value), merged|
48
50
  next unless overrides.key?(key)
49
51
 
50
- merged[key] = combine_values(
51
- value,
52
- overrides[key],
53
- parents: [*parents, *key],
54
- mergeable_attributes: mergeable_attributes
55
- )
52
+ merged[key] = process_pair(key, value, parents: parents, overrides: overrides, mergeable_attributes: mergeable_attributes)
56
53
 
57
54
  overrides.delete(key)
58
55
  }.merge(overrides)
@@ -76,19 +73,40 @@ module HTMLAttributesUtils
76
73
 
77
74
  private
78
75
 
76
+ def process_pair(key, value, parents:, overrides:, mergeable_attributes:)
77
+ combine_values(
78
+ value,
79
+ overrides[key],
80
+ parents: [*parents, *key],
81
+ mergeable_attributes: mergeable_attributes
82
+ )
83
+ end
84
+
79
85
  def tidy_value(value)
80
86
  case value
81
- when Hash
82
- value.deep_tidy_html_attributes.presence
83
- when Array
84
- (value.empty?) ? nil : value.map { |v| tidy_value(v) }.compact
85
- when TrueClass, FalseClass
86
- value
87
- else
88
- value.to_s.strip.presence
87
+ when TrueClass, FalseClass then value
88
+ when Hash then tidy_hash(value)
89
+ when Array then tidy_array(value)
90
+ else tidy_remaining(value)
89
91
  end
90
92
  end
91
93
 
94
+ def tidy_hash(hash)
95
+ return nil if hash.empty?
96
+
97
+ hash.deep_tidy_html_attributes
98
+ end
99
+
100
+ def tidy_array(array)
101
+ return nil if array.empty?
102
+
103
+ array.map { |v| tidy_value(v) }.compact
104
+ end
105
+
106
+ def tidy_remaining(value)
107
+ value.to_s.strip.presence
108
+ end
109
+
92
110
  def combine_values(value, override, **kwargs)
93
111
  case split_attribute_list(value, **kwargs)
94
112
  when Array
@@ -116,9 +134,7 @@ module HTMLAttributesUtils
116
134
  end
117
135
 
118
136
  def split_attribute_list(value, parents:, mergeable_attributes:)
119
- return value.split if value.is_a?(String) && mergeable_attributes.include?(parents)
120
-
121
- value
137
+ mergeable_attributes.include?(parents) ? try_split(value) : value
122
138
  end
123
139
  end
124
140
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: html-attributes-utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 1.0.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: 2022-06-26 00:00:00.000000000 Z
11
+ date: 2023-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -115,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
115
  - !ruby/object:Gem::Version
116
116
  version: '0'
117
117
  requirements: []
118
- rubygems_version: 3.3.7
118
+ rubygems_version: 3.4.10
119
119
  signing_key:
120
120
  specification_version: 4
121
121
  summary: HTML attribute hash utilities