premailer 1.7.9 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -8,4 +8,5 @@ doc/
8
8
  .yardoc/
9
9
  *.sw?
10
10
  pkg/
11
+ .bundle/
11
12
  *.sublime-*
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gem 'css_parser', :git => 'git://github.com/alexdunae/css_parser.git'
3
+ gem 'css_parser', :git => 'git://github.com/premailer/css_parser.git'
4
4
  gem 'webmock', :group => [:development, :test]
5
5
 
6
6
  platforms :jruby do
data/lib/premailer.rb CHANGED
@@ -7,4 +7,3 @@ require 'css_parser'
7
7
  require 'premailer/adapter'
8
8
  require 'premailer/html_to_plain_text'
9
9
  require 'premailer/premailer'
10
-
@@ -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 head = doc.search('head')
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
- return doc
231
+ doc
234
232
  end
235
233
 
236
234
  end
@@ -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 $stdin.tty?
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
@@ -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
- return warnings
555
+ warnings
552
556
  end
553
557
  end
554
558
 
@@ -1,4 +1,4 @@
1
1
  class Premailer
2
2
  # Premailer version.
3
- VERSION = '1.7.9'.freeze
3
+ VERSION = '1.8.0'.freeze
4
4
  end
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.1.9')
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
- assert_match /red !important/i, premailer.processed_doc.at('head style').inner_html
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
- assert_match /a\:hover[\s]*\{[\s]*color\:[\s]*red[\s]*!important;[\s]*\}/i, premailer.processed_doc.at('head style').inner_html
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 !important/i, premailer.processed_doc.at('style').inner_html
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-color: #000080/, premailer.processed_doc.search('.style5').first.attributes['style'].to_s
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
- assert_match /margin: 0 auto;/, premailer.processed_doc.search('#page').first.attributes['style'].to_s
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.7.9
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: 2013-10-25 00:00:00.000000000 Z
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.1.9
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.1.9
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: 1.8.24
217
+ rubygems_version: 2.2.0
238
218
  signing_key:
239
- specification_version: 3
219
+ specification_version: 4
240
220
  summary: Preflight for HTML e-mail.
241
221
  test_files:
242
222
  - test/files/base.html