inky-rb 1.3.8.0 → 1.4.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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/inky.gemspec +5 -5
  3. data/lib/inky/component_factory.rb +15 -8
  4. data/lib/inky/rails/version.rb +1 -1
  5. data/lib/inky.rb +6 -1
  6. data/spec/cases/button/with_extra_attr.inky +3 -0
  7. data/spec/cases/button/with_link.inky +1 -1
  8. data/spec/cases/button/with_link_and_extra_attr.inky +3 -0
  9. data/spec/cases/h_line/basic.inky +1 -0
  10. data/spec/cases/h_line/multiple.inky +8 -0
  11. data/spec/cases/h_line/with_attr.inky +2 -0
  12. data/spec/cases/spacer/with_attr.inky +6 -0
  13. data/spec/cases/spacer/with_size.inky +1 -1
  14. data/spec/cases/spacer/with_size_lg.inky +1 -1
  15. data/spec/cases/spacer/with_size_sm.inky +1 -1
  16. data/spec/cases/spacer/with_size_sm_and_lg.inky +1 -1
  17. data/spec/cases/spacer/with_sizes_and_attr.inky +6 -0
  18. data/spec/components_spec.rb +48 -48
  19. data/spec/grid_spec.rb +38 -38
  20. data/spec/spec_helper.rb +0 -1
  21. data/spec/test_app/log/test.log +101 -4702
  22. data/spec/test_app/spec/features/inky_spec.rb +3 -3
  23. metadata +85 -131
  24. data/spec/_cases_output/button/no_link.inky +0 -1
  25. data/spec/_cases_output/button/with_expand_class.inky +0 -4
  26. data/spec/_cases_output/button/with_image.inky +0 -3
  27. data/spec/_cases_output/button/with_link.inky +0 -3
  28. data/spec/_cases_output/button/with_tricky_class.inky +0 -22
  29. data/spec/_cases_output/callout/basic.inky +0 -1
  30. data/spec/_cases_output/callout/with_attributes.inky +0 -3
  31. data/spec/_cases_output/general/empty_attributes.inky +0 -6
  32. data/spec/_cases_output/general/multiple_root.inky +0 -2
  33. data/spec/_cases_output/general/no_tag.inky +0 -1
  34. data/spec/_cases_output/general/root_within_text.inky +0 -3
  35. data/spec/_cases_output/general/void_html_elements.inky +0 -6
  36. data/spec/_cases_output/grid/columns.inky +0 -2
  37. data/spec/_cases_output/grid/container.inky +0 -1
  38. data/spec/_cases_output/grid/container_with_align.inky +0 -1
  39. data/spec/_cases_output/grid/row.inky +0 -1
  40. data/spec/_cases_output/grid/row_with_columns.inky +0 -5
  41. data/spec/_cases_output/menu/item.inky +0 -1
  42. data/spec/_cases_output/menu/menu.inky +0 -2
  43. data/spec/_cases_output/menu/menu_with_align.inky +0 -2
  44. data/spec/_cases_output/menu/menu_with_items.inky +0 -5
  45. data/spec/_cases_output/spacer/basic.inky +0 -5
  46. data/spec/_cases_output/spacer/with_size.inky +0 -5
  47. data/spec/_cases_output/spacer/with_size_lg.inky +0 -5
  48. data/spec/_cases_output/spacer/with_size_sm.inky +0 -5
  49. data/spec/_cases_output/spacer/with_size_sm_and_lg.inky +0 -5
  50. data/spec/_cases_output/wrapper/basic.inky +0 -1
  51. data/spec/_cases_output/wrapper/with_align.inky +0 -1
  52. data/spec/_cases_output/wrapper/with_attributes.inky +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 48af980ab18545c232dc3fd4f4ee2ebedbfeca066aabe1faa4c3455c2aa4c152
4
- data.tar.gz: f0b985c040dea524b0004cc90edb81ce8f4920e135d9def3253896a38b75099c
3
+ metadata.gz: 8deedcc1e292b8b0f12de420af6d3493444416da805707ce7dd1e992b3a5768b
4
+ data.tar.gz: 6859292e358b42009d900b468fbe2c6cb748631f021c9264c5ce441b2b69a8bb
5
5
  SHA512:
6
- metadata.gz: 3de872ab2036bd2ffcfb7c6c13aa8a58aee0b208e89da68281547e60a61acc8eaaf7b7f587d08d9672b6c84ad18219e61d7c227a71d47b3a6396c59ebb9dd840
7
- data.tar.gz: f278877cc37ddf979b7f68fb35d3f333881095203eb40a95b330e217c28cc9708ba658a5466fcb2b171ace3ffd83b60270ec64b781d6a9b6ccdd64a37d728223
6
+ metadata.gz: cc424f30789ff30c806b9c059350c35908f464ab0cf5afd4a8dfd6157a349b56714fa192aae54846a005527709f1bea71076c0caec557988290a1d16c5448bf3
7
+ data.tar.gz: 55880e2d1d5ea9ff137b0f851c52c4ba82e89e43697c63cdd6e77df05ef036df522c0715e662c25e5659589efb7e6c883428e8b93979d2f24fa659348a51ff56
data/inky.gemspec CHANGED
@@ -5,11 +5,11 @@ require 'inky/rails/version'
5
5
  Gem::Specification.new do |s|
6
6
  s.name = 'inky-rb'
7
7
  s.version = Inky::Rails::VERSION
8
- s.summary = 'Inky is an HTML-based templating language that converts simple HTML into complex, responsive email-ready HTML. Designed for Foundation for Emails, a responsive email framework from ZURB. '
9
- s.description = 'Inky is an HTML-based templating language that converts simple HTML into complex, responsive email-ready HTML. Designed for Foundation for Emails, a responsive email framework from ZURB. '
10
- s.authors = ["ZURB"]
11
- s.email = ['foundation@zurb.com']
12
- s.homepage = 'https://github.com/zurb/inky-rb'
8
+ s.summary = 'Inky is an HTML-based templating language that converts simple HTML into complex, responsive email-ready HTML. Designed for Foundation for Emails'
9
+ s.description = 'Inky is an HTML-based templating language that converts simple HTML into complex, responsive email-ready HTML. Designed for Foundation for Emails'
10
+ s.authors = ["Foundation"]
11
+ s.email = ['contact@get.foundation']
12
+ s.homepage = 'https://github.com/foundation/inky-rb'
13
13
  s.licenses = ['MIT']
14
14
 
15
15
  s.files = `git ls-files -z`.split("\x0")
@@ -45,21 +45,22 @@ module Inky
45
45
 
46
46
  def _transform_button(component, inner)
47
47
  expand = _has_class(component, 'expand')
48
+ attributes = _pass_through_attributes(component)
48
49
  if component.attr('href')
49
50
  target = _target_attribute(component)
50
51
  extra = ' align="center" class="float-center"' if expand
51
- inner = %{<a href="#{component.attr('href')}"#{target}#{extra}>#{inner}</a>}
52
+ inner = %{<a #{attributes}href="#{component.attr('href')}"#{target}#{extra}>#{inner}</a>}
52
53
  end
53
54
  inner = "<center>#{inner}</center>" if expand
54
55
 
55
56
  classes = _combine_classes(component, 'button')
56
57
  expander = '<td class="expander"></td>' if expand
57
- %{<table class="#{classes}"><tr><td><table><tr><td>#{inner}</td></tr></table></td>#{expander}</tr></table>}
58
+ %{<table class="#{classes}"><tbody><tr><td><table><tbody><tr><td>#{inner}</td></tr></tbody></table></td>#{expander}</tr></tbody></table>}
58
59
  end
59
60
 
60
61
  def _transform_menu(component, inner)
61
62
  attributes = _combine_attributes(component, 'menu')
62
- %{<table #{attributes}><tr><td><table><tr>#{inner}</tr></table></td></tr></table>}
63
+ %{<table #{attributes}><tbody><tr><td><table><tbody><tr>#{inner}</tr></tbody></table></td></tr></tbody></table>}
63
64
  end
64
65
 
65
66
  def _transform_menu_item(component, inner)
@@ -96,12 +97,12 @@ module Inky
96
97
  subrows = component.elements.css(".row").to_a.concat(component.elements.css("row").to_a)
97
98
  expander = %{<th class="expander"></th>} if large_size.to_i == column_count && subrows.empty?
98
99
 
99
- %{<#{INTERIM_TH_TAG} class="#{classes}" #{_pass_through_attributes(component)}><table><tr><th>#{inner}</th>#{expander}</tr></table></#{INTERIM_TH_TAG}>}
100
+ %{<#{INTERIM_TH_TAG} class="#{classes}" #{_pass_through_attributes(component)}><table><tbody><tr><th>#{inner}</th>#{expander}</tr></tbody></table></#{INTERIM_TH_TAG}>}
100
101
  end
101
102
 
102
103
  def _transform_block_grid(component, inner)
103
104
  classes = _combine_classes(component, "block-grid up-#{component.attr('up')}")
104
- %{<table class="#{classes}"><tr>#{inner}</tr></table>}
105
+ %{<table class="#{classes}"><tbody><tr>#{inner}</tr></tbody></table>}
105
106
  end
106
107
 
107
108
  def _transform_center(component, _inner)
@@ -121,12 +122,12 @@ module Inky
121
122
  def _transform_callout(component, inner)
122
123
  classes = _combine_classes(component, 'callout-inner')
123
124
  attributes = _pass_through_attributes(component)
124
- %{<table #{attributes}class="callout"><tr><th class="#{classes}">#{inner}</th><th class="expander"></th></tr></table>}
125
+ %{<table #{attributes}class="callout"><tbody><tr><th class="#{classes}">#{inner}</th><th class="expander"></th></tr></tbody></table>}
125
126
  end
126
127
 
127
128
  def _transform_spacer(component, _inner)
128
129
  classes = _combine_classes(component, 'spacer')
129
- build_table = ->(size, extra) { %{<table class="#{classes} #{extra}"><tbody><tr><td height="#{size}" style="font-size:#{size}px;line-height:#{size}px;">&#xA0;</td></tr></tbody></table>} }
130
+ build_table = ->(size, extra) { %{<table class="#{classes} #{extra}"><tbody><tr><td height="#{size}" style="font-size:#{size}px;line-height:#{size}px;">&nbsp;</td></tr></tbody></table>} }
130
131
  size = component.attr('size')
131
132
  size_sm = component.attr('size-sm')
132
133
  size_lg = component.attr('size-lg')
@@ -140,9 +141,15 @@ module Inky
140
141
  end
141
142
  end
142
143
 
144
+ def _transform_h_line(component, _inner)
145
+ classes = _combine_classes(component, 'h-line')
146
+ attributes = _pass_through_attributes(component)
147
+ %{<table #{attributes}class="#{classes}"><tr><th>&nbsp;</th></tr></table>}
148
+ end
149
+
143
150
  def _transform_wrapper(component, inner)
144
151
  attributes = _combine_attributes(component, 'wrapper')
145
- %{<table #{attributes} align="center"><tr><td class="wrapper-inner">#{inner}</td></tr></table>}
152
+ %{<table #{attributes} align="center"><tbody><tr><td class="wrapper-inner">#{inner}</td></tr></tbody></table>}
146
153
  end
147
154
  end
148
155
  end
@@ -1,6 +1,6 @@
1
1
  module Inky
2
2
  module Rails
3
- VERSION = '1.3.8.0'.freeze
3
+ VERSION = '1.4.2.1'.freeze
4
4
  end
5
5
  NODE_VERSION, GEM_VERSION = Rails::VERSION.rpartition('.').map(&:freeze)
6
6
  end
data/lib/inky.rb CHANGED
@@ -20,7 +20,8 @@ module Inky
20
20
  callout: 'callout',
21
21
  spacer: 'spacer',
22
22
  wrapper: 'wrapper',
23
- menu_item: 'item'
23
+ menu_item: 'item',
24
+ h_line: 'h-line',
24
25
  }.merge(::Inky.configuration.components).merge(options[:components] || {})
25
26
 
26
27
  self.component_lookup = components.invert
@@ -31,6 +32,9 @@ module Inky
31
32
  end
32
33
 
33
34
  def release_the_kraken(html_string)
35
+ # Force conversion to string. (required for Rails 7.1+)
36
+ html_string = html_string.to_s
37
+
34
38
  if html_string.encoding.name == "ASCII-8BIT"
35
39
  html_string.force_encoding('utf-8') # transform_doc barfs if encoding is ASCII-8bit
36
40
  end
@@ -41,6 +45,7 @@ module Inky
41
45
  transform_doc(html)
42
46
  string = html.to_html
43
47
  string.gsub!(INTERIM_TH_TAG_REGEX, 'th')
48
+ string.gsub!(' ', '&nbsp;') # Convert non-breaking spaces to explicit &nbsp; entity
44
49
  Inky::Core.re_inject_raws(string, raws)
45
50
  end
46
51
 
@@ -0,0 +1,3 @@
1
+ <button foo="bar">
2
+ A label
3
+ </button>
@@ -1,3 +1,3 @@
1
- <button href="http://example.com" class="some classes" foo="bar">
1
+ <button href="http://example.com" class="some classes">
2
2
  A label
3
3
  </button>
@@ -0,0 +1,3 @@
1
+ <button href="http://example.com" foo="bar">
2
+ A label
3
+ </button>
@@ -0,0 +1 @@
1
+ <h-line/>
@@ -0,0 +1,8 @@
1
+ <!-- pending https://github.com/foundation/inky/issues/137 --->
2
+ Hello
3
+ <h-line/>
4
+ World
5
+ <h-line foo="bar"/>
6
+ Bye
7
+ <h-line class="x" foo="bar"/>
8
+ Zzz
@@ -0,0 +1,2 @@
1
+ <!-- pending https://github.com/foundation/inky/issues/137 --->
2
+ <h-line foo="bar"/>
@@ -0,0 +1,6 @@
1
+ <!-- pending https://github.com/foundation/inky/issues/135 --->
2
+ <div>
3
+ Stuff on top
4
+ <spacer foo="bar"/>
5
+ Stuff on bottom
6
+ </div>
@@ -1,5 +1,5 @@
1
1
  <div>
2
2
  Stuff on top
3
- <spacer class="some classes" foo="bar" size="42"/>
3
+ <spacer class="some classes" size="42"/>
4
4
  Stuff on bottom
5
5
  </div>
@@ -1,4 +1,4 @@
1
1
  <div>
2
2
  Stuff on top
3
- <spacer class="some classes" foo="bar" size-lg="666"/>
3
+ <spacer class="some classes" size-lg="666"/>
4
4
  <p>Stuff on bottom</p>
@@ -1,5 +1,5 @@
1
1
  <div>
2
2
  Stuff on top
3
- <spacer class="some classes" foo="bar" size-sm="42"></spacer>
3
+ <spacer class="some classes" size-sm="42"></spacer>
4
4
  Stuff on bottom
5
5
  </div>
@@ -1,5 +1,5 @@
1
1
  <div>
2
2
  Stuff on top
3
- <spacer class="some classes" foo="bar" size-sm="42" size-lg="666"/>
3
+ <spacer class="some classes" size-sm="42" size-lg="666"/>
4
4
  Stuff on bottom
5
5
  </div>
@@ -0,0 +1,6 @@
1
+ <!-- pending https://github.com/foundation/inky/issues/135 --->
2
+ <div>
3
+ Stuff on top
4
+ <spacer class="some classes" foo="bar" size-sm="42" size-lg="666"/>
5
+ Stuff on bottom
6
+ </div>
@@ -31,19 +31,19 @@ RSpec.describe "Center" do
31
31
 
32
32
  expected = <<-HTML
33
33
  <center>
34
- <table class="float-center menu " align="center">
34
+ <table class="float-center menu " align="center"><tbody>
35
35
  <tr>
36
36
  <td>
37
- <table>
37
+ <table><tbody>
38
38
  <tr>
39
39
  <th class="float-center menu-item">
40
40
  <a href="#"></a>
41
41
  </th>
42
42
  </tr>
43
- </table>
43
+ </tbody></table>
44
44
  </td>
45
45
  </tr>
46
- </table>
46
+ </tbody></table>
47
47
  </center>
48
48
  HTML
49
49
 
@@ -55,17 +55,17 @@ RSpec.describe "Button" do
55
55
  it "creates a simple button" do
56
56
  input = '<button href="http://zurb.com">Button</button>'
57
57
  expected = <<-HTML
58
- <table class="button">
58
+ <table class="button"><tbody>
59
59
  <tr>
60
60
  <td>
61
- <table>
61
+ <table><tbody>
62
62
  <tr>
63
63
  <td><a href="http://zurb.com">Button</a></td>
64
64
  </tr>
65
- </table>
65
+ </tbody></table>
66
66
  </td>
67
67
  </tr>
68
- </table>
68
+ </tbody></table>
69
69
  HTML
70
70
  compare(input, expected)
71
71
  end
@@ -73,17 +73,17 @@ RSpec.describe "Button" do
73
73
  it 'creates a button with target="_blank" attribute' do
74
74
  input = '<button href="http://zurb.com" target="_blank">Button</button>'
75
75
  expected = <<-HTML
76
- <table class="button">
76
+ <table class="button"><tbody>
77
77
  <tr>
78
78
  <td>
79
- <table>
79
+ <table><tbody>
80
80
  <tr>
81
81
  <td><a href="http://zurb.com" target="_blank">Button</a></td>
82
82
  </tr>
83
- </table>
83
+ </tbody></table>
84
84
  </td>
85
85
  </tr>
86
- </table>
86
+ </tbody></table>
87
87
  HTML
88
88
  compare(input, expected)
89
89
  end
@@ -91,17 +91,17 @@ RSpec.describe "Button" do
91
91
  it 'creates a button with classes' do
92
92
  input = '<button class="small alert" href="http://zurb.com">Button</button>'
93
93
  expected = <<-HTML
94
- <table class="button small alert">
94
+ <table class="button small alert"><tbody>
95
95
  <tr>
96
96
  <td>
97
- <table>
97
+ <table><tbody>
98
98
  <tr>
99
99
  <td><a href="http://zurb.com">Button</a></td>
100
100
  </tr>
101
- </table>
101
+ </tbody></table>
102
102
  </td>
103
103
  </tr>
104
- </table>
104
+ </tbody></table>
105
105
  HTML
106
106
 
107
107
  compare(input, expected)
@@ -110,20 +110,20 @@ RSpec.describe "Button" do
110
110
  it 'creates a correct expanded button' do
111
111
  input = '<button class="expand" href="http://zurb.com">Button</button>'
112
112
  expected = <<-HTML
113
- <table class="button expand">
113
+ <table class="button expand"><tbody>
114
114
  <tr>
115
115
  <td>
116
- <table>
116
+ <table><tbody>
117
117
  <tr>
118
118
  <td>
119
119
  <center><a href="http://zurb.com" align="center" class="float-center">Button</a></center>
120
120
  </td>
121
121
  </tr>
122
- </table>
122
+ </tbody></table>
123
123
  </td>
124
124
  <td class="expander"></td>
125
125
  </tr>
126
- </table>
126
+ </tbody></table>
127
127
  HTML
128
128
 
129
129
  compare(input, expected)
@@ -138,17 +138,17 @@ RSpec.describe "Menu" do
138
138
  </menu>
139
139
  INKY
140
140
  expected = <<-HTML
141
- <table class="menu">
141
+ <table class="menu"><tbody>
142
142
  <tr>
143
143
  <td>
144
- <table>
144
+ <table><tbody>
145
145
  <tr>
146
146
  <th class="menu-item"><a href="http://zurb.com">Item</a></th>
147
147
  </tr>
148
- </table>
148
+ </tbody></table>
149
149
  </td>
150
150
  </tr>
151
- </table>
151
+ </tbody></table>
152
152
  HTML
153
153
 
154
154
  compare(input, expected)
@@ -161,17 +161,17 @@ RSpec.describe "Menu" do
161
161
  </menu>
162
162
  INKY
163
163
  expected = <<-HTML
164
- <table class="menu">
164
+ <table class="menu"><tbody>
165
165
  <tr>
166
166
  <td>
167
- <table>
167
+ <table><tbody>
168
168
  <tr>
169
169
  <th class="menu-item"><a href="http://zurb.com" target="_blank">Item</a></th>
170
170
  </tr>
171
- </table>
171
+ </tbody></table>
172
172
  </td>
173
173
  </tr>
174
- </table>
174
+ </tbody></table>
175
175
  HTML
176
176
 
177
177
  compare(input, expected)
@@ -183,16 +183,16 @@ RSpec.describe "Menu" do
183
183
  </menu>
184
184
  INKY
185
185
  expected = <<-HTML
186
- <table class="menu vertical">
186
+ <table class="menu vertical"><tbody>
187
187
  <tr>
188
188
  <td>
189
- <table>
189
+ <table><tbody>
190
190
  <tr>
191
191
  </tr>
192
- </table>
192
+ </tbody></table>
193
193
  </td>
194
194
  </tr>
195
- </table>
195
+ </tbody></table>
196
196
  HTML
197
197
 
198
198
  compare(input, expected)
@@ -205,17 +205,17 @@ RSpec.describe "Menu" do
205
205
  </menu>
206
206
  INKY
207
207
  expected = <<-HTML
208
- <table class="menu">
208
+ <table class="menu"><tbody>
209
209
  <tr>
210
210
  <td>
211
- <table>
211
+ <table><tbody>
212
212
  <tr>
213
213
  <th class="menu-item"><a href="http://zurb.com">Item 1</a></th>
214
214
  </tr>
215
- </table>
215
+ </tbody></table>
216
216
  </td>
217
217
  </tr>
218
- </table>
218
+ </tbody></table>
219
219
  HTML
220
220
 
221
221
  compare(input, expected)
@@ -226,12 +226,12 @@ RSpec.describe "Callout" do
226
226
  it "creates a callout with correct syntax" do
227
227
  input = '<callout>Callout</callout>'
228
228
  expected = <<-HTML
229
- <table class="callout">
229
+ <table class="callout"><tbody>
230
230
  <tr>
231
231
  <th class="callout-inner">Callout</th>
232
232
  <th class="expander"></th>
233
233
  </tr>
234
- </table>
234
+ </tbody></table>
235
235
  HTML
236
236
 
237
237
  compare(input, expected)
@@ -240,12 +240,12 @@ RSpec.describe "Callout" do
240
240
  it "copies classes to the final HTML" do
241
241
  input = '<callout class="primary">Callout</callout>'
242
242
  expected = <<-HTML
243
- <table class="callout">
243
+ <table class="callout"><tbody>
244
244
  <tr>
245
245
  <th class="callout-inner primary">Callout</th>
246
246
  <th class="expander"></th>
247
247
  </tr>
248
- </table>
248
+ </tbody></table>
249
249
  HTML
250
250
 
251
251
  compare(input, expected)
@@ -259,7 +259,7 @@ RSpec.describe "Spacer" do
259
259
  <table class="spacer">
260
260
  <tbody>
261
261
  <tr>
262
- <td height="10" style="font-size:10px;line-height:10px;">&#xA0;</td>
262
+ <td height="10" style="font-size:10px;line-height:10px;">&nbsp;</td>
263
263
  </tr>
264
264
  </tbody>
265
265
  </table>
@@ -274,7 +274,7 @@ RSpec.describe "Spacer" do
274
274
  <table class="spacer hide-for-large">
275
275
  <tbody>
276
276
  <tr>
277
- <td height="10" style="font-size:10px;line-height:10px;">&#xA0;</td>
277
+ <td height="10" style="font-size:10px;line-height:10px;">&nbsp;</td>
278
278
  </tr>
279
279
  </tbody>
280
280
  </table>
@@ -289,7 +289,7 @@ RSpec.describe "Spacer" do
289
289
  <table class="spacer show-for-large">
290
290
  <tbody>
291
291
  <tr>
292
- <td height="20" style="font-size:20px;line-height:20px;">&#xA0;</td>
292
+ <td height="20" style="font-size:20px;line-height:20px;">&nbsp;</td>
293
293
  </tr>
294
294
  </tbody>
295
295
  </table>
@@ -304,14 +304,14 @@ RSpec.describe "Spacer" do
304
304
  <table class="spacer hide-for-large">
305
305
  <tbody>
306
306
  <tr>
307
- <td height="10" style="font-size:10px;line-height:10px;">&#xA0;</td>
307
+ <td height="10" style="font-size:10px;line-height:10px;">&nbsp;</td>
308
308
  </tr>
309
309
  </tbody>
310
310
  </table>
311
311
  <table class="spacer show-for-large">
312
312
  <tbody>
313
313
  <tr>
314
- <td height="20" style="font-size:20px;line-height:20px;">&#xA0;</td>
314
+ <td height="20" style="font-size:20px;line-height:20px;">&nbsp;</td>
315
315
  </tr>
316
316
  </tbody>
317
317
  </table>
@@ -326,7 +326,7 @@ RSpec.describe "Spacer" do
326
326
  <table class="spacer bgcolor">
327
327
  <tbody>
328
328
  <tr>
329
- <td height="10" style="font-size:10px;line-height:10px;">&#xA0;</td>
329
+ <td height="10" style="font-size:10px;line-height:10px;">&nbsp;</td>
330
330
  </tr>
331
331
  </tbody>
332
332
  </table>
@@ -340,11 +340,11 @@ RSpec.describe "Wrapper" do
340
340
  it 'creates a wrapper that you can attach classes to' do
341
341
  input = '<wrapper class="header"></wrapper>'
342
342
  expected = <<-HTML
343
- <table class="wrapper header" align="center">
343
+ <table class="wrapper header" align="center"><tbody>
344
344
  <tr>
345
345
  <td class="wrapper-inner"></td>
346
346
  </tr>
347
- </table>
347
+ </tbody></table>
348
348
  HTML
349
349
 
350
350
  compare(input, expected)