inky-rb 1.3.8.0 → 1.4.2.1

Sign up to get free protection for your applications and to get access to all the features.
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)