premailer 1.10.4 → 1.13.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 +5 -5
- data/README.md +16 -2
- data/lib/premailer/adapter/nokogiri.rb +21 -11
- data/lib/premailer/adapter/nokogiri_fast.rb +23 -12
- data/lib/premailer/adapter/nokogumbo.rb +19 -11
- data/lib/premailer/html_to_plain_text.rb +30 -10
- data/lib/premailer/premailer.rb +9 -5
- data/lib/premailer/version.rb +1 -1
- metadata +22 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c7882cf6e028e4d0f2bfb61a5fe7fdcf86f27f38771110bfa2adb01e774bb9e8
|
4
|
+
data.tar.gz: 34d2f2dd133d9e339927ca08c4f358028b9bc1f9ab9a957a0702410b4bbfd98d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0016714ba7bf448622523699f89d68bad9c10127f3dc2ed76c5bde9cc6829edb31e1483a9c30e37f8214e46f45d43c0f260e8d743d63947340fb4a026676df6
|
7
|
+
data.tar.gz: f63d9445ddc63a0f39370599f92d1b4a52c783aa72f447e333b3a867e3cb4290d107659278de44cfc070d208bb66b1c538eeef9a7e79316c4e1b46cf7fa07b4c
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Premailer README [](https://travis-ci.org/premailer/premailer) [](https://badge.fury.io/rb/premailer)
|
2
2
|
|
3
3
|
## What is this?
|
4
4
|
|
@@ -12,7 +12,7 @@ script is my solution.
|
|
12
12
|
- Checks links in `href`, `src` and CSS `url('')`
|
13
13
|
* CSS properties are checked against e-mail client capabilities
|
14
14
|
- Based on the Email Standards Project's guides
|
15
|
-
* A plain text version is created (optional)
|
15
|
+
* A [plain text version](https://premailer.github.io/premailer/HtmlToPlainText.html) is created (optional)
|
16
16
|
|
17
17
|
## Installation
|
18
18
|
|
@@ -80,6 +80,7 @@ Premailer looks for a few CSS attributes that make working with tables a bit eas
|
|
80
80
|
| -premailer-height | Available on `table`, `tr`, `th` and `td` elements |
|
81
81
|
| -premailer-cellpadding | Available on `table` elements |
|
82
82
|
| -premailer-cellspacing | Available on `table` elements |
|
83
|
+
| -premailer-align | Available on `table` elements |
|
83
84
|
| data-premailer="ignore" | Available on `link` and `style` elements. Premailer will ignore these elements entirely. |
|
84
85
|
|
85
86
|
Each of these CSS declarations will be copied to appropriate element's attribute.
|
@@ -96,6 +97,19 @@ will result in
|
|
96
97
|
<table cellspacing='5' width='500'>
|
97
98
|
```
|
98
99
|
|
100
|
+
## Configuration options
|
101
|
+
|
102
|
+
The behavior of Premailer can be configured by passing options in the initializer.
|
103
|
+
|
104
|
+
For example, the following will accept HTML from a string and will exclude unmergeable css from being added to the `<head>` of the output document.
|
105
|
+
|
106
|
+
```ruby
|
107
|
+
premailer = Premailer.new(html_string, with_html_string: true, drop_unmergeable_css_rules: true)
|
108
|
+
```
|
109
|
+
|
110
|
+
[See here for a full list of the available options](https://premailer.github.io/premailer/Premailer.html#initialize-instance_method).
|
111
|
+
|
112
|
+
|
99
113
|
## Contributions
|
100
114
|
|
101
115
|
Contributions are most welcome. Premailer was rotting away in a private SVN repository for too long and could use some TLC. Fork and patch to your heart's content. Please don't increment the version numbers, though.
|
@@ -94,7 +94,7 @@ class Premailer
|
|
94
94
|
el['style'] = merged.declarations_to_s
|
95
95
|
end
|
96
96
|
|
97
|
-
doc = write_unmergable_css_rules(doc, @unmergable_rules)
|
97
|
+
doc = write_unmergable_css_rules(doc, @unmergable_rules) unless @options[:drop_unmergeable_css_rules]
|
98
98
|
|
99
99
|
if @options[:remove_classes] or @options[:remove_comments]
|
100
100
|
doc.traverse do |el|
|
@@ -149,11 +149,17 @@ class Premailer
|
|
149
149
|
def write_unmergable_css_rules(doc, unmergable_rules) # :nodoc:
|
150
150
|
styles = unmergable_rules.to_s
|
151
151
|
unless styles.empty?
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
152
|
+
if @options[:html_fragment]
|
153
|
+
style_tag = ::Nokogiri::XML::Node.new("style", doc)
|
154
|
+
style_tag.content = styles
|
155
|
+
doc.add_child(style_tag)
|
156
|
+
else
|
157
|
+
style_tag = doc.create_element "style", "#{styles}"
|
158
|
+
head = doc.at_css('head')
|
159
|
+
head ||= doc.root.first_element_child.add_previous_sibling(doc.create_element "head") if doc.root && doc.root.first_element_child
|
160
|
+
head ||= doc.add_child(doc.create_element "head")
|
161
|
+
head << style_tag
|
162
|
+
end
|
157
163
|
end
|
158
164
|
doc
|
159
165
|
end
|
@@ -198,7 +204,7 @@ class Premailer
|
|
198
204
|
@base_dir = File.dirname(input)
|
199
205
|
thing = File.open(input, 'r')
|
200
206
|
else
|
201
|
-
thing = open(input)
|
207
|
+
thing = URI.open(input)
|
202
208
|
end
|
203
209
|
|
204
210
|
if thing.respond_to?(:read)
|
@@ -216,12 +222,16 @@ class Premailer
|
|
216
222
|
end
|
217
223
|
# Default encoding is ASCII-8BIT (binary) per http://groups.google.com/group/nokogiri-talk/msg/0b81ef0dc180dc74
|
218
224
|
# However, we really don't want to hardcode this. ASCII-8BIT should be the default, but not the only option.
|
219
|
-
if thing.is_a?(String) and RUBY_VERSION =~ /1.9/
|
225
|
+
encoding = if thing.is_a?(String) and RUBY_VERSION =~ /1.9/
|
220
226
|
thing = thing.force_encoding(@options[:input_encoding]).encode!
|
221
|
-
|
227
|
+
@options[:input_encoding]
|
228
|
+
else
|
229
|
+
@options[:input_encoding] || (RUBY_PLATFORM == 'java' ? nil : 'BINARY')
|
230
|
+
end
|
231
|
+
doc = if @options[:html_fragment]
|
232
|
+
::Nokogiri::HTML.fragment(thing, encoding)
|
222
233
|
else
|
223
|
-
|
224
|
-
doc = ::Nokogiri::HTML(thing, nil, @options[:input_encoding] || default_encoding) { |c| c.recover }
|
234
|
+
::Nokogiri::HTML(thing, nil, encoding) { |c| c.recover }
|
225
235
|
end
|
226
236
|
|
227
237
|
# Fix for removing any CDATA tags from both style and script tags inserted per
|
@@ -96,7 +96,7 @@ class Premailer
|
|
96
96
|
el['style'] = merged.declarations_to_s
|
97
97
|
end
|
98
98
|
|
99
|
-
doc = write_unmergable_css_rules(doc, @unmergable_rules)
|
99
|
+
doc = write_unmergable_css_rules(doc, @unmergable_rules) unless @options[:drop_unmergeable_css_rules]
|
100
100
|
|
101
101
|
if @options[:remove_classes] or @options[:remove_comments]
|
102
102
|
doc.traverse do |el|
|
@@ -150,12 +150,19 @@ class Premailer
|
|
150
150
|
# @return [::Nokogiri::XML] a document.
|
151
151
|
def write_unmergable_css_rules(doc, unmergable_rules) # :nodoc:
|
152
152
|
styles = unmergable_rules.to_s
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
153
|
+
unless styles.empty?
|
154
|
+
if @options[:html_fragment]
|
155
|
+
style_tag = ::Nokogiri::XML::Node.new("style", doc)
|
156
|
+
style_tag.content = styles
|
157
|
+
doc.add_child(style_tag)
|
158
|
+
else
|
159
|
+
style_tag = doc.create_element "style", styles
|
160
|
+
head = doc.at_css('head')
|
161
|
+
head ||= doc.root.first_element_child.add_previous_sibling(doc.create_element "head") if doc.root && doc.root.first_element_child
|
162
|
+
head ||= doc.add_child(doc.create_element "head")
|
163
|
+
head << style_tag
|
164
|
+
end
|
165
|
+
end
|
159
166
|
doc
|
160
167
|
end
|
161
168
|
|
@@ -199,7 +206,7 @@ class Premailer
|
|
199
206
|
@base_dir = File.dirname(input)
|
200
207
|
thing = File.open(input, 'r')
|
201
208
|
else
|
202
|
-
thing = open(input)
|
209
|
+
thing = URI.open(input)
|
203
210
|
end
|
204
211
|
|
205
212
|
if thing.respond_to?(:read)
|
@@ -217,12 +224,16 @@ class Premailer
|
|
217
224
|
end
|
218
225
|
# Default encoding is ASCII-8BIT (binary) per http://groups.google.com/group/nokogiri-talk/msg/0b81ef0dc180dc74
|
219
226
|
# However, we really don't want to hardcode this. ASCII-8BIT should be the default, but not the only option.
|
220
|
-
if thing.is_a?(String) and RUBY_VERSION =~ /1.9/
|
227
|
+
encoding = if thing.is_a?(String) and RUBY_VERSION =~ /1.9/
|
221
228
|
thing = thing.force_encoding(@options[:input_encoding]).encode!
|
222
|
-
|
229
|
+
@options[:input_encoding]
|
230
|
+
else
|
231
|
+
@options[:input_encoding] || (RUBY_PLATFORM == 'java' ? nil : 'BINARY')
|
232
|
+
end
|
233
|
+
doc = if @options[:html_fragment]
|
234
|
+
::Nokogiri::HTML.fragment(thing, encoding)
|
223
235
|
else
|
224
|
-
|
225
|
-
doc = ::Nokogiri::HTML(thing, nil, @options[:input_encoding] || default_encoding) { |c| c.recover }
|
236
|
+
::Nokogiri::HTML(thing, nil, encoding) { |c| c.recover }
|
226
237
|
end
|
227
238
|
|
228
239
|
# Fix for removing any CDATA tags from both style and script tags inserted per
|
@@ -94,7 +94,7 @@ class Premailer
|
|
94
94
|
el['style'] = merged.declarations_to_s
|
95
95
|
end
|
96
96
|
|
97
|
-
doc = write_unmergable_css_rules(doc, @unmergable_rules)
|
97
|
+
doc = write_unmergable_css_rules(doc, @unmergable_rules) unless @options[:drop_unmergeable_css_rules]
|
98
98
|
|
99
99
|
if @options[:remove_classes] or @options[:remove_comments]
|
100
100
|
doc.traverse do |el|
|
@@ -148,12 +148,19 @@ class Premailer
|
|
148
148
|
# @return [::Nokogiri::XML] a document.
|
149
149
|
def write_unmergable_css_rules(doc, unmergable_rules) # :nodoc:
|
150
150
|
styles = unmergable_rules.to_s
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
151
|
+
unless styles.empty?
|
152
|
+
if @options[:html_fragment]
|
153
|
+
style_tag = ::Nokogiri::XML::Node.new("style", doc)
|
154
|
+
style_tag.content = styles
|
155
|
+
doc.add_child(style_tag)
|
156
|
+
else
|
157
|
+
style_tag = doc.create_element "style", styles
|
158
|
+
head = doc.at_css('head')
|
159
|
+
head ||= doc.root.first_element_child.add_previous_sibling(doc.create_element "head") if doc.root && doc.root.first_element_child
|
160
|
+
head ||= doc.add_child(doc.create_element "head")
|
161
|
+
head << style_tag
|
162
|
+
end
|
163
|
+
end
|
157
164
|
doc
|
158
165
|
end
|
159
166
|
|
@@ -197,7 +204,7 @@ class Premailer
|
|
197
204
|
@base_dir = File.dirname(input)
|
198
205
|
thing = File.open(input, 'r')
|
199
206
|
else
|
200
|
-
thing = open(input)
|
207
|
+
thing = URI.open(input)
|
201
208
|
end
|
202
209
|
|
203
210
|
if thing.respond_to?(:read)
|
@@ -217,10 +224,11 @@ class Premailer
|
|
217
224
|
# However, we really don't want to hardcode this. ASCII-8BIT should be the default, but not the only option.
|
218
225
|
if thing.is_a?(String) and RUBY_VERSION =~ /1.9/
|
219
226
|
thing = thing.force_encoding(@options[:input_encoding]).encode!
|
220
|
-
|
227
|
+
end
|
228
|
+
doc = if @options[:html_fragment]
|
229
|
+
::Nokogiri::HTML5.fragment(thing)
|
221
230
|
else
|
222
|
-
|
223
|
-
doc = ::Nokogiri::HTML5(thing)
|
231
|
+
::Nokogiri::HTML5(thing)
|
224
232
|
end
|
225
233
|
|
226
234
|
# Fix for removing any CDATA tags from both style and script tags inserted per
|
@@ -6,7 +6,13 @@ module HtmlToPlainText
|
|
6
6
|
|
7
7
|
# Returns the text in UTF-8 format with all HTML tags removed
|
8
8
|
#
|
9
|
+
# HTML content can be omitted from the output by surrounding it in the following comments:
|
10
|
+
#
|
11
|
+
# <!-- start text/html -->
|
12
|
+
# <!-- end text/html -->
|
13
|
+
#
|
9
14
|
# TODO: add support for DL, OL
|
15
|
+
# TODO: this is not safe and needs a real html parser to work
|
10
16
|
def convert_to_text(html, line_length = 65, from_charset = 'UTF-8')
|
11
17
|
txt = html
|
12
18
|
|
@@ -21,17 +27,31 @@ module HtmlToPlainText
|
|
21
27
|
# eg. the following formats:
|
22
28
|
# <img alt="" />
|
23
29
|
# <img alt="">
|
24
|
-
txt.gsub!(/<img
|
30
|
+
txt.gsub!(/<img[^>]+?alt="([^"]*)"[^>]*>/i, '\1')
|
25
31
|
|
26
32
|
# for img tags with '' for attribute quotes
|
27
33
|
# with or without closing tag
|
28
34
|
# eg. the following formats:
|
29
35
|
# <img alt='' />
|
30
36
|
# <img alt=''>
|
31
|
-
txt.gsub!(/<img
|
37
|
+
txt.gsub!(/<img[^>]+?alt='([^']*)'[^>]*>/i, '\1')
|
38
|
+
|
39
|
+
# remove script tags and content
|
40
|
+
txt.gsub!(/<script.*?\/script>/m, '')
|
41
|
+
|
42
|
+
# links with double quotes
|
43
|
+
txt.gsub!(/<a\s[^\n]*?href=["'](mailto:)?([^"]*)["][^>]*>(.*?)<\/a>/im) do |s|
|
44
|
+
if $3.empty?
|
45
|
+
''
|
46
|
+
elsif $3.strip.downcase == $2.strip.downcase
|
47
|
+
$3.strip
|
48
|
+
else
|
49
|
+
$3.strip + ' ( ' + $2.strip + ' )'
|
50
|
+
end
|
51
|
+
end
|
32
52
|
|
33
|
-
# links
|
34
|
-
txt.gsub!(/<a\s[^\n]*?href=["'](mailto:)?([^
|
53
|
+
# links with single quotes
|
54
|
+
txt.gsub!(/<a\s[^\n]*?href=["'](mailto:)?([^']*)['][^>]*>(.*?)<\/a>/im) do |s|
|
35
55
|
if $3.empty?
|
36
56
|
''
|
37
57
|
elsif $3.strip.downcase == $2.strip.downcase
|
@@ -56,12 +76,12 @@ module HtmlToPlainText
|
|
56
76
|
hlength = line_length if hlength > line_length
|
57
77
|
|
58
78
|
case hlevel
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
79
|
+
when 1 # H1, asterisks above and below
|
80
|
+
htext = ('*' * hlength) + "\n" + htext + "\n" + ('*' * hlength)
|
81
|
+
when 2 # H1, dashes above and below
|
82
|
+
htext = ('-' * hlength) + "\n" + htext + "\n" + ('-' * hlength)
|
83
|
+
else # H3-H6, dashes below
|
84
|
+
htext = htext + "\n" + ('-' * hlength)
|
65
85
|
end
|
66
86
|
|
67
87
|
"\n\n" + htext + "\n\n"
|
data/lib/premailer/premailer.rb
CHANGED
@@ -151,14 +151,14 @@ class Premailer
|
|
151
151
|
#
|
152
152
|
# @param [Hash] options the options to handle html with.
|
153
153
|
# @option options [Fixnum] :line_length Line length used by to_plain_text. Default is 65.
|
154
|
-
# @option options [Fixnum] :warn_level What level of CSS compatibility warnings to show (see {Premailer::Warnings}).
|
154
|
+
# @option options [Fixnum] :warn_level What level of CSS compatibility warnings to show (see {Premailer::Warnings}, default is Warnings::SAFE).
|
155
155
|
# @option options [String] :link_query_string A string to append to every <tt>a href=""</tt> link. Do not include the initial <tt>?</tt>.
|
156
156
|
# @option options [String] :base_url Used to calculate absolute URLs for local files.
|
157
157
|
# @option options [Array(String)] :css Manually specify CSS stylesheets.
|
158
|
-
# @option options [Boolean] :css_to_attributes Copy related CSS attributes into HTML attributes (e.g. background-color to bgcolor)
|
158
|
+
# @option options [Boolean] :css_to_attributes Copy related CSS attributes into HTML attributes (e.g. background-color to bgcolor). Default is true.
|
159
159
|
# @option options [Boolean] :preserve_style_attribute Preserve original style attribute
|
160
160
|
# @option options [String] :css_string Pass CSS as a string
|
161
|
-
# @option options [Boolean] :rgb_to_hex_attributes Convert RBG to Hex colors
|
161
|
+
# @option options [Boolean] :rgb_to_hex_attributes Convert RBG to Hex colors. Default is false.
|
162
162
|
# @option options [Boolean] :remove_ids Remove ID attributes whenever possible and convert IDs used as anchors to hashed to avoid collisions in webmail programs. Default is false.
|
163
163
|
# @option options [Boolean] :remove_classes Remove class attributes. Default is false.
|
164
164
|
# @option options [Boolean] :remove_comments Remove html comments. Default is false.
|
@@ -177,6 +177,8 @@ class Premailer
|
|
177
177
|
# @option options [Symbol] :adapter Which HTML parser to use, <tt>:nokogiri</tt>, <tt>:nokogiri_fast</tt> or <tt>:nokogumbo</tt>. Default is <tt>:nokogiri</tt>.
|
178
178
|
# @option options [String] :output_encoding Output encoding option for Nokogiri adapter. Should be set to "US-ASCII" to output HTML entities instead of Unicode characters.
|
179
179
|
# @option options [Boolean] :create_shorthands Combine several properties into a shorthand one, e.g. font: style weight size. Default is true.
|
180
|
+
# @option options [Boolean] :html_fragment Handle HTML fragment without any HTML content wrappers. Default is false.
|
181
|
+
# @option options [Boolean] :drop_unmergeable_css_rules Do not include unmergeable css rules in a <tt><style><tt> tag. Default is false.
|
180
182
|
def initialize(html, options = {})
|
181
183
|
@options = {:warn_level => Warnings::SAFE,
|
182
184
|
:line_length => 65,
|
@@ -206,7 +208,9 @@ class Premailer
|
|
206
208
|
:escape_url_attributes => true,
|
207
209
|
:unescaped_ampersand => false,
|
208
210
|
:create_shorthands => true,
|
211
|
+
:html_fragment => false,
|
209
212
|
:adapter => Adapter.use,
|
213
|
+
:drop_unmergeable_css_rules => false
|
210
214
|
}.merge(options)
|
211
215
|
|
212
216
|
@html_file = html
|
@@ -234,7 +238,7 @@ class Premailer
|
|
234
238
|
|
235
239
|
@adapter_class = Adapter.find @options[:adapter]
|
236
240
|
|
237
|
-
self.
|
241
|
+
self.extend(@adapter_class)
|
238
242
|
|
239
243
|
@doc = load_html(@html_file)
|
240
244
|
|
@@ -400,7 +404,7 @@ public
|
|
400
404
|
|
401
405
|
# Check for an XHTML doctype
|
402
406
|
def is_xhtml?
|
403
|
-
intro = @doc.
|
407
|
+
intro = @doc.to_xhtml.strip.split("\n")[0..2].join(' ')
|
404
408
|
is_xhtml = !!(intro =~ /w3c\/\/[\s]*dtd[\s]+xhtml/i)
|
405
409
|
$stderr.puts "Is XHTML? #{is_xhtml.inspect}\nChecked:\n#{intro}" if @options[:debug]
|
406
410
|
is_xhtml
|
data/lib/premailer/version.rb
CHANGED
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.
|
4
|
+
version: 1.13.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:
|
11
|
+
date: 2020-08-04 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.
|
19
|
+
version: 1.6.0
|
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.
|
26
|
+
version: 1.6.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: htmlentities
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -92,28 +92,14 @@ dependencies:
|
|
92
92
|
requirements:
|
93
93
|
- - "~>"
|
94
94
|
- !ruby/object:Gem::Version
|
95
|
-
version:
|
95
|
+
version: 1.8.2
|
96
96
|
type: :development
|
97
97
|
prerelease: false
|
98
98
|
version_requirements: !ruby/object:Gem::Requirement
|
99
99
|
requirements:
|
100
100
|
- - "~>"
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version:
|
103
|
-
- !ruby/object:Gem::Dependency
|
104
|
-
name: yard
|
105
|
-
requirement: !ruby/object:Gem::Requirement
|
106
|
-
requirements:
|
107
|
-
- - ">="
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '0'
|
110
|
-
type: :development
|
111
|
-
prerelease: false
|
112
|
-
version_requirements: !ruby/object:Gem::Requirement
|
113
|
-
requirements:
|
114
|
-
- - ">="
|
115
|
-
- !ruby/object:Gem::Version
|
116
|
-
version: '0'
|
102
|
+
version: 1.8.2
|
117
103
|
- !ruby/object:Gem::Dependency
|
118
104
|
name: redcarpet
|
119
105
|
requirement: !ruby/object:Gem::Requirement
|
@@ -184,6 +170,20 @@ dependencies:
|
|
184
170
|
- - ">="
|
185
171
|
- !ruby/object:Gem::Version
|
186
172
|
version: '0'
|
173
|
+
- !ruby/object:Gem::Dependency
|
174
|
+
name: bump
|
175
|
+
requirement: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - ">="
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '0'
|
180
|
+
type: :development
|
181
|
+
prerelease: false
|
182
|
+
version_requirements: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - ">="
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '0'
|
187
187
|
description: Improve the rendering of HTML emails by making CSS inline, converting
|
188
188
|
links and warning about unsupported code.
|
189
189
|
email: akzhan.abdulin@gmail.com
|
@@ -218,15 +218,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
218
218
|
requirements:
|
219
219
|
- - ">="
|
220
220
|
- !ruby/object:Gem::Version
|
221
|
-
version: 2.
|
221
|
+
version: 2.5.0
|
222
222
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
223
223
|
requirements:
|
224
224
|
- - ">="
|
225
225
|
- !ruby/object:Gem::Version
|
226
226
|
version: '0'
|
227
227
|
requirements: []
|
228
|
-
|
229
|
-
rubygems_version: 2.6.12
|
228
|
+
rubygems_version: 3.1.3
|
230
229
|
signing_key:
|
231
230
|
specification_version: 4
|
232
231
|
summary: Preflight for HTML e-mail.
|