inline-style-umanni 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,37 @@
1
+ <!DOCTYPE html PUBliC "-//W3C//DTD html 4.01//EN">
2
+ <html>
3
+ <head>
4
+ <title>Examples of margins, padding, and borders</title>
5
+ <style type="text/css">
6
+
7
+ ul {
8
+ background: yellow;
9
+ margin: 12px 12px 12px 12px;
10
+ padding: 3px 3px 3px 3px;
11
+ /* No borders set */
12
+ }
13
+ li.withborder {
14
+ border-style: dashed;
15
+ border-width: medium; /* sets border width on all sides */
16
+ border-color: lime;
17
+ }
18
+ li {
19
+ color: white; /* text color is white */
20
+ background: blue; /* Content, padding will be blue */
21
+ margin: 12px 12px 12px 12px;
22
+ padding: 12px 0px 12px 12px; /* Note 0px padding right */
23
+ list-style: none /* no glyphs before a list item */
24
+ }
25
+
26
+ #A #B {
27
+ color: red;
28
+ }
29
+ </style>
30
+ </head>
31
+ <body>
32
+ <ul>
33
+ <li>First element of list</li>
34
+ <li class="withborder">Second element of list is a bit longer to illustrate wrapping.</li>
35
+ </ul>
36
+ </body>
37
+ </html>
@@ -0,0 +1,107 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta content="text/html; charset=utf-8" http-equiv="Content-type">
5
+ <title> Boletín CENART - November
6
+ </title>
7
+ <link href="/print.css?1248460539" rel="stylesheet" media="print" type="text/css">
8
+ </head>
9
+ <body style='margin: 0; padding: 0; font: 13px "Lucida Grande", Lucida, Verdana, sans-serif; width: 680px; color: #373737; margin-left: auto; margin-right: auto;'>
10
+ <div id="header" style="margin: 0; padding: 0;">
11
+ <div id="aviso" style="margin: 0; padding: 25px 0; text-align: center; color: green;">Si usted no puede visualizar correctamente este boletín haga <a href="http://localhost:3000/boletines/noviembre-2009" style="margin: 0; padding: 0; color: #185d6b;">click aquí</a>
12
+ </div>
13
+ <div id="banner" style="margin: 15px; padding: 0; text-align: right; color: #639b22;">
14
+ <span id="cenart" style="margin: 0; padding: 0; font-size: 20px;">CENART</span> Noviembre 2009</div>
15
+ </div>
16
+
17
+
18
+
19
+
20
+
21
+ <dl class="categoria" id="A" style="margin: 0; padding: 0;">
22
+ <dt style="margin: 0; padding: 10px; font-size: 20px; background-color: #416517; border-bottom: 1px dashed #a6a6a6; color: #a0bf57;">A</dt>
23
+ <dd style="margin: 0; padding: 0;">
24
+
25
+
26
+ <dl class="evento non" style="margin: 0; padding: 30px 25px 20px 35px; border-bottom: 1px dashed #a6a6a6; background-color: #d9e3cf;">
27
+ <dt style="margin: 0; padding: 0; font-size: 20px; background-color: #416517; border-bottom: 1px dashed #a6a6a6; color: #a0bf57; background: none; font-weight: bold; border: none;"><a href="" style="margin: 0; padding: 0; color: #185d6b;">1</a></dt>
28
+
29
+ <dd class="descripcion" style="margin: 10px 0; padding: 0; text-align: justify;">
30
+ <p style="margin: 10px 0; padding: 0;">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
31
+ </dd>
32
+ <dd class="fechas" style="margin: 10px 0; padding: 0; text-align: justify;">
33
+ <b style="margin: 0; padding: 0; color: #185d6b;">Fechas: </b>Fecha</dd>
34
+ <dd class="locacion" style="margin: 10px 0; padding: 0; text-align: justify;">
35
+ <b style="margin: 0; padding: 0; color: #185d6b;">Lugar: </b>Lugar</dd>
36
+ <dd class="precio" style="margin: 10px 0; padding: 0; text-align: justify;">
37
+ <b style="margin: 0; padding: 0; color: #185d6b;">Público: </b>Público</dd>
38
+ <dd class="precio" style="margin: 10px 0; padding: 0; text-align: justify;">
39
+ <b style="margin: 0; padding: 0; color: #185d6b;">Precio: </b>Precio</dd>
40
+ </dl>
41
+ </dd>
42
+ </dl>
43
+ <dl class="categoria" id="B" style="margin: 0; padding: 0;">
44
+ <dt style="margin: 0; padding: 10px; font-size: 20px; background-color: #416517; border-bottom: 1px dashed #a6a6a6; color: #a0bf57;">B</dt>
45
+ <dd style="margin: 0; padding: 0;">
46
+
47
+
48
+ <dl class="evento par" style="margin: 0; padding: 30px 25px 20px 35px; border-bottom: 1px dashed #a6a6a6; background-color: #cfdfe3;">
49
+ <dt style="margin: 0; padding: 0; font-size: 20px; background-color: #416517; border-bottom: 1px dashed #a6a6a6; color: #a0bf57; background: none; font-weight: bold; border: none;"><a href="" style="margin: 0; padding: 0; color: #185d6b;">1</a></dt>
50
+
51
+ <dd class="descripcion" style="margin: 10px 0; padding: 0; text-align: justify;">
52
+ <p style="margin: 10px 0; padding: 0;">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
53
+ </dd>
54
+ <dd class="fechas" style="margin: 10px 0; padding: 0; text-align: justify;">
55
+ <b style="margin: 0; padding: 0; color: #185d6b;">Fechas: </b>Fecha</dd>
56
+ <dd class="locacion" style="margin: 10px 0; padding: 0; text-align: justify;">
57
+ <b style="margin: 0; padding: 0; color: #185d6b;">Lugar: </b>Lugar</dd>
58
+ <dd class="precio" style="margin: 10px 0; padding: 0; text-align: justify;">
59
+ <b style="margin: 0; padding: 0; color: #185d6b;">Público: </b>Público</dd>
60
+ <dd class="precio" style="margin: 10px 0; padding: 0; text-align: justify;">
61
+ <b style="margin: 0; padding: 0; color: #185d6b;">Precio: </b>Precio</dd>
62
+ </dl>
63
+ </dd>
64
+ </dl>
65
+ <dl class="categoria" id="C" style="margin: 0; padding: 0;">
66
+ <dt style="margin: 0; padding: 10px; font-size: 20px; background-color: #416517; border-bottom: 1px dashed #a6a6a6; color: #a0bf57;">C</dt>
67
+ <dd style="margin: 0; padding: 0;">
68
+
69
+
70
+ <dl class="evento non" style="margin: 0; padding: 30px 25px 20px 35px; border-bottom: 1px dashed #a6a6a6; background-color: #d9e3cf;">
71
+ <dt style="margin: 0; padding: 0; font-size: 20px; background-color: #416517; border-bottom: 1px dashed #a6a6a6; color: #a0bf57; background: none; font-weight: bold; border: none;"><a href="" style="margin: 0; padding: 0; color: #185d6b;">1</a></dt>
72
+
73
+ <dd class="descripcion" style="margin: 10px 0; padding: 0; text-align: justify;">
74
+ <p style="margin: 10px 0; padding: 0;">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
75
+ </dd>
76
+ <dd class="fechas" style="margin: 10px 0; padding: 0; text-align: justify;">
77
+ <b style="margin: 0; padding: 0; color: #185d6b;">Fechas: </b>Fecha</dd>
78
+ <dd class="locacion" style="margin: 10px 0; padding: 0; text-align: justify;">
79
+ <b style="margin: 0; padding: 0; color: #185d6b;">Lugar: </b>Lugar</dd>
80
+ <dd class="precio" style="margin: 10px 0; padding: 0; text-align: justify;">
81
+ <b style="margin: 0; padding: 0; color: #185d6b;">Público: </b>Público</dd>
82
+ <dd class="precio" style="margin: 10px 0; padding: 0; text-align: justify;">
83
+ <b style="margin: 0; padding: 0; color: #185d6b;">Precio: </b>Precio</dd>
84
+ </dl>
85
+ </dd>
86
+ </dl>
87
+ <div id="footer" style="margin: 0; padding: 0;">
88
+ <div id="direccion" style="margin: 0; padding: 30px 25px 20px 35px;">
89
+ <b style="margin: 0; padding: 0; color: #5f792d;">lorem</b><br style="margin: 0; padding: 0;">
90
+ ipsum<br style="margin: 0; padding: 0;">
91
+ dolor<br style="margin: 0; padding: 0;">
92
+ sit<br style="margin: 0; padding: 0;">
93
+ </div>
94
+
95
+ <div id="contacto" style="margin: 0; padding: 30px 25px 20px 35px;">
96
+ contacto <br style="margin: 0; padding: 0;"><a href="mailto:mail@host.org" style="margin: 0; padding: 0; color: #185d6b; font-weight: bold; font-size: 1.2em;">mail@host.org</a>
97
+ </div>
98
+ <div id="logos" style="margin: 0; padding: 0; width: 100%; margin-top: 40px; background-image: url('/images/boletines/Noviembre/logos_fondo.jpg');">
99
+ <img src="A" id="izq" alt="A" style="margin: 30px; padding: 1px; float: left; border: none; color: red;"><img src="B" id="der" alt="B" style="margin: 0; padding: 0; float: right;"><div class="clearer" style="margin: 0; padding: 0; clear: both;">
100
+ </div>
101
+ </div>
102
+
103
+
104
+
105
+ </div>
106
+ </body>
107
+ </html>
@@ -0,0 +1,3 @@
1
+ #izq {
2
+ color: red;
3
+ }
@@ -0,0 +1,3 @@
1
+ #izq {
2
+ display: none;
3
+ }
@@ -0,0 +1,27 @@
1
+ <!DOCTYPE html PUBliC "-//W3C//DTD html 4.01//EN">
2
+ <html>
3
+ <head>
4
+ <title>Examples of margins, padding, and borders</title>
5
+ <style type="text/css">
6
+ #A #B {
7
+ color: red;
8
+ }
9
+ .cA .cB {
10
+ color: blue;
11
+ }
12
+
13
+ </style>
14
+ </head>
15
+ <body>
16
+ <div id="A">
17
+ A
18
+ <div id="B">B</div>
19
+ </div>
20
+
21
+ <div class="cA">
22
+ cA
23
+ <div class="cB">cB</div>
24
+ </div>
25
+
26
+ </body>
27
+ </html>
@@ -0,0 +1,3 @@
1
+ #izq {
2
+ margin: 30px;
3
+ }
@@ -0,0 +1,64 @@
1
+ require "#{ File.dirname __FILE__ }/spec_helper"
2
+
3
+ require 'mail'
4
+ Mail.defaults do
5
+ delivery_method :test
6
+ end
7
+ Mail.register_interceptor \
8
+ InlineStyle::Mail::Interceptor.new(:stylesheets_path => FIXTURES)
9
+
10
+ describe InlineStyle::Mail::Interceptor do
11
+
12
+ before do
13
+ Mail::TestMailer.deliveries.clear
14
+ end
15
+
16
+ it 'should inline html e-mail' do
17
+ Mail.deliver do
18
+ to 'joe@example.com'
19
+ from 'joe@example.com'
20
+ subject 'HTML e-mail'
21
+ content_type 'text/html'
22
+ body File.read("#{ FIXTURES }/boletin.html")
23
+ end
24
+
25
+ Mail::TestMailer.deliveries.first.body.to_s.
26
+ should == File.read("#{ FIXTURES }/inline.html")
27
+ end
28
+
29
+ it 'should not inline non-html' do
30
+ Mail.deliver do
31
+ to 'joe@example.com'
32
+ from 'joe@example.com'
33
+ subject 'Plain text e-mail (with HTML looking content)'
34
+ content_type 'text/plain'
35
+ body File.read("#{ FIXTURES }/boletin.html")
36
+ end
37
+
38
+ Mail::TestMailer.deliveries.first.body.to_s.
39
+ should == File.read("#{ FIXTURES }/boletin.html")
40
+ end
41
+
42
+ it 'should inline html part of multipart/alternative' do
43
+ Mail.deliver do
44
+ to 'joe@example.com'
45
+ from 'joe@example.com'
46
+ subject 'Multipart/alternative e-mail'
47
+ text_part do
48
+ body File.read("#{ FIXTURES }/boletin.html")
49
+ end
50
+ html_part do
51
+ content_type 'text/html; charset=UTF-8'
52
+ body File.read("#{ FIXTURES }/boletin.html")
53
+ end
54
+ end
55
+
56
+ Mail::TestMailer.deliveries.first.parts[0].body.to_s.
57
+ should == File.read("#{ FIXTURES }/boletin.html")
58
+
59
+ Mail::TestMailer.deliveries.first.parts[1].body.to_s.
60
+ should == File.read("#{ FIXTURES }/inline.html")
61
+ end
62
+
63
+ end
64
+
@@ -0,0 +1,60 @@
1
+ require "spec_helper"
2
+ require "inline-style/rack-middleware"
3
+
4
+ describe InlineStyle::Rack::Middleware do
5
+ def get_response path, body, opts = {}
6
+ content_type = opts.delete(:content_type) || 'text/html'
7
+ app = Rack::Builder.new do
8
+ use InlineStyle::Rack::Middleware, opts
9
+ run lambda { |env| env['DOCUMENT_ROOT'] = FIXTURES; [200, {'Content-Type' => content_type}, [body]] }
10
+ end
11
+ Nokogiri.HTML Rack::MockRequest.new(app).get(path).body
12
+ end
13
+
14
+ before do
15
+ @html = File.read("#{ FIXTURES }/boletin.html")
16
+ end
17
+
18
+ it "should inline css" do
19
+ get_response('/', @html, :stylesheets_path => FIXTURES).should have_inline_style_for('#A')
20
+ end
21
+
22
+ it "should use external css" do
23
+ get_response('/', @html, :stylesheets_path => FIXTURES).css('#izq').first['style'].should match_style /margin: 30.0px/
24
+ end
25
+
26
+ describe 'Path inclusion' do
27
+ it "should inline style for string path" do
28
+ paths = "/some/path"
29
+ get_response('/some/path', @html, :stylesheets_path => FIXTURES, :paths => paths).should have_inline_style_for('#A')
30
+ end
31
+
32
+ it "should not inline style for string path" do
33
+ paths = "/some/path"
34
+ get_response('/some/other/path', @html, :stylesheets_path => FIXTURES, :paths => paths).should_not have_inline_style_for('#A')
35
+ end
36
+
37
+ it "should inline style for regexp path" do
38
+ paths = %r{/some/.*}
39
+ get_response('/some/path', @html, :stylesheets_path => FIXTURES, :paths => paths).should have_inline_style_for('#A')
40
+ get_response('/some/other/path', @html, :stylesheets_path => FIXTURES, :paths => paths).should have_inline_style_for('#A')
41
+ end
42
+
43
+ it "should not inline style for regexp path" do
44
+ paths = %r{/some/.*}
45
+ get_response('/other/path', @html, :stylesheets_path => FIXTURES, :paths => paths).should_not have_inline_style_for('#A')
46
+ end
47
+
48
+ it "should inline style for array regexp path" do
49
+ paths = [%r{/some/path}, %r{/some/other/path}]
50
+ get_response('/some/path', @html, :stylesheets_path => FIXTURES, :paths => paths).should have_inline_style_for('#A')
51
+ get_response('/some/other/path', @html, :stylesheets_path => FIXTURES, :paths => paths).should have_inline_style_for('#A')
52
+ end
53
+
54
+ it "should not inline style for array regexp path" do
55
+ paths = [%r{/some/path}, %r{/some/other/path}]
56
+ get_response('/path', @html, :stylesheets_path => FIXTURES, :paths => paths).should_not have_inline_style_for('#A')
57
+ get_response('/other/path', @html, :stylesheets_path => FIXTURES, :paths => paths).should_not have_inline_style_for('#A')
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,62 @@
1
+ require 'rubygems'
2
+ require 'rspec'
3
+ require 'rack'
4
+ require 'rack/mock'
5
+
6
+ require "inline-style"
7
+ require "inline-style/csspool_wrapper"
8
+
9
+ gem 'maca-fork-csspool'
10
+ require "csspool"
11
+
12
+ FIXTURES = "#{File.dirname __FILE__}/fixtures"
13
+
14
+ module InlineStyleMatchers
15
+ class HaveInlineStyle
16
+ def initialize selector
17
+ @selector = selector
18
+ end
19
+
20
+ def matches? html
21
+ @html = html
22
+ !@html.css(@selector).empty? and @html.css(@selector).inject(true){ |bool, e| bool and !e['style'].nil? }
23
+ end
24
+
25
+ def failure_message
26
+ "expected elements with selector #{@selector} style attribute not to be nil"
27
+ end
28
+
29
+ def negative_failure_message
30
+ "expected elements with selector #{@selector} style attribute to be nil"
31
+ end
32
+ end
33
+
34
+ class MatchStyle
35
+ def initialize style
36
+ @style = style
37
+ end
38
+
39
+ def matches? actual
40
+ @actual = actual.gsub(/([^\.0-9]\d+)(px|;|%|\s)/, '\1.0\2')
41
+ @actual =~ @style
42
+ end
43
+
44
+ def failure_message
45
+ "expected #{@actual} to match #{@style}"
46
+ end
47
+
48
+ def negative_failure_message
49
+ "expected #{@actual} not to match #{@style}"
50
+ end
51
+ end
52
+
53
+ def have_inline_style_for selector
54
+ HaveInlineStyle.new selector
55
+ end
56
+
57
+ def match_style style
58
+ MatchStyle.new style
59
+ end
60
+ end
61
+
62
+ RSpec.configure { |config| config.include InlineStyleMatchers }
metadata ADDED
@@ -0,0 +1,153 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: inline-style-umanni
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Umanni
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-07-23 00:00:00.000000000 -03:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rspec
17
+ requirement: &18402900 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: *18402900
26
+ - !ruby/object:Gem::Dependency
27
+ name: rack
28
+ requirement: &18402460 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: *18402460
37
+ - !ruby/object:Gem::Dependency
38
+ name: rspec-core
39
+ requirement: &18401900 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *18401900
48
+ - !ruby/object:Gem::Dependency
49
+ name: mail
50
+ requirement: &18401480 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: *18401480
59
+ - !ruby/object:Gem::Dependency
60
+ name: nokogiri
61
+ requirement: &18400980 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ type: :runtime
68
+ prerelease: false
69
+ version_requirements: *18400980
70
+ - !ruby/object:Gem::Dependency
71
+ name: css_parser
72
+ requirement: &18384540 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ type: :runtime
79
+ prerelease: false
80
+ version_requirements: *18384540
81
+ - !ruby/object:Gem::Dependency
82
+ name: maca-fork-csspool
83
+ requirement: &18384060 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: *18384060
92
+ description: Inlines CSS for html email delivery
93
+ email:
94
+ - ygor@umanni.com
95
+ executables: []
96
+ extensions: []
97
+ extra_rdoc_files: []
98
+ files:
99
+ - .gitignore
100
+ - .rspec
101
+ - Gemfile
102
+ - Gemfile.lock
103
+ - README.rdoc
104
+ - Rakefile
105
+ - example.rb
106
+ - inline-style.gemspec
107
+ - lib/inline-style.rb
108
+ - lib/inline-style/css_parser_wrapper.rb
109
+ - lib/inline-style/csspool_wrapper.rb
110
+ - lib/inline-style/mail-interceptor.rb
111
+ - lib/inline-style/rack-middleware.rb
112
+ - lib/inline-style/rule.rb
113
+ - lib/inline-style/version.rb
114
+ - spec/css_inlining_spec.rb
115
+ - spec/css_parsing_spec.rb
116
+ - spec/fixtures/all.css
117
+ - spec/fixtures/boletin.html
118
+ - spec/fixtures/box-model.html
119
+ - spec/fixtures/inline.html
120
+ - spec/fixtures/none.css
121
+ - spec/fixtures/print.css
122
+ - spec/fixtures/selectors.html
123
+ - spec/fixtures/style.css
124
+ - spec/interceptor_spec.rb
125
+ - spec/rack_middleware_spec.rb
126
+ - spec/spec_helper.rb
127
+ has_rdoc: true
128
+ homepage: ''
129
+ licenses: []
130
+ post_install_message: Please read documentation for changes on the default css parser
131
+ gem, specifically if you use csspool
132
+ rdoc_options: []
133
+ require_paths:
134
+ - lib
135
+ required_ruby_version: !ruby/object:Gem::Requirement
136
+ none: false
137
+ requirements:
138
+ - - ! '>='
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ required_rubygems_version: !ruby/object:Gem::Requirement
142
+ none: false
143
+ requirements:
144
+ - - ! '>='
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ requirements: []
148
+ rubyforge_project:
149
+ rubygems_version: 1.6.2
150
+ signing_key:
151
+ specification_version: 3
152
+ summary: Inlines CSS for html email delivery
153
+ test_files: []