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 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