premailer-rails 1.9.7 → 1.11.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 +5 -5
- data/.gitignore +4 -0
- data/.travis.yml +3 -2
- data/CHANGELOG.md +26 -0
- data/Gemfile +8 -4
- data/README.md +21 -29
- data/VERSION +1 -1
- data/lib/premailer/rails/css_helper.rb +30 -11
- data/lib/premailer/rails/css_loaders/asset_pipeline_loader.rb +12 -11
- data/lib/premailer/rails/css_loaders/network_loader.rb +1 -1
- data/lib/premailer/rails/css_loaders.rb +0 -1
- data/lib/premailer/rails/customized_premailer.rb +4 -4
- data/lib/premailer/rails/hook.rb +2 -6
- data/lib/premailer/rails.rb +2 -1
- data/premailer-rails.gemspec +1 -2
- data/spec/integration/css_helper_spec.rb +170 -139
- data/spec/integration/delivery_spec.rb +13 -0
- data/spec/integration/hook_spec.rb +36 -11
- data/spec/rails_app/app/assets/config/manifest.js +3 -0
- data/spec/rails_app/app/assets/stylesheets/application.css +3 -0
- data/spec/rails_app/app/mailers/application_mailer.rb +4 -0
- data/spec/rails_app/app/mailers/welcome_mailer.rb +6 -0
- data/spec/rails_app/app/views/layouts/mailer.html.erb +11 -0
- data/spec/rails_app/app/views/welcome_mailer/welcome_email.html.erb +1 -0
- data/spec/rails_app/config/application.rb +13 -0
- data/spec/rails_app/config/boot.rb +5 -0
- data/spec/rails_app/config/environment.rb +2 -0
- data/spec/rails_app/config/environments/test.rb +10 -0
- data/spec/rails_app/config/initializers/assets.rb +1 -0
- data/spec/rails_app/config/routes.rb +3 -0
- data/spec/rails_app/config.ru +5 -0
- data/spec/rails_app/log/.keep +0 -0
- data/spec/rails_app/tmp/.keep +0 -0
- data/spec/spec_helper.rb +3 -8
- data/spec/support/fixtures/message.rb +40 -0
- data/spec/unit/css_loaders/network_loader_spec.rb +1 -1
- data/spec/unit/customized_premailer_spec.rb +32 -40
- metadata +35 -31
- data/lib/premailer/rails/css_loaders/cache_loader.rb +0 -29
- data/spec/integration/hook_registration_spec.rb +0 -11
- data/spec/support/stubs/action_mailer.rb +0 -5
- data/spec/support/stubs/rails.rb +0 -51
@@ -1,186 +1,217 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Premailer::Rails::CSSHelper do
|
4
|
-
|
5
|
-
|
4
|
+
# Reset the CSS cache:
|
5
|
+
after do
|
6
|
+
Premailer::Rails::CSSHelper.cache = {}
|
7
|
+
end
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
def css_for_url(path)
|
10
|
+
Premailer::Rails::CSSHelper.css_for_url(path)
|
11
|
+
end
|
12
|
+
|
13
|
+
def css_for_doc(doc)
|
14
|
+
Premailer::Rails::CSSHelper.css_for_doc(doc)
|
15
|
+
end
|
16
|
+
|
17
|
+
def expect_file(path, content='file content')
|
18
|
+
path = "#{Rails.root}/#{path}"
|
19
|
+
allow(File).to receive(:file?).with(path).and_return(true)
|
20
|
+
expect(File).to receive(:read).with(path).and_return(content)
|
21
|
+
end
|
12
22
|
|
13
|
-
|
14
|
-
|
23
|
+
describe '#css_for_doc' do
|
24
|
+
let(:html) { Fixtures::HTML.with_css_links(*files) }
|
25
|
+
let(:doc) { Nokogiri(html) }
|
26
|
+
|
27
|
+
context 'when HTML contains linked CSS files' do
|
28
|
+
let(:files) { %w[ stylesheets/base.css stylesheets/font.css ] }
|
29
|
+
|
30
|
+
it 'returns the content of both files concatenated' do
|
31
|
+
allow(Premailer::Rails::CSSHelper).to \
|
32
|
+
receive(:css_for_url)
|
33
|
+
.with('http://example.com/stylesheets/base.css')
|
34
|
+
.and_return('content of base.css')
|
35
|
+
allow(Premailer::Rails::CSSHelper).to \
|
36
|
+
receive(:css_for_url)
|
37
|
+
.with('http://example.com/stylesheets/font.css')
|
38
|
+
.and_return('content of font.css')
|
39
|
+
|
40
|
+
expect(css_for_doc(doc)).to eq("content of base.css\ncontent of font.css")
|
15
41
|
end
|
42
|
+
end
|
16
43
|
|
17
|
-
|
18
|
-
|
44
|
+
context 'when HTML contains ignored links' do
|
45
|
+
let(:files) { ['ignore.css', 'data-premailer' => 'ignore'] }
|
46
|
+
|
47
|
+
it 'ignores links' do
|
48
|
+
expect(Premailer::Rails::CSSHelper).to_not receive(:css_for_url)
|
49
|
+
css_for_doc(doc)
|
19
50
|
end
|
51
|
+
end
|
52
|
+
end
|
20
53
|
|
21
|
-
|
22
|
-
|
23
|
-
|
54
|
+
describe '#css_for_url' do
|
55
|
+
context 'when path is a url' do
|
56
|
+
it 'loads the CSS at the local path' do
|
57
|
+
expect_file('public/stylesheets/base.css')
|
58
|
+
|
59
|
+
css_for_url('http://example.com/stylesheets/base.css?test')
|
24
60
|
end
|
61
|
+
end
|
25
62
|
|
26
|
-
|
27
|
-
|
28
|
-
|
63
|
+
context 'when path is a relative url' do
|
64
|
+
it 'loads the CSS at the local path' do
|
65
|
+
expect_file('public/stylesheets/base.css')
|
66
|
+
css_for_url('/stylesheets/base.css?test')
|
67
|
+
end
|
68
|
+
end
|
29
69
|
|
30
|
-
|
31
|
-
|
70
|
+
context 'when cache is enabled' do
|
71
|
+
before do
|
72
|
+
allow(Premailer::Rails::CSSHelper).to receive(:cache_enabled?).and_return(true)
|
73
|
+
end
|
32
74
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
.with('http://example.com/stylesheets/base.css')
|
37
|
-
.and_return('content of base.css')
|
38
|
-
allow(Premailer::Rails::CSSHelper).to \
|
39
|
-
receive(:css_for_url)
|
40
|
-
.with('http://example.com/stylesheets/font.css')
|
41
|
-
.and_return('content of font.css')
|
75
|
+
context 'when file is cached' do
|
76
|
+
it 'returns the cached value' do
|
77
|
+
Premailer::Rails::CSSHelper.cache['http://example.com/stylesheets/base.css'] = 'content of base.css'
|
42
78
|
|
43
|
-
|
44
|
-
|
79
|
+
expect(css_for_url('http://example.com/stylesheets/base.css')).to \
|
80
|
+
eq('content of base.css')
|
45
81
|
end
|
82
|
+
end
|
83
|
+
end
|
46
84
|
|
47
|
-
|
48
|
-
|
85
|
+
context 'when cache is disabled' do
|
86
|
+
before do
|
87
|
+
allow(Premailer::Rails::CSSHelper).to receive(:cache_enabled?).and_return(false)
|
88
|
+
end
|
49
89
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
90
|
+
it 'does not return cached values' do
|
91
|
+
Premailer::Rails::CSSHelper.cache['http://example.com/stylesheets/base.css'] = 'cached content'
|
92
|
+
content = 'new content of base.css'
|
93
|
+
expect_file('public/stylesheets/base.css', content)
|
94
|
+
|
95
|
+
expect(css_for_url('http://example.com/stylesheets/base.css')).to eq(content)
|
55
96
|
end
|
97
|
+
end
|
56
98
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
99
|
+
context 'when Rails asset pipeline is used' do
|
100
|
+
before do
|
101
|
+
allow(Rails.configuration)
|
102
|
+
.to receive(:assets).and_return(double(prefix: '/assets'))
|
103
|
+
allow(Rails.configuration)
|
104
|
+
.to receive(:relative_url_root).and_return(nil)
|
105
|
+
end
|
61
106
|
|
62
|
-
|
63
|
-
|
107
|
+
context 'and a precompiled file exists' do
|
108
|
+
it 'returns that file' do
|
109
|
+
path = '/assets/email-digest.css'
|
110
|
+
content = 'read from file'
|
111
|
+
expect_file("public#{path}", content)
|
112
|
+
expect(css_for_url(path)).to eq(content)
|
64
113
|
end
|
114
|
+
end
|
65
115
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
css_for_url('/stylesheets/base.css?test')
|
70
|
-
end
|
71
|
-
end
|
116
|
+
context "when find_sources raises TypeError" do
|
117
|
+
let(:response) { 'content of base.css' }
|
118
|
+
let(:uri) { URI('http://example.com/assets/base.css') }
|
72
119
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
'
|
77
|
-
|
78
|
-
)
|
120
|
+
it "falls back to Net::HTTP" do
|
121
|
+
expect(Rails.application.assets_manifest).to \
|
122
|
+
receive(:find_sources)
|
123
|
+
.with('base.css')
|
124
|
+
.and_raise(TypeError)
|
79
125
|
|
80
|
-
|
81
|
-
|
82
|
-
|
126
|
+
allow(Net::HTTP).to \
|
127
|
+
receive(:get).with(uri).and_return(response)
|
128
|
+
expect(css_for_url('http://example.com/assets/base.css')).to \
|
129
|
+
eq(response)
|
83
130
|
end
|
131
|
+
end
|
84
132
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
'http://example.com/stylesheets/base.css',
|
89
|
-
'cached content of base.css'
|
90
|
-
)
|
91
|
-
content = 'new content of base.css'
|
92
|
-
expect_file('public/stylesheets/base.css', content)
|
93
|
-
allow(Rails.env).to receive(:development?).and_return(true)
|
94
|
-
|
95
|
-
expect(css_for_url('http://example.com/stylesheets/base.css')).to eq(content)
|
96
|
-
end
|
97
|
-
end
|
133
|
+
context "when find_sources raises Errno::ENOENT" do
|
134
|
+
let(:response) { 'content of base.css' }
|
135
|
+
let(:uri) { URI('http://example.com/assets/base.css') }
|
98
136
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
.
|
103
|
-
|
104
|
-
.to receive(:relative_url_root).and_return(nil)
|
105
|
-
end
|
137
|
+
it "falls back to Net::HTTP" do
|
138
|
+
expect(Rails.application.assets_manifest).to \
|
139
|
+
receive(:find_sources)
|
140
|
+
.with('base.css')
|
141
|
+
.and_raise(Errno::ENOENT)
|
106
142
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
end
|
114
|
-
end
|
143
|
+
allow(Net::HTTP).to \
|
144
|
+
receive(:get).with(uri).and_return(response)
|
145
|
+
expect(css_for_url('http://example.com/assets/base.css')).to \
|
146
|
+
eq(response)
|
147
|
+
end
|
148
|
+
end
|
115
149
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
150
|
+
it 'returns the content of the file compiled by Rails' do
|
151
|
+
expect(Rails.application.assets_manifest).to \
|
152
|
+
receive(:find_sources)
|
153
|
+
.with('base.css')
|
154
|
+
.and_return(['content of base.css'])
|
121
155
|
|
122
|
-
|
123
|
-
|
124
|
-
|
156
|
+
expect(css_for_url('http://example.com/assets/base.css')).to \
|
157
|
+
eq('content of base.css')
|
158
|
+
end
|
125
159
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
160
|
+
it 'returns same file when path contains file fingerprint' do
|
161
|
+
expect(Rails.application.assets_manifest).to \
|
162
|
+
receive(:find_sources)
|
163
|
+
.with('base.css')
|
164
|
+
.and_return(['content of base.css'])
|
131
165
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
166
|
+
expect(css_for_url(
|
167
|
+
'http://example.com/assets/base-089e35bd5d84297b8d31ad552e433275.css'
|
168
|
+
)).to eq('content of base.css')
|
169
|
+
end
|
136
170
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
171
|
+
context 'when asset can not be found' do
|
172
|
+
let(:response) { 'content of base.css' }
|
173
|
+
let(:path) { '/assets/base-089e35bd5d84297b8d31ad552e433275.css' }
|
174
|
+
let(:url) { "http://assets.example.com#{path}" }
|
175
|
+
let(:asset_host) { 'http://assets.example.com' }
|
142
176
|
|
143
|
-
|
144
|
-
|
145
|
-
|
177
|
+
before do
|
178
|
+
allow(Rails.application.assets_manifest).to \
|
179
|
+
receive(:find_sources).and_return([])
|
146
180
|
|
147
|
-
|
148
|
-
|
149
|
-
|
181
|
+
config = double(asset_host: asset_host)
|
182
|
+
allow(Rails.configuration).to \
|
183
|
+
receive(:action_controller).and_return(config)
|
150
184
|
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
end
|
185
|
+
allow(Net::HTTP).to \
|
186
|
+
receive(:get).with(URI(url)).and_return(response)
|
187
|
+
end
|
155
188
|
|
156
|
-
|
157
|
-
|
158
|
-
|
189
|
+
it 'requests the file' do
|
190
|
+
expect(css_for_url(url)).to eq('content of base.css')
|
191
|
+
end
|
159
192
|
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
193
|
+
context 'when file url does not include the host' do
|
194
|
+
it 'requests the file using the asset host as host' do
|
195
|
+
expect(css_for_url(path)).to eq('content of base.css')
|
196
|
+
end
|
164
197
|
|
165
|
-
|
166
|
-
|
198
|
+
context 'and the asset host uses protocol relative scheme' do
|
199
|
+
let(:asset_host) { '//assets.example.com' }
|
167
200
|
|
168
|
-
|
169
|
-
|
170
|
-
end
|
171
|
-
end
|
201
|
+
it 'requests the file using http as the scheme' do
|
202
|
+
expect(css_for_url(path)).to eq('content of base.css')
|
172
203
|
end
|
173
204
|
end
|
174
205
|
end
|
206
|
+
end
|
207
|
+
end
|
175
208
|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
end
|
183
|
-
end
|
209
|
+
context 'when static stylesheets are used' do
|
210
|
+
it 'returns the content of the static file' do
|
211
|
+
content = 'content of base.css'
|
212
|
+
expect_file('public/stylesheets/base.css', content)
|
213
|
+
loaded_content = css_for_url('http://example.com/stylesheets/base.css')
|
214
|
+
expect(loaded_content).to eq(content)
|
184
215
|
end
|
185
216
|
end
|
186
217
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'ActionMailer::Base delivery' do
|
4
|
+
it 'delivers email with inlined CSS' do
|
5
|
+
WelcomeMailer.welcome_email("world").deliver_now
|
6
|
+
|
7
|
+
mail = ActionMailer::Base.deliveries.last
|
8
|
+
expect(mail).to be_present
|
9
|
+
body = mail.html_part.body.to_s
|
10
|
+
expect(body).to be_present
|
11
|
+
expect(body).to include(%{<p style="font-size: 12px;">Hello world</p>})
|
12
|
+
end
|
13
|
+
end
|
@@ -6,7 +6,7 @@ describe Premailer::Rails::Hook do
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def body_content(message)
|
9
|
-
Nokogiri::HTML(message.html_string).at('body').content
|
9
|
+
Nokogiri::HTML(message.html_string).at('body').content.gsub("\r\n", "\n")
|
10
10
|
end
|
11
11
|
|
12
12
|
class Mail::Message
|
@@ -47,18 +47,31 @@ describe Premailer::Rails::Hook do
|
|
47
47
|
expect(processed_message.parts).to match_array(expected_parts)
|
48
48
|
end
|
49
49
|
|
50
|
-
|
51
|
-
|
50
|
+
it 'does not screw up the text by maintaining the original body encoding' do
|
51
|
+
raw_msg = Fixtures::Message.latin_message
|
52
|
+
processed_msg = Fixtures::Message.latin_message
|
53
|
+
run_hook(processed_msg)
|
54
|
+
expect(body_content(processed_msg)).to eq(body_content(raw_msg))
|
52
55
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
56
|
+
raw_msg = Fixtures::Message.non_latin_message
|
57
|
+
processed_msg = Fixtures::Message.non_latin_message
|
58
|
+
run_hook(processed_msg)
|
59
|
+
expect(body_content(processed_msg)).to eq(body_content(raw_msg))
|
60
|
+
|
61
|
+
raw_msg = Fixtures::Message.greek_message
|
62
|
+
processed_msg = Fixtures::Message.greek_message
|
63
|
+
run_hook(processed_msg)
|
64
|
+
expect(body_content(processed_msg)).to eq(body_content(raw_msg))
|
65
|
+
|
66
|
+
raw_msg = Fixtures::Message.dash_message
|
67
|
+
processed_msg = Fixtures::Message.dash_message
|
68
|
+
run_hook(processed_msg)
|
69
|
+
expect(body_content(processed_msg)).to eq(body_content(raw_msg))
|
59
70
|
end
|
60
71
|
|
61
|
-
it '
|
72
|
+
it 'supports US-ASCII output' do
|
73
|
+
Premailer::Rails.config.merge!(output_encoding: 'US-ASCII')
|
74
|
+
|
62
75
|
raw_msg = Fixtures::Message.latin_message
|
63
76
|
processed_msg = Fixtures::Message.latin_message
|
64
77
|
run_hook(processed_msg)
|
@@ -68,6 +81,18 @@ describe Premailer::Rails::Hook do
|
|
68
81
|
processed_msg = Fixtures::Message.non_latin_message
|
69
82
|
run_hook(processed_msg)
|
70
83
|
expect(body_content(processed_msg)).to eq(body_content(raw_msg))
|
84
|
+
|
85
|
+
raw_msg = Fixtures::Message.greek_message
|
86
|
+
processed_msg = Fixtures::Message.greek_message
|
87
|
+
run_hook(processed_msg)
|
88
|
+
expect(body_content(processed_msg)).to eq(body_content(raw_msg))
|
89
|
+
|
90
|
+
raw_msg = Fixtures::Message.dash_message
|
91
|
+
processed_msg = Fixtures::Message.dash_message
|
92
|
+
run_hook(processed_msg)
|
93
|
+
expect(body_content(processed_msg)).to eq(body_content(raw_msg))
|
94
|
+
ensure
|
95
|
+
Premailer::Rails.config.delete(:output_encoding)
|
71
96
|
end
|
72
97
|
|
73
98
|
it 'generates a text part from the html' do
|
@@ -91,7 +116,7 @@ describe Premailer::Rails::Hook do
|
|
91
116
|
|
92
117
|
it 'does not replace any message part' do
|
93
118
|
expect { run_hook(message) }.to_not \
|
94
|
-
change { message.all_parts.map(&:content_type) }
|
119
|
+
change { message.all_parts.map(&:content_type).sort }
|
95
120
|
end
|
96
121
|
end
|
97
122
|
|
@@ -0,0 +1 @@
|
|
1
|
+
<p>Hello <%= @greeting %></p>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require_relative 'boot'
|
2
|
+
|
3
|
+
require "action_mailer/railtie"
|
4
|
+
require "action_view/railtie"
|
5
|
+
require "sprockets/railtie"
|
6
|
+
require "rails/test_unit/railtie"
|
7
|
+
|
8
|
+
Bundler.require(*Rails.groups)
|
9
|
+
|
10
|
+
module Dummy
|
11
|
+
class Application < Rails::Application
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
Rails.application.configure do
|
2
|
+
config.cache_classes = true
|
3
|
+
config.eager_load = false
|
4
|
+
config.consider_all_requests_local = true
|
5
|
+
config.action_controller.perform_caching = false
|
6
|
+
config.action_dispatch.show_exceptions = false
|
7
|
+
config.action_controller.allow_forgery_protection = false
|
8
|
+
config.action_mailer.delivery_method = :test
|
9
|
+
config.active_support.deprecation = :stderr
|
10
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Rails.application.config.assets.version = '1.0'
|
File without changes
|
File without changes
|
data/spec/spec_helper.rb
CHANGED
@@ -11,16 +11,11 @@ if RUBY_ENGINE == 'ruby'
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
#
|
15
|
-
|
16
|
-
require
|
14
|
+
# Configure Rails Environment
|
15
|
+
ENV["RAILS_ENV"] = "test"
|
16
|
+
require File.expand_path("../../spec/rails_app/config/environment.rb", __FILE__)
|
17
17
|
|
18
|
-
require 'premailer/rails'
|
19
|
-
|
20
|
-
require 'support/stubs/action_mailer'
|
21
|
-
require 'support/stubs/rails'
|
22
18
|
require 'support/fixtures/message'
|
23
19
|
require 'support/fixtures/html'
|
24
20
|
|
25
|
-
require 'hpricot' unless RUBY_PLATFORM == 'java'
|
26
21
|
require 'nokogiri'
|
@@ -35,6 +35,30 @@ module Fixtures
|
|
35
35
|
</html>
|
36
36
|
HTML
|
37
37
|
|
38
|
+
HTML_PART_IN_GREEK = <<-HTML.encode(Encoding::ISO_8859_7)
|
39
|
+
<html>
|
40
|
+
<head>
|
41
|
+
</head>
|
42
|
+
<body>
|
43
|
+
<p>
|
44
|
+
Αα Ββ Γγ Δδ Εε Ζζ Ηη Θθ Ιι Κκ Λλ Μμ Νν Ξξ Οο Ππ Ρρ Σσ Ττ Υυ Φφ Χχ Ψψ Ωω
|
45
|
+
</p>
|
46
|
+
</body>
|
47
|
+
</html>
|
48
|
+
HTML
|
49
|
+
|
50
|
+
HTML_PART_WITH_DASHES = <<-HTML
|
51
|
+
<html>
|
52
|
+
<head>
|
53
|
+
</head>
|
54
|
+
<body>
|
55
|
+
<p>
|
56
|
+
Hello there—yes you! What's up with – pardon the interrupion – dashes? I can also do – and —.
|
57
|
+
</p>
|
58
|
+
</body>
|
59
|
+
</html>
|
60
|
+
HTML
|
61
|
+
|
38
62
|
HTML_PART_WITH_CSS = <<-HTML
|
39
63
|
<html>
|
40
64
|
<head>
|
@@ -130,6 +154,22 @@ nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
|
|
130
154
|
end
|
131
155
|
end
|
132
156
|
|
157
|
+
def greek_message
|
158
|
+
base_message.tap do |message|
|
159
|
+
message.body = HTML_PART_IN_GREEK
|
160
|
+
message.content_type 'text/html; charset=ISO-8859-7'
|
161
|
+
message.ready_to_send!
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
def dash_message
|
166
|
+
base_message.tap do |message|
|
167
|
+
message.body = HTML_PART_WITH_DASHES
|
168
|
+
message.content_type 'text/html; charset=UTF-8'
|
169
|
+
message.ready_to_send!
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
133
173
|
private
|
134
174
|
|
135
175
|
def base_message
|
@@ -18,7 +18,7 @@ describe Premailer::Rails::CSSLoaders::NetworkLoader do
|
|
18
18
|
|
19
19
|
context 'with a protocol relative URL' do
|
20
20
|
let(:url) { '//example.com/test.css' }
|
21
|
-
it { is_expected.to eq(URI("http
|
21
|
+
it { is_expected.to eq(URI("http:#{url}")) }
|
22
22
|
end
|
23
23
|
|
24
24
|
context 'with a file path' do
|