premailer 1.7.9 → 1.8.0
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.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/Gemfile +1 -1
- data/lib/premailer.rb +0 -1
- data/lib/premailer/adapter/hpricot.rb +5 -7
- data/lib/premailer/adapter/nokogiri.rb +9 -11
- data/lib/premailer/executor.rb +3 -1
- data/lib/premailer/premailer.rb +8 -4
- data/lib/premailer/version.rb +1 -1
- data/premailer.gemspec +1 -1
- data/test/helper.rb +3 -0
- data/test/test_misc.rb +76 -30
- metadata +33 -53
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bd6a0eccd0fddd3ad53178ee0b715c3d1b770491
|
4
|
+
data.tar.gz: 5768d084e017e213f46ae790ecc6003f9eb82573
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bc9b3bb5aa1ca359b15a45aec3f51b7ae9375483353f76d6a2ace0463a7b5d857721f10b3149f08adbf586cb6f2007271900933afdaac6d95d5e2bc625cc2c5b
|
7
|
+
data.tar.gz: 2939cfd440e8f10c2bba6f685bc0f538930b0c97532ff2f1cc3ccbe96ba22c4137821c918a80690693bf5aa0c6afbe3353204cbb01afc30f099466b952e0c20d
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/lib/premailer.rb
CHANGED
@@ -18,15 +18,15 @@ class Premailer
|
|
18
18
|
end
|
19
19
|
|
20
20
|
# Iterate through the rules and merge them into the HTML
|
21
|
-
@css_parser.each_selector(:all) do |selector, declaration, specificity|
|
21
|
+
@css_parser.each_selector(:all) do |selector, declaration, specificity, media_types|
|
22
22
|
# Save un-mergable rules separately
|
23
23
|
selector.gsub!(/:link([\s]*)+/i) {|m| $1 }
|
24
24
|
|
25
25
|
# Convert element names to lower case
|
26
26
|
selector.gsub!(/([\s]|^)([\w]+)/) {|m| $1.to_s + $2.to_s.downcase }
|
27
27
|
|
28
|
-
if selector =~ Premailer::RE_UNMERGABLE_SELECTORS
|
29
|
-
@unmergable_rules.add_rule_set!(CssParser::RuleSet.new(selector, declaration)) unless @options[:preserve_styles]
|
28
|
+
if Premailer.is_media_query?(media_types) || selector =~ Premailer::RE_UNMERGABLE_SELECTORS
|
29
|
+
@unmergable_rules.add_rule_set!(CssParser::RuleSet.new(selector, declaration), media_types) unless @options[:preserve_styles]
|
30
30
|
else
|
31
31
|
begin
|
32
32
|
if selector =~ Premailer::RE_RESET_SELECTORS
|
@@ -75,6 +75,7 @@ class Premailer
|
|
75
75
|
# Perform style folding
|
76
76
|
merged = CssParser.merge(declarations)
|
77
77
|
merged.expand_shorthand!
|
78
|
+
merged.create_shorthand!
|
78
79
|
|
79
80
|
# Duplicate CSS attributes as HTML attributes
|
80
81
|
if Premailer::RELATED_ATTRIBUTES.has_key?(el.name)
|
@@ -132,10 +133,7 @@ class Premailer
|
|
132
133
|
#
|
133
134
|
# @return [::Hpricot] a document.
|
134
135
|
def write_unmergable_css_rules(doc, unmergable_rules) # :nodoc:
|
135
|
-
styles =
|
136
|
-
unmergable_rules.each_selector(:all, :force_important => true) do |selector, declarations, specificity|
|
137
|
-
styles += "#{selector} { #{declarations} }\n"
|
138
|
-
end
|
136
|
+
styles = unmergable_rules.to_s
|
139
137
|
|
140
138
|
unless styles.empty?
|
141
139
|
style_tag = "\n<style type=\"text/css\">\n#{styles}</style>\n"
|
@@ -19,15 +19,15 @@ class Premailer
|
|
19
19
|
end
|
20
20
|
|
21
21
|
# Iterate through the rules and merge them into the HTML
|
22
|
-
@css_parser.each_selector(:all) do |selector, declaration, specificity|
|
22
|
+
@css_parser.each_selector(:all) do |selector, declaration, specificity, media_types|
|
23
23
|
# Save un-mergable rules separately
|
24
24
|
selector.gsub!(/:link([\s]*)+/i) {|m| $1 }
|
25
25
|
|
26
26
|
# Convert element names to lower case
|
27
27
|
selector.gsub!(/([\s]|^)([\w]+)/) {|m| $1.to_s + $2.to_s.downcase }
|
28
28
|
|
29
|
-
if selector =~ Premailer::RE_UNMERGABLE_SELECTORS
|
30
|
-
@unmergable_rules.add_rule_set!(CssParser::RuleSet.new(selector, declaration)) unless @options[:preserve_styles]
|
29
|
+
if Premailer.is_media_query?(media_types) || selector =~ Premailer::RE_UNMERGABLE_SELECTORS
|
30
|
+
@unmergable_rules.add_rule_set!(CssParser::RuleSet.new(selector, declaration), media_types) unless @options[:preserve_styles]
|
31
31
|
else
|
32
32
|
begin
|
33
33
|
if selector =~ Premailer::RE_RESET_SELECTORS
|
@@ -80,6 +80,9 @@ class Premailer
|
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
83
|
+
# Collapse multiple rules into one as much as possible.
|
84
|
+
merged.create_shorthand!
|
85
|
+
|
83
86
|
# write the inline STYLE attribute
|
84
87
|
el['style'] = Premailer.escape_string(merged.declarations_to_s).split(';').map(&:strip).sort.join('; ')
|
85
88
|
end
|
@@ -131,16 +134,11 @@ class Premailer
|
|
131
134
|
#
|
132
135
|
# @return [::Nokogiri::XML] a document.
|
133
136
|
def write_unmergable_css_rules(doc, unmergable_rules) # :nodoc:
|
134
|
-
styles =
|
135
|
-
unmergable_rules.each_selector(:all, :force_important => true) do |selector, declarations, specificity|
|
136
|
-
styles += "#{selector} { #{declarations} }\n"
|
137
|
-
end
|
137
|
+
styles = unmergable_rules.to_s
|
138
138
|
|
139
139
|
unless styles.empty?
|
140
140
|
style_tag = "<style type=\"text/css\">\n#{styles}</style>"
|
141
|
-
if
|
142
|
-
doc.at_css('head').add_child(::Nokogiri::XML.fragment(style_tag))
|
143
|
-
elsif body = doc.search('body')
|
141
|
+
if body = doc.search('body')
|
144
142
|
if doc.at_css('body').children && !doc.at_css('body').children.empty?
|
145
143
|
doc.at_css('body').children.before(::Nokogiri::XML.fragment(style_tag))
|
146
144
|
else
|
@@ -230,7 +228,7 @@ class Premailer
|
|
230
228
|
child.swap(child.text()) if child.cdata?
|
231
229
|
end
|
232
230
|
|
233
|
-
|
231
|
+
doc
|
234
232
|
end
|
235
233
|
|
236
234
|
end
|
data/lib/premailer/executor.rb
CHANGED
@@ -77,9 +77,11 @@ $stderr.puts "Processing in #{mode} mode with options #{options.inspect}" if opt
|
|
77
77
|
premailer = nil
|
78
78
|
input = nil
|
79
79
|
|
80
|
-
if
|
80
|
+
if ARGV.size > 0
|
81
|
+
# Executed via command line or shell script
|
81
82
|
input = ARGV.shift
|
82
83
|
else
|
84
|
+
# Called in piped command
|
83
85
|
input = $stdin.read
|
84
86
|
options[:with_html_string] = true
|
85
87
|
end
|
data/lib/premailer/premailer.rb
CHANGED
@@ -178,12 +178,12 @@ class Premailer
|
|
178
178
|
# @option options [Boolean] :remove_comments Remove html comments. Default is false.
|
179
179
|
# @option options [Boolean] :remove_scripts Remove <tt>script</tt> elements. Default is true.
|
180
180
|
# @option options [Boolean] :preserve_styles Whether to preserve any <tt>link rel=stylesheet</tt> and <tt>style</tt> elements. Default is false.
|
181
|
-
# @option options [Boolean] :preserve_reset Whether to preserve styles associated with the MailChimp reset code.
|
182
|
-
# @option options [Boolean] :with_html_string Whether the html param should be treated as a raw string.
|
181
|
+
# @option options [Boolean] :preserve_reset Whether to preserve styles associated with the MailChimp reset code. Default is true.
|
182
|
+
# @option options [Boolean] :with_html_string Whether the html param should be treated as a raw string. Default is false.
|
183
183
|
# @option options [Boolean] :verbose Whether to print errors and warnings to <tt>$stderr</tt>. Default is false.
|
184
184
|
# @option options [Boolean] :include_link_tags Whether to include css from <tt>link rel=stylesheet</tt> tags. Default is true.
|
185
185
|
# @option options [Boolean] :include_style_tags Whether to include css from <tt>style</tt> tags. Default is true.
|
186
|
-
# @option options [String] :input_encoding Manually specify the source documents encoding. This is a good idea.
|
186
|
+
# @option options [String] :input_encoding Manually specify the source documents encoding. This is a good idea. Default is ASCII-8BIT.
|
187
187
|
# @option options [Boolean] :replace_html_entities Convert HTML entities to actual characters. Default is false.
|
188
188
|
# @option options [Symbol] :adapter Which HTML parser to use, either <tt>:nokogiri</tt> or <tt>:hpricot</tt>. Default is <tt>:hpricot</tt>.
|
189
189
|
def initialize(html, options = {})
|
@@ -455,6 +455,10 @@ public
|
|
455
455
|
doc
|
456
456
|
end
|
457
457
|
|
458
|
+
# @private
|
459
|
+
def self.is_media_query?(media_types)
|
460
|
+
media_types && media_types.any?{|mt| mt.to_s.count('()') >= 2 }
|
461
|
+
end
|
458
462
|
|
459
463
|
# @private
|
460
464
|
def self.escape_string(str) # :nodoc:
|
@@ -548,7 +552,7 @@ public
|
|
548
552
|
end
|
549
553
|
end
|
550
554
|
|
551
|
-
|
555
|
+
warnings
|
552
556
|
end
|
553
557
|
end
|
554
558
|
|
data/lib/premailer/version.rb
CHANGED
data/premailer.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.files = `git ls-files`.split("\n")
|
19
19
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
20
20
|
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
21
|
-
s.add_dependency('css_parser', '>= 1.
|
21
|
+
s.add_dependency('css_parser', '>= 1.3.5')
|
22
22
|
s.add_dependency('htmlentities', '>= 4.0.0')
|
23
23
|
s.add_development_dependency "bundler", "~> 1.3"
|
24
24
|
s.add_development_dependency('rake', ['~> 0.8', '!= 0.9.0'])
|
data/test/helper.rb
CHANGED
@@ -19,6 +19,9 @@ class Premailer::TestCase < Test::Unit::TestCase
|
|
19
19
|
{ :status => 404, :body => "#{file_path} not found" }
|
20
20
|
end
|
21
21
|
end
|
22
|
+
|
23
|
+
stub_request(:get, /my\.example\.com\:8080\/*/)
|
24
|
+
.to_return(:status => 200, :body => "", :headers => {})
|
22
25
|
end
|
23
26
|
|
24
27
|
def default_test; end
|
data/test/test_misc.rb
CHANGED
@@ -20,10 +20,10 @@ class TestMisc < Premailer::TestCase
|
|
20
20
|
|
21
21
|
def test_styles_in_the_body
|
22
22
|
html = <<END_HTML
|
23
|
-
<html>
|
24
|
-
<body>
|
23
|
+
<html>
|
24
|
+
<body>
|
25
25
|
<style type="text/css"> p { color: red; } </style>
|
26
|
-
<p>Test</p>
|
26
|
+
<p>Test</p>
|
27
27
|
</body>
|
28
28
|
</html>
|
29
29
|
END_HTML
|
@@ -33,13 +33,13 @@ END_HTML
|
|
33
33
|
|
34
34
|
assert_match /color\: red/i, premailer.processed_doc.at('p')['style']
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
def test_commented_out_styles_in_the_body
|
38
38
|
html = <<END_HTML
|
39
|
-
<html>
|
40
|
-
<body>
|
39
|
+
<html>
|
40
|
+
<body>
|
41
41
|
<style type="text/css"> <!-- p { color: red; } --> </style>
|
42
|
-
<p>Test</p>
|
42
|
+
<p>Test</p>
|
43
43
|
</body>
|
44
44
|
</html>
|
45
45
|
END_HTML
|
@@ -52,13 +52,13 @@ END_HTML
|
|
52
52
|
|
53
53
|
def test_not_applying_styles_to_the_head
|
54
54
|
html = <<END_HTML
|
55
|
-
<html>
|
55
|
+
<html>
|
56
56
|
<head>
|
57
57
|
<title>Title</title>
|
58
58
|
<style type="text/css"> * { color: red; } </style>
|
59
59
|
</head>
|
60
|
-
<body>
|
61
|
-
<p><a>Test</a></p>
|
60
|
+
<body>
|
61
|
+
<p><a>Test</a></p>
|
62
62
|
</body>
|
63
63
|
</html>
|
64
64
|
END_HTML
|
@@ -77,13 +77,13 @@ END_HTML
|
|
77
77
|
|
78
78
|
def test_multiple_identical_ids
|
79
79
|
html = <<-END_HTML
|
80
|
-
<html>
|
80
|
+
<html>
|
81
81
|
<head>
|
82
82
|
<style type="text/css"> #the_id { color: red; } </style>
|
83
83
|
</head>
|
84
|
-
<body>
|
85
|
-
<p id="the_id">Test</p>
|
86
|
-
<p id="the_id">Test</p>
|
84
|
+
<body>
|
85
|
+
<p id="the_id">Test</p>
|
86
|
+
<p id="the_id">Test</p>
|
87
87
|
</body>
|
88
88
|
</html>
|
89
89
|
END_HTML
|
@@ -97,13 +97,13 @@ END_HTML
|
|
97
97
|
|
98
98
|
def test_preserving_styles
|
99
99
|
html = <<END_HTML
|
100
|
-
<html>
|
100
|
+
<html>
|
101
101
|
<head>
|
102
102
|
<link rel="stylesheet" href="#"/>
|
103
103
|
<style type="text/css"> a:hover { color: red; } </style>
|
104
104
|
</head>
|
105
|
-
<body>
|
106
|
-
<p><a>Test</a></p>
|
105
|
+
<body>
|
106
|
+
<p><a>Test</a></p>
|
107
107
|
</body>
|
108
108
|
</html>
|
109
109
|
END_HTML
|
@@ -118,27 +118,72 @@ END_HTML
|
|
118
118
|
assert_nil premailer.processed_doc.at('body link')
|
119
119
|
|
120
120
|
# should be preserved as unmergeable
|
121
|
-
|
121
|
+
|
122
|
+
assert_match /red !important/i, premailer.processed_doc.at('body style').inner_html
|
123
|
+
|
124
|
+
assert_match /a:hover/i, premailer.processed_doc.at('style').inner_html
|
125
|
+
|
122
126
|
end
|
123
127
|
end
|
124
128
|
|
125
129
|
def test_unmergable_rules
|
126
130
|
html = <<END_HTML
|
127
131
|
<html> <head> <style type="text/css"> a { color:blue; } a:hover { color: red; } </style> </head>
|
128
|
-
<p><a>Test</a></p>
|
132
|
+
<p><a>Test</a></p>
|
129
133
|
</body> </html>
|
130
134
|
END_HTML
|
131
135
|
|
132
136
|
premailer = Premailer.new(html, :with_html_string => true, :verbose => true)
|
133
137
|
premailer.to_inline_css
|
134
|
-
|
138
|
+
|
139
|
+
assert_match /a\:hover[\s]*\{[\s]*color\:[\s]*red[\s]*!important;[\s]*\}/i, premailer.processed_doc.at('body style').inner_html
|
140
|
+
|
141
|
+
assert_match /a\:hover[\s]*\{[\s]*color\:[\s]*red;[\s]*\}/i, premailer.processed_doc.at('body style').inner_html
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_unmergable_media_queries
|
145
|
+
html = <<END_HTML
|
146
|
+
<html> <head>
|
147
|
+
<style type="text/css">
|
148
|
+
a { color: blue; }
|
149
|
+
@media (min-width:500px) {
|
150
|
+
a { color: red; }
|
151
|
+
}
|
152
|
+
@media screen and (orientation: portrait) {
|
153
|
+
a { color: green; }
|
154
|
+
}
|
155
|
+
</style>
|
156
|
+
</head>
|
157
|
+
<body>
|
158
|
+
<p><a>Test</a></p>
|
159
|
+
</body> </html>
|
160
|
+
END_HTML
|
161
|
+
|
162
|
+
[:nokogiri, :hpricot].each do |adapter|
|
163
|
+
puts "------- Testing adapter #{adapter}"
|
164
|
+
premailer = Premailer.new(html, :with_html_string => true, :adapter => adapter)
|
165
|
+
puts premailer.to_inline_css
|
166
|
+
|
167
|
+
style_tag = premailer.processed_doc.at('body style')
|
168
|
+
assert style_tag, "#{adapter} failed to add a body style tag"
|
169
|
+
|
170
|
+
style_tag_contents = style_tag.inner_html
|
171
|
+
|
172
|
+
assert_equal "color: blue", premailer.processed_doc.at('a').attributes['style'].to_s,
|
173
|
+
"#{adapter}: Failed to inline the default style"
|
174
|
+
assert_match /@media \(min-width:500px\) {.*?a {.*?color: red;.*?}.*?}/m, style_tag_contents,
|
175
|
+
"#{adapter}: Failed to add media query with no type to style"
|
176
|
+
assert_match /@media screen and \(orientation: portrait\) {.*?a {.*?color: green;.*?}.*?}/m, style_tag_contents,
|
177
|
+
"#{adapter}: Failed to add media query with type to style"
|
178
|
+
end
|
179
|
+
|
135
180
|
end
|
136
181
|
|
137
182
|
def test_unmergable_rules_with_no_body
|
138
183
|
html = <<END_HTML
|
139
|
-
<html>
|
184
|
+
<html>
|
140
185
|
<style type="text/css"> a:hover { color: red; } </style>
|
141
|
-
<p><a>Test</a></p>
|
186
|
+
<p><a>Test</a></p>
|
142
187
|
</html>
|
143
188
|
END_HTML
|
144
189
|
|
@@ -146,7 +191,7 @@ END_HTML
|
|
146
191
|
assert_nothing_raised do
|
147
192
|
premailer.to_inline_css
|
148
193
|
end
|
149
|
-
assert_match /red
|
194
|
+
assert_match /a\:hover[\s]*\{[\s]*color\:[\s]*red;[\s]*\}/i, premailer.processed_doc.at('style').inner_html
|
150
195
|
end
|
151
196
|
|
152
197
|
# in response to https://github.com/alexdunae/premailer/issues#issue/7
|
@@ -173,9 +218,9 @@ END_HTML
|
|
173
218
|
def test_parsing_bad_markup_around_tables
|
174
219
|
html = <<END_HTML
|
175
220
|
<html>
|
176
|
-
<style type="text/css">
|
221
|
+
<style type="text/css">
|
177
222
|
.style3 { font-size: xx-large; }
|
178
|
-
.style5 { background-color: #000080; }
|
223
|
+
.style5 { background-color: #000080; }
|
179
224
|
</style>
|
180
225
|
<tr>
|
181
226
|
<td valign="top" class="style3">
|
@@ -191,14 +236,14 @@ END_HTML
|
|
191
236
|
premailer = Premailer.new(html, :with_html_string => true)
|
192
237
|
premailer.to_inline_css
|
193
238
|
assert_match /font-size: xx-large/, premailer.processed_doc.search('.style3').first.attributes['style'].to_s
|
194
|
-
assert_match /background
|
239
|
+
assert_match /background: #000080/, premailer.processed_doc.search('.style5').first.attributes['style'].to_s
|
195
240
|
end
|
196
241
|
|
197
242
|
# in response to https://github.com/alexdunae/premailer/issues/56
|
198
243
|
def test_inline_important
|
199
244
|
html = <<END_HTML
|
200
245
|
<html>
|
201
|
-
<style type="text/css">
|
246
|
+
<style type="text/css">
|
202
247
|
p { color: red !important; }
|
203
248
|
</style>
|
204
249
|
<body>
|
@@ -216,10 +261,10 @@ END_HTML
|
|
216
261
|
def test_handling_shorthand_auto_properties
|
217
262
|
html = <<END_HTML
|
218
263
|
<html>
|
219
|
-
<style type="text/css">
|
264
|
+
<style type="text/css">
|
220
265
|
#page { margin: 0; margin-left: auto; margin-right: auto; }
|
221
266
|
p { border: 1px solid black; border-right: none; }
|
222
|
-
|
267
|
+
|
223
268
|
</style>
|
224
269
|
<body>
|
225
270
|
<div id='page'><p>test</p></div>
|
@@ -229,7 +274,8 @@ END_HTML
|
|
229
274
|
|
230
275
|
premailer = Premailer.new(html, :with_html_string => true)
|
231
276
|
premailer.to_inline_css
|
232
|
-
|
277
|
+
|
278
|
+
assert_match /margin: 0 auto/, premailer.processed_doc.search('#page').first.attributes['style'].to_s
|
233
279
|
assert_match /border-style: solid none solid solid;/, premailer.processed_doc.search('p').first.attributes['style'].to_s
|
234
280
|
end
|
235
281
|
|
metadata
CHANGED
@@ -1,164 +1,145 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: premailer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
5
|
-
prerelease:
|
4
|
+
version: 1.8.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Alex Dunae
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-01-14 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: css_parser
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1.
|
19
|
+
version: 1.3.5
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: 1.
|
26
|
+
version: 1.3.5
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: htmlentities
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ">="
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: 4.0.0
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ">="
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: 4.0.0
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: bundler
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- - ~>
|
45
|
+
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '1.3'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- - ~>
|
52
|
+
- - "~>"
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '1.3'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rake
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- - ~>
|
59
|
+
- - "~>"
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0.8'
|
70
|
-
- -
|
62
|
+
- - "!="
|
71
63
|
- !ruby/object:Gem::Version
|
72
64
|
version: 0.9.0
|
73
65
|
type: :development
|
74
66
|
prerelease: false
|
75
67
|
version_requirements: !ruby/object:Gem::Requirement
|
76
|
-
none: false
|
77
68
|
requirements:
|
78
|
-
- - ~>
|
69
|
+
- - "~>"
|
79
70
|
- !ruby/object:Gem::Version
|
80
71
|
version: '0.8'
|
81
|
-
- -
|
72
|
+
- - "!="
|
82
73
|
- !ruby/object:Gem::Version
|
83
74
|
version: 0.9.0
|
84
75
|
- !ruby/object:Gem::Dependency
|
85
76
|
name: hpricot
|
86
77
|
requirement: !ruby/object:Gem::Requirement
|
87
|
-
none: false
|
88
78
|
requirements:
|
89
|
-
- -
|
79
|
+
- - ">="
|
90
80
|
- !ruby/object:Gem::Version
|
91
81
|
version: 0.8.3
|
92
82
|
type: :development
|
93
83
|
prerelease: false
|
94
84
|
version_requirements: !ruby/object:Gem::Requirement
|
95
|
-
none: false
|
96
85
|
requirements:
|
97
|
-
- -
|
86
|
+
- - ">="
|
98
87
|
- !ruby/object:Gem::Version
|
99
88
|
version: 0.8.3
|
100
89
|
- !ruby/object:Gem::Dependency
|
101
90
|
name: nokogiri
|
102
91
|
requirement: !ruby/object:Gem::Requirement
|
103
|
-
none: false
|
104
92
|
requirements:
|
105
|
-
- -
|
93
|
+
- - ">="
|
106
94
|
- !ruby/object:Gem::Version
|
107
95
|
version: 1.4.4
|
108
96
|
type: :development
|
109
97
|
prerelease: false
|
110
98
|
version_requirements: !ruby/object:Gem::Requirement
|
111
|
-
none: false
|
112
99
|
requirements:
|
113
|
-
- -
|
100
|
+
- - ">="
|
114
101
|
- !ruby/object:Gem::Version
|
115
102
|
version: 1.4.4
|
116
103
|
- !ruby/object:Gem::Dependency
|
117
104
|
name: yard
|
118
105
|
requirement: !ruby/object:Gem::Requirement
|
119
|
-
none: false
|
120
106
|
requirements:
|
121
|
-
- - ~>
|
107
|
+
- - "~>"
|
122
108
|
- !ruby/object:Gem::Version
|
123
109
|
version: 0.8.7
|
124
110
|
type: :development
|
125
111
|
prerelease: false
|
126
112
|
version_requirements: !ruby/object:Gem::Requirement
|
127
|
-
none: false
|
128
113
|
requirements:
|
129
|
-
- - ~>
|
114
|
+
- - "~>"
|
130
115
|
- !ruby/object:Gem::Version
|
131
116
|
version: 0.8.7
|
132
117
|
- !ruby/object:Gem::Dependency
|
133
118
|
name: redcarpet
|
134
119
|
requirement: !ruby/object:Gem::Requirement
|
135
|
-
none: false
|
136
120
|
requirements:
|
137
|
-
- - ~>
|
121
|
+
- - "~>"
|
138
122
|
- !ruby/object:Gem::Version
|
139
123
|
version: '3.0'
|
140
124
|
type: :development
|
141
125
|
prerelease: false
|
142
126
|
version_requirements: !ruby/object:Gem::Requirement
|
143
|
-
none: false
|
144
127
|
requirements:
|
145
|
-
- - ~>
|
128
|
+
- - "~>"
|
146
129
|
- !ruby/object:Gem::Version
|
147
130
|
version: '3.0'
|
148
131
|
- !ruby/object:Gem::Dependency
|
149
132
|
name: yard-redcarpet-ext
|
150
133
|
requirement: !ruby/object:Gem::Requirement
|
151
|
-
none: false
|
152
134
|
requirements:
|
153
|
-
- - ~>
|
135
|
+
- - "~>"
|
154
136
|
- !ruby/object:Gem::Version
|
155
137
|
version: 0.0.3
|
156
138
|
type: :development
|
157
139
|
prerelease: false
|
158
140
|
version_requirements: !ruby/object:Gem::Requirement
|
159
|
-
none: false
|
160
141
|
requirements:
|
161
|
-
- - ~>
|
142
|
+
- - "~>"
|
162
143
|
- !ruby/object:Gem::Version
|
163
144
|
version: 0.0.3
|
164
145
|
description: Improve the rendering of HTML emails by making CSS inline, converting
|
@@ -169,10 +150,10 @@ executables:
|
|
169
150
|
extensions: []
|
170
151
|
extra_rdoc_files: []
|
171
152
|
files:
|
172
|
-
- .gitignore
|
173
|
-
- .jrubyrc
|
174
|
-
- .travis.yml
|
175
|
-
- .yardopts
|
153
|
+
- ".gitignore"
|
154
|
+
- ".jrubyrc"
|
155
|
+
- ".travis.yml"
|
156
|
+
- ".yardopts"
|
176
157
|
- Gemfile
|
177
158
|
- LICENSE.md
|
178
159
|
- README.md
|
@@ -216,27 +197,26 @@ files:
|
|
216
197
|
- test/test_warnings.rb
|
217
198
|
homepage: http://premailer.dialect.ca/
|
218
199
|
licenses: []
|
200
|
+
metadata: {}
|
219
201
|
post_install_message:
|
220
202
|
rdoc_options: []
|
221
203
|
require_paths:
|
222
204
|
- lib
|
223
205
|
required_ruby_version: !ruby/object:Gem::Requirement
|
224
|
-
none: false
|
225
206
|
requirements:
|
226
|
-
- -
|
207
|
+
- - ">="
|
227
208
|
- !ruby/object:Gem::Version
|
228
209
|
version: '0'
|
229
210
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
230
|
-
none: false
|
231
211
|
requirements:
|
232
|
-
- -
|
212
|
+
- - ">="
|
233
213
|
- !ruby/object:Gem::Version
|
234
214
|
version: '0'
|
235
215
|
requirements: []
|
236
216
|
rubyforge_project:
|
237
|
-
rubygems_version:
|
217
|
+
rubygems_version: 2.2.0
|
238
218
|
signing_key:
|
239
|
-
specification_version:
|
219
|
+
specification_version: 4
|
240
220
|
summary: Preflight for HTML e-mail.
|
241
221
|
test_files:
|
242
222
|
- test/files/base.html
|