roadie 3.0.4 → 3.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Changelog.md +9 -1
- data/README.md +1 -1
- data/lib/roadie.rb +2 -0
- data/lib/roadie/asset_scanner.rb +1 -1
- data/lib/roadie/url_generator.rb +6 -16
- data/lib/roadie/utils.rb +20 -0
- data/lib/roadie/version.rb +1 -1
- data/spec/lib/roadie/asset_scanner_spec.rb +9 -0
- data/spec/lib/roadie/url_generator_spec.rb +4 -0
- data/spec/lib/roadie/utils_spec.rb +27 -0
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 149e5b897cfd1808633c9b03e3e4b35fc08f23d4
|
4
|
+
data.tar.gz: 1bc5e6e5526f128be884f85a06923f2fbf50ce30
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3f0f67f6b32561f32b021f09d374b07bb75a7d1e644b0d04e551ba89a135725019c4347b3a2fcf32941a5a15b2b8941dd11dde706d636da567727cab8b69683
|
7
|
+
data.tar.gz: ff65e28f825d90b61959eab22e916046835efe6305b37af0d19a7526dfd760ec59a767d28517dda26883f5572866e67e431f2f3fe35f0cb9db9c67add5da9b0a
|
data/Changelog.md
CHANGED
@@ -1,9 +1,17 @@
|
|
1
1
|
### dev
|
2
2
|
|
3
|
-
[full changelog](https://github.com/Mange/roadie/compare/v3.0.
|
3
|
+
[full changelog](https://github.com/Mange/roadie/compare/v3.0.5...master)
|
4
4
|
|
5
5
|
* Nothing yet.
|
6
6
|
|
7
|
+
### 3.0.5
|
8
|
+
|
9
|
+
[full changelog](https://github.com/Mange/roadie/compare/v3.0.4...v3.0.5)
|
10
|
+
|
11
|
+
* Bug fixes:
|
12
|
+
* Don't try to inline external stylesheets. (#106)
|
13
|
+
* Don't generate absolute URLs for anchor links. (Mange/roadie-rails#40)
|
14
|
+
|
7
15
|
### 3.0.4
|
8
16
|
|
9
17
|
[full changelog](https://github.com/Mange/roadie/compare/v3.0.3...v3.0.4)
|
data/README.md
CHANGED
data/lib/roadie.rb
CHANGED
data/lib/roadie/asset_scanner.rb
CHANGED
@@ -80,7 +80,7 @@ module Roadie
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def read_link_element(element)
|
83
|
-
if element['media'] != "print" && element["href"]
|
83
|
+
if element['media'] != "print" && element["href"] && !Utils.path_is_absolute?(element["href"])
|
84
84
|
asset_provider.find_stylesheet! element['href']
|
85
85
|
end
|
86
86
|
end
|
data/lib/roadie/url_generator.rb
CHANGED
@@ -32,7 +32,8 @@ module Roadie
|
|
32
32
|
|
33
33
|
# Generate an absolute URL from a relative URL.
|
34
34
|
#
|
35
|
-
# If the passed path is already an absolute URL
|
35
|
+
# If the passed path is already an absolute URL or just an anchor
|
36
|
+
# reference, it will be returned as-is.
|
36
37
|
# If passed a blank path, the "root URL" will be returned. The root URL is
|
37
38
|
# the URL that the {#url_options} would generate by themselves.
|
38
39
|
#
|
@@ -56,8 +57,9 @@ module Roadie
|
|
56
57
|
# @return [String] an absolute URL
|
57
58
|
def generate_url(path, base = "/")
|
58
59
|
return root_uri.to_s if path.nil? or path.empty?
|
60
|
+
return path if path_is_anchor?(path)
|
59
61
|
return add_scheme(path) if path_is_schemeless?(path)
|
60
|
-
return path if path_is_absolute?(path)
|
62
|
+
return path if Utils.path_is_absolute?(path)
|
61
63
|
|
62
64
|
combine_segments(root_uri, base, path).to_s
|
63
65
|
end
|
@@ -113,20 +115,8 @@ module Roadie
|
|
113
115
|
path =~ %r{^//\w}
|
114
116
|
end
|
115
117
|
|
116
|
-
def
|
117
|
-
|
118
|
-
# URI for URLs that's easy to determine to be absolute.
|
119
|
-
# URLs starting with a scheme (http:, data:) are absolute.
|
120
|
-
#
|
121
|
-
# URLs that start with double slashes (//css/app.css) are also absolute
|
122
|
-
# in modern browsers, but most email clients do not understand them it.
|
123
|
-
path =~ %r{^\w+:} || !parse_path(path).relative?
|
124
|
-
end
|
125
|
-
|
126
|
-
def parse_path(path)
|
127
|
-
URI.parse(path)
|
128
|
-
rescue URI::InvalidURIError => error
|
129
|
-
raise InvalidUrlPath.new(path, error)
|
118
|
+
def path_is_anchor?(path)
|
119
|
+
path.start_with? '#'
|
130
120
|
end
|
131
121
|
|
132
122
|
VALID_OPTIONS = Set[:host, :port, :path, :protocol, :scheme].freeze
|
data/lib/roadie/utils.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Roadie
|
2
|
+
module Utils
|
3
|
+
def path_is_absolute?(path)
|
4
|
+
# Ruby's URI is pretty unforgiving, but roadie aims to be. Don't involve
|
5
|
+
# URI for URLs that's easy to determine to be absolute.
|
6
|
+
# URLs starting with a scheme (http:, data:) are absolute.
|
7
|
+
#
|
8
|
+
# URLs that start with double slashes (//css/app.css) are also absolute
|
9
|
+
# in modern browsers, but most email clients do not understand them.
|
10
|
+
return true if path =~ %r{^(\w+:|//)}
|
11
|
+
|
12
|
+
begin
|
13
|
+
!URI.parse(path).relative?
|
14
|
+
rescue URI::InvalidURIError => error
|
15
|
+
raise InvalidUrlPath.new(path, error)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
module_function :path_is_absolute?
|
19
|
+
end
|
20
|
+
end
|
data/lib/roadie/version.rb
CHANGED
@@ -77,6 +77,15 @@ module Roadie
|
|
77
77
|
expect(scanner.find_css).to eq([])
|
78
78
|
end
|
79
79
|
|
80
|
+
it "does not look for externally referenced stylesheets" do
|
81
|
+
dom = dom_fragment %(<link rel="stylesheet" href="//example.com/assets/style.css">)
|
82
|
+
expect(provider).not_to receive(:find_stylesheet!)
|
83
|
+
|
84
|
+
scanner = AssetScanner.new dom, provider
|
85
|
+
|
86
|
+
expect(scanner.find_css).to eq([])
|
87
|
+
end
|
88
|
+
|
80
89
|
it "does not look for ignored referenced stylesheets" do
|
81
90
|
dom = dom_fragment %(<link rel="stylesheet" href="/error.css" data-roadie-ignore>)
|
82
91
|
expect(provider).not_to receive(:find_stylesheet!)
|
@@ -60,6 +60,10 @@ module Roadie
|
|
60
60
|
expect(url("http://foo.com/", host: "bar.com")).to eq("http://foo.com/")
|
61
61
|
end
|
62
62
|
|
63
|
+
it "returns the original URL if it is just an anchor" do
|
64
|
+
expect(url("#top", host: "bar.com")).to eq("#top")
|
65
|
+
end
|
66
|
+
|
63
67
|
it "returns the base URL for blank paths" do
|
64
68
|
expect(url("", host: "foo.com")).to eq("http://foo.com")
|
65
69
|
expect(url(nil, host: "foo.com")).to eq("http://foo.com")
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module Roadie
|
4
|
+
describe Utils, "path_is_absolute?" do
|
5
|
+
RSpec::Matchers.define :be_absolute do
|
6
|
+
match { |path| Utils.path_is_absolute?(path) }
|
7
|
+
end
|
8
|
+
|
9
|
+
it "detects absolute HTTP URLs" do
|
10
|
+
expect("http://example.com").to be_absolute
|
11
|
+
expect("https://example.com").to be_absolute
|
12
|
+
expect("https://example.com/path?foo=bar").to be_absolute
|
13
|
+
end
|
14
|
+
|
15
|
+
it "detects absolute URLs without schemes" do
|
16
|
+
expect("//example.com").to be_absolute
|
17
|
+
expect("//").to be_absolute
|
18
|
+
end
|
19
|
+
|
20
|
+
it "detects relative URLs without hosts" do
|
21
|
+
expect("path/to/me").not_to be_absolute
|
22
|
+
expect("/path/to/me").not_to be_absolute
|
23
|
+
expect("../../path").not_to be_absolute
|
24
|
+
expect("/").not_to be_absolute
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roadie
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Magnus Bergmark
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -108,6 +108,7 @@ files:
|
|
108
108
|
- lib/roadie/upgrade_guide.rb
|
109
109
|
- lib/roadie/url_generator.rb
|
110
110
|
- lib/roadie/url_rewriter.rb
|
111
|
+
- lib/roadie/utils.rb
|
111
112
|
- lib/roadie/version.rb
|
112
113
|
- roadie.gemspec
|
113
114
|
- spec/fixtures/big_em.css
|
@@ -130,6 +131,7 @@ files:
|
|
130
131
|
- spec/lib/roadie/test_provider_spec.rb
|
131
132
|
- spec/lib/roadie/url_generator_spec.rb
|
132
133
|
- spec/lib/roadie/url_rewriter_spec.rb
|
134
|
+
- spec/lib/roadie/utils_spec.rb
|
133
135
|
- spec/shared_examples/asset_provider.rb
|
134
136
|
- spec/shared_examples/url_rewriter.rb
|
135
137
|
- spec/spec_helper.rb
|
@@ -158,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
158
160
|
version: '0'
|
159
161
|
requirements: []
|
160
162
|
rubyforge_project:
|
161
|
-
rubygems_version: 2.
|
163
|
+
rubygems_version: 2.4.6
|
162
164
|
signing_key:
|
163
165
|
specification_version: 4
|
164
166
|
summary: Making HTML emails comfortable for the Ruby rockstars
|
@@ -183,6 +185,7 @@ test_files:
|
|
183
185
|
- spec/lib/roadie/test_provider_spec.rb
|
184
186
|
- spec/lib/roadie/url_generator_spec.rb
|
185
187
|
- spec/lib/roadie/url_rewriter_spec.rb
|
188
|
+
- spec/lib/roadie/utils_spec.rb
|
186
189
|
- spec/shared_examples/asset_provider.rb
|
187
190
|
- spec/shared_examples/url_rewriter.rb
|
188
191
|
- spec/spec_helper.rb
|