premailer 1.10.0 → 1.10.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3b62798f9ef3929357e4fe01538d05615f37b9b3
4
- data.tar.gz: f0224b7a6a42b88ebea688cf9d55fe30504f9751
3
+ metadata.gz: 0c41d00b9329efc665261de336e908985573ae9c
4
+ data.tar.gz: e1dec81980ea9f8abde0e30c0044937fdf5a7472
5
5
  SHA512:
6
- metadata.gz: 96bfa7a6374f3cd91f6004a8a988d46e789bd2cce29e12f595fee64c0e86244236e77766b1380a347329dbd71866f487ca23f9aedab0d600b2cf1a54a1c3253f
7
- data.tar.gz: 09148edbb09bee950ad6e5c7c97709587b862136a38b5f484ab8e5f039f92f137ce7b948303796480004b31018e0f4ebe488d68c4ae1767f0f61d141d11f8db7
6
+ metadata.gz: 761dc0a5f8ec61ad3997aa8a6d2042de955ff81531e02d4bfb4beb27915e98b059f39f2d2428e491c5a998c5de2bac7846ce902472c0c0da014ea70cb8b91d21
7
+ data.tar.gz: d2e8af67edf061916446e7ba4172f0b6befebd68d6b6c2815acc06f7c10d5a6b10951637ba07eb3f1a7c6bbaf072e1a39b45c102243d54427878c33259f4d7c1
data/README.md CHANGED
@@ -52,12 +52,14 @@ end
52
52
 
53
53
  Premailer's default adapter is nokogiri if both nokogiri and nokogumbo are included in the Gemfile list. However, if you want to use a different adapter, you can choose to.
54
54
 
55
- There are three adapters in total (as of premailer 1.9.1)
55
+ There are three adapters in total (as of premailer 1.10.0)
56
56
 
57
57
  1. nokogiri (default)
58
58
  2. nokogiri_fast
59
59
  3. nokogumbo
60
60
 
61
+ hpricot adapter removed due to its EOL, please use `~>1.9.0` version if You still need it..
62
+
61
63
  `NokogiriFast` adapter improves the Algorithmic complexity of the running time by 20x with a slight compensation on memory. To switch to any of these adapters, add the following line. For example, if you want to include the `NokogiriFast` adapter,
62
64
 
63
65
  ```ruby
@@ -66,7 +68,7 @@ Premailer::Adapter.use = :nokogiri_fast
66
68
 
67
69
  ## Ruby Compatibility
68
70
 
69
- Premailer is tested on Ruby 2.x.0. JRuby support is close; contributors are welcome. Checkout the latest build status on the [Travis CI dashboard](https://travis-ci.org/#!/premailer/premailer).
71
+ Premailer is tested on Ruby 2.1 and above. JRuby support is close; contributors are welcome. Checkout the latest build status on the [Travis CI dashboard](https://travis-ci.org/#!/premailer/premailer).
70
72
 
71
73
  ## Premailer-specific CSS
72
74
 
@@ -2,6 +2,7 @@ require 'yaml'
2
2
  require 'open-uri'
3
3
  require 'digest/md5'
4
4
  require 'cgi'
5
+ require 'addressable'
5
6
  require 'css_parser'
6
7
 
7
8
  require 'premailer/adapter'
@@ -77,12 +77,12 @@ class Premailer
77
77
  if Premailer::RELATED_ATTRIBUTES.has_key?(el.name) && @options[:css_to_attributes]
78
78
  Premailer::RELATED_ATTRIBUTES[el.name].each do |css_att, html_att|
79
79
  if el[html_att].nil? and not merged[css_att].empty?
80
- new_html_att = merged[css_att].gsub(/url\(['|"](.*)['|"]\)/, '\1').gsub(/;$|\s*!important/, '').strip
80
+ new_html_att = merged[css_att].gsub(/url\(['"](.*)['"]\)/, '\1').gsub(/;$|\s*!important/, '').strip
81
81
  el[html_att] = css_att.end_with?('color') && @options[:rgb_to_hex_attributes] ? ensure_hex(new_html_att) : new_html_att
82
82
  end
83
- merged.instance_variable_get("@declarations").tap do |declarations|
84
- unless @options[:preserve_style_attribute]
85
- declarations.delete(css_att)
83
+ unless @options[:preserve_style_attribute]
84
+ merged.instance_variable_get("@declarations").tap do |declarations|
85
+ declarations.delete(css_att)
86
86
  end
87
87
  end
88
88
  end
@@ -91,10 +91,7 @@ class Premailer
91
91
  merged.create_shorthand! if @options[:create_shorthands]
92
92
 
93
93
  # write the inline STYLE attribute
94
- # split by ';' but ignore those in brackets
95
- attributes = Premailer.escape_string(merged.declarations_to_s).split(/;(?![^(]*\))/).map(&:strip)
96
- attributes = attributes.map { |attr| [attr.split(':').first, attr] }.sort_by { |pair| pair.first }.map { |pair| pair[1] }
97
- el['style'] = attributes.join('; ') + ";"
94
+ el['style'] = merged.declarations_to_s
98
95
  end
99
96
 
100
97
  doc = write_unmergable_css_rules(doc, @unmergable_rules)
@@ -79,12 +79,12 @@ class Premailer
79
79
  if Premailer::RELATED_ATTRIBUTES.has_key?(el.name) && @options[:css_to_attributes]
80
80
  Premailer::RELATED_ATTRIBUTES[el.name].each do |css_att, html_att|
81
81
  if el[html_att].nil? and not merged[css_att].empty?
82
- new_html_att = merged[css_att].gsub(/url\(['|"](.*)['|"]\)/, '\1').gsub(/;$|\s*!important/, '').strip
82
+ new_html_att = merged[css_att].gsub(/url\(['"](.*)['"]\)/, '\1').gsub(/;$|\s*!important/, '').strip
83
83
  el[html_att] = css_att.end_with?('color') && @options[:rgb_to_hex_attributes] ? ensure_hex(new_html_att) : new_html_att
84
84
  end
85
- merged.instance_variable_get("@declarations").tap do |declarations|
86
- unless @options[:preserve_style_attribute]
87
- declarations.delete(css_att)
85
+ unless @options[:preserve_style_attribute]
86
+ merged.instance_variable_get("@declarations").tap do |declarations|
87
+ declarations.delete(css_att)
88
88
  end
89
89
  end
90
90
  end
@@ -93,10 +93,7 @@ class Premailer
93
93
  merged.create_shorthand! if @options[:create_shorthands]
94
94
 
95
95
  # write the inline STYLE attribute
96
- # split by ';' but ignore those in brackets
97
- attributes = Premailer.escape_string(merged.declarations_to_s).split(/;(?![^(]*\))/).map(&:strip)
98
- attributes = attributes.map { |attr| [attr.split(':').first, attr] }.sort_by { |pair| pair.first }.map { |pair| pair[1] }
99
- el['style'] = attributes.join('; ') + ";"
96
+ el['style'] = merged.declarations_to_s
100
97
  end
101
98
 
102
99
  doc = write_unmergable_css_rules(doc, @unmergable_rules)
@@ -77,12 +77,12 @@ class Premailer
77
77
  if Premailer::RELATED_ATTRIBUTES.has_key?(el.name) && @options[:css_to_attributes]
78
78
  Premailer::RELATED_ATTRIBUTES[el.name].each do |css_att, html_att|
79
79
  if el[html_att].nil? and not merged[css_att].empty?
80
- new_html_att = merged[css_att].gsub(/url\(['|"](.*)['|"]\)/, '\1').gsub(/;$|\s*!important/, '').strip
80
+ new_html_att = merged[css_att].gsub(/url\(['"](.*)['"]\)/, '\1').gsub(/;$|\s*!important/, '').strip
81
81
  el[html_att] = css_att.end_with?('color') && @options[:rgb_to_hex_attributes] ? ensure_hex(new_html_att) : new_html_att
82
82
  end
83
- merged.instance_variable_get("@declarations").tap do |declarations|
84
- unless @options[:preserve_style_attribute]
85
- declarations.delete(css_att)
83
+ unless @options[:preserve_style_attribute]
84
+ merged.instance_variable_get("@declarations").tap do |declarations|
85
+ declarations.delete(css_att)
86
86
  end
87
87
  end
88
88
  end
@@ -91,9 +91,7 @@ class Premailer
91
91
  merged.create_shorthand! if @options[:create_shorthands]
92
92
 
93
93
  # write the inline STYLE attribute
94
- attributes = Premailer.escape_string(merged.declarations_to_s).split(';').map(&:strip)
95
- attributes = attributes.map { |attr| [attr.split(':').first, attr] }.sort_by { |pair| pair.first }.map { |pair| pair[1] }
96
- el['style'] = attributes.join('; ') + ";"
94
+ el['style'] = merged.declarations_to_s
97
95
  end
98
96
 
99
97
  doc = write_unmergable_css_rules(doc, @unmergable_rules)
@@ -221,9 +221,9 @@ class Premailer
221
221
  @unmergable_rules = nil
222
222
 
223
223
  if @options[:base_url]
224
- @base_url = URI.parse(@options.delete(:base_url))
224
+ @base_url = Addressable::URI.parse(@options.delete(:base_url))
225
225
  elsif not @is_local_file
226
- @base_url = URI.parse(@html_file)
226
+ @base_url = Addressable::URI.parse(@html_file)
227
227
  end
228
228
 
229
229
  @css_parser = CssParser::Parser.new({
@@ -369,7 +369,7 @@ public
369
369
  next if href[0,1] =~ /[\#\{\[\<\%]/ # don't bother with anchors or special-looking links
370
370
 
371
371
  begin
372
- href = URI.parse(href)
372
+ href = Addressable::URI.parse(href)
373
373
 
374
374
  if current_host and href.host != nil and href.host != current_host
375
375
  $stderr.puts "Skipping append_query_string for: #{href.to_s} because host is no good" if @options[:verbose]
@@ -389,7 +389,7 @@ public
389
389
  end
390
390
 
391
391
  el['href'] = href.to_s
392
- rescue URI::Error => e
392
+ rescue Addressable::URI::InvalidURIError => e
393
393
  $stderr.puts "Skipping append_query_string for: #{href.to_s} (#{e.message})" if @options[:verbose]
394
394
  next
395
395
  end
@@ -415,7 +415,7 @@ public
415
415
  #
416
416
  # Returns a document.
417
417
  def convert_inline_links(doc, base_uri) # :nodoc:
418
- base_uri = URI.parse(base_uri) unless base_uri.kind_of?(URI)
418
+ base_uri = Addressable::URI.parse(base_uri) unless base_uri.kind_of?(Addressable::URI)
419
419
 
420
420
  append_qs = @options[:link_query_string] || ''
421
421
  escape_attrs = @options[:escape_url_attributes]
@@ -434,7 +434,7 @@ public
434
434
 
435
435
  if tag.attributes[attribute].to_s =~ /^http/i
436
436
  begin
437
- merged = URI.parse(tag.attributes[attribute])
437
+ merged = Addressable::URI.parse(tag.attributes[attribute])
438
438
  rescue; next; end
439
439
  else
440
440
  begin
@@ -442,13 +442,13 @@ public
442
442
  rescue
443
443
  begin
444
444
  next unless escape_attrs
445
- merged = Premailer.resolve_link(URI.escape(tag.attributes[attribute].to_s), base_uri)
445
+ merged = Premailer.resolve_link(Addressable::URI.escape(tag.attributes[attribute].to_s), base_uri)
446
446
  rescue; end
447
447
  end
448
448
  end
449
449
 
450
450
  # make sure 'merged' is a URI
451
- merged = URI.parse(merged.to_s) unless merged.kind_of?(URI)
451
+ merged = Addressable::URI.parse(merged.to_s) unless merged.kind_of?(Addressable::URI)
452
452
  tag[attribute] = merged.to_s
453
453
  end # end of each tag
454
454
  end # end of each attrs
@@ -476,12 +476,12 @@ public
476
476
  if path =~ /\A(?:(https?|ftp|file):)\/\//i
477
477
  resolved = path
478
478
  Premailer.canonicalize(resolved)
479
- elsif base_path.kind_of?(URI)
480
- resolved = base_path.merge(path)
479
+ elsif base_path.kind_of?(Addressable::URI)
480
+ resolved = base_path.join(path)
481
481
  Premailer.canonicalize(resolved)
482
482
  elsif base_path.kind_of?(String) and base_path =~ /\A(?:(?:https?|ftp|file):)\/\//i
483
- resolved = URI.parse(base_path)
484
- resolved = resolved.merge(path)
483
+ resolved = Addressable::URI.parse(base_path)
484
+ resolved = resolved.join(path)
485
485
  Premailer.canonicalize(resolved)
486
486
  else
487
487
  File.expand_path(path, File.dirname(base_path))
@@ -500,7 +500,7 @@ public
500
500
 
501
501
  # from http://www.ruby-forum.com/topic/140101
502
502
  def self.canonicalize(uri) # :nodoc:
503
- u = uri.kind_of?(URI) ? uri : URI.parse(uri.to_s)
503
+ u = uri.kind_of?(Addressable::URI) ? uri : Addressable::URI.parse(uri.to_s)
504
504
  u.normalize!
505
505
  newpath = u.path
506
506
  while newpath.gsub!(%r{([^/]+)/\.\./?}) { |match|
@@ -1,4 +1,4 @@
1
1
  class Premailer
2
2
  # Premailer version.
3
- VERSION = '1.10.0'.freeze
3
+ VERSION = '1.10.1'.freeze
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: premailer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.0
4
+ version: 1.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Dunae
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-22 00:00:00.000000000 Z
11
+ date: 2017-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: css_parser
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 1.4.9
19
+ version: 1.4.10
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 1.4.9
26
+ version: 1.4.10
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: htmlentities
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 4.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: addressable
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -212,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
212
226
  version: '0'
213
227
  requirements: []
214
228
  rubyforge_project:
215
- rubygems_version: 2.5.1
229
+ rubygems_version: 2.6.8
216
230
  signing_key:
217
231
  specification_version: 4
218
232
  summary: Preflight for HTML e-mail.