premailer 1.20.0 → 1.22.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 037056bb30a304387a4746310417cbf88c3efa7dc59901989334b6741b1199a7
4
- data.tar.gz: 4e92b08924143d560f84f23ca117c29445a3c038d78c09ded7b5e9c0ba7af065
3
+ metadata.gz: f373e83545e1f1b1ca346a0bfcfe2fa79daf3b0b64e71f2b346e19421495669c
4
+ data.tar.gz: ba3eb857e1fd0c956489566776b8f911a8da10372aad4932c89fb7c6c0e65d68
5
5
  SHA512:
6
- metadata.gz: 6e628663bb621b3f5ae5a81855af90455c1ed9eeb6cd154df24d8641d831f617a2f6b5314079f05f4bbed475ea6e9cf1ce66cfa05f49a7d9b268494bb3282509
7
- data.tar.gz: 3814f3e413553a54af47c95f21293e58a3a80547983e973deca7360cdaa86e0fe5eccf7abf2c0b67c99d174831ac16c07f384a1fbf5768cd03d7717218f37eae
6
+ metadata.gz: ba181a7933d0281f01de3b91956282d15b5958ca544e57ed9dc7a79923140f4e6b9c873ee77cd1e84060db624194cbf33cf90078395e66edea714d1ca30d2653
7
+ data.tar.gz: 7e61434faf7ed25db77f310fb9adc322322deb0dacfc5ec763645920f0d3c51ebefe50dddc58a2591dce99415cc9da7a4fa9b4b484289a1e6934ebdb143a8b14
@@ -61,14 +61,12 @@ class Premailer
61
61
  doc.search("*[@style]").each do |el|
62
62
  style = el.attributes['style'].to_s
63
63
 
64
- declarations = []
65
- style.scan(/\[SPEC\=([\d]+)\[(.[^\]\]]*)\]\]/).each do |declaration|
66
- begin
67
- rs = CssParser::RuleSet.new(nil, declaration[1].to_s, declaration[0].to_i)
68
- declarations << rs
69
- rescue ArgumentError => e
70
- raise e if @options[:rule_set_exceptions]
71
- end
64
+ declarations = style.scan(/\[SPEC\=([\d]+)\[(.[^\]\]]*)\]\]/).filter_map do |declaration|
65
+ rs = Premailer::CachedRuleSet.new(nil, declaration[1].to_s, declaration[0].to_i)
66
+ rs.expand_shorthand!
67
+ rs
68
+ rescue ArgumentError => e
69
+ raise e if @options[:rule_set_exceptions]
72
70
  end
73
71
 
74
72
  # Perform style folding
@@ -67,13 +67,21 @@ class Premailer
67
67
 
68
68
  declarations = []
69
69
  style.scan(/\[SPEC\=([\d]+)\[(.[^\]\]]*)\]\]/).each do |declaration|
70
- rs = CssParser::RuleSet.new(nil, declaration[1].to_s, declaration[0].to_i)
71
- declarations << rs
70
+ begin
71
+ rs = CssParser::RuleSet.new(nil, declaration[1].to_s, declaration[0].to_i)
72
+ declarations << rs
73
+ rescue ArgumentError => e
74
+ raise e if @options[:rule_set_exceptions]
75
+ end
72
76
  end
73
77
 
74
78
  # Perform style folding
75
79
  merged = CssParser.merge(declarations)
76
- merged.expand_shorthand!
80
+ begin
81
+ merged.expand_shorthand!
82
+ rescue ArgumentError => e
83
+ raise e if @options[:rule_set_exceptions]
84
+ end
77
85
 
78
86
  # Duplicate CSS attributes as HTML attributes
79
87
  if Premailer::RELATED_ATTRIBUTES.has_key?(el.name) && @options[:css_to_attributes]
@@ -61,13 +61,21 @@ class Premailer
61
61
 
62
62
  declarations = []
63
63
  style.scan(/\[SPEC\=([\d]+)\[(.[^\]\]]*)\]\]/).each do |declaration|
64
- rs = CssParser::RuleSet.new(nil, declaration[1].to_s, declaration[0].to_i)
65
- declarations << rs
64
+ begin
65
+ rs = CssParser::RuleSet.new(nil, declaration[1].to_s, declaration[0].to_i)
66
+ declarations << rs
67
+ rescue ArgumentError => e
68
+ raise e if @options[:rule_set_exceptions]
69
+ end
66
70
  end
67
71
 
68
72
  # Perform style folding
69
73
  merged = CssParser.merge(declarations)
70
- merged.expand_shorthand!
74
+ begin
75
+ merged.expand_shorthand!
76
+ rescue ArgumentError => e
77
+ raise e if @options[:rule_set_exceptions]
78
+ end
71
79
 
72
80
  # Duplicate CSS attributes as HTML attributes
73
81
  if Premailer::RELATED_ATTRIBUTES.has_key?(el.name) && @options[:css_to_attributes]
@@ -0,0 +1,12 @@
1
+ class Premailer
2
+ class CachedRuleSet < CssParser::RuleSet
3
+ # we call this early to find errors but css-parser calls it in .merge again
4
+ # so to prevent slowdown and bugs we refuse to run it twice on the same ruleset
5
+ # ideally should be upstreamed into css-parser
6
+ def expand_shorthand!
7
+ super unless @expand_shorthand
8
+ ensure
9
+ @expand_shorthand = true
10
+ end
11
+ end
12
+ end
@@ -1,4 +1,4 @@
1
1
  class Premailer
2
2
  # Premailer version.
3
- VERSION = '1.20.0'.freeze
3
+ VERSION = '1.22.0'.freeze
4
4
  end
data/lib/premailer.rb CHANGED
@@ -9,3 +9,4 @@ require 'premailer/adapter'
9
9
  require 'premailer/adapter/rgb_to_hex'
10
10
  require 'premailer/html_to_plain_text'
11
11
  require 'premailer/premailer'
12
+ require 'premailer/cached_rule_set'
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.20.0
4
+ version: 1.22.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Dunae
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-09 00:00:00.000000000 Z
11
+ date: 2023-12-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: css_parser
@@ -187,6 +187,7 @@ files:
187
187
  - lib/premailer/adapter/nokogiri_fast.rb
188
188
  - lib/premailer/adapter/nokogumbo.rb
189
189
  - lib/premailer/adapter/rgb_to_hex.rb
190
+ - lib/premailer/cached_rule_set.rb
190
191
  - lib/premailer/executor.rb
191
192
  - lib/premailer/html_to_plain_text.rb
192
193
  - lib/premailer/premailer.rb