roadie 4.0.0 → 5.0.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 +4 -4
- data/.github/workflows/main.yml +43 -0
- data/.solargraph.yml +16 -0
- data/Changelog.md +14 -2
- data/Gemfile +5 -2
- data/README.md +11 -13
- data/Rakefile +2 -2
- data/lib/roadie/asset_provider.rb +3 -1
- data/lib/roadie/asset_scanner.rb +6 -6
- data/lib/roadie/cached_provider.rb +1 -0
- data/lib/roadie/deduplicator.rb +1 -0
- data/lib/roadie/document.rb +7 -10
- data/lib/roadie/errors.rb +18 -14
- data/lib/roadie/filesystem_provider.rb +13 -3
- data/lib/roadie/inliner.rb +49 -19
- data/lib/roadie/markup_improver.rb +22 -31
- data/lib/roadie/net_http_provider.rb +25 -11
- data/lib/roadie/null_provider.rb +18 -5
- data/lib/roadie/null_url_rewriter.rb +6 -2
- data/lib/roadie/path_rewriter_provider.rb +4 -1
- data/lib/roadie/provider_list.rb +15 -11
- data/lib/roadie/rspec/asset_provider.rb +4 -1
- data/lib/roadie/rspec.rb +2 -2
- data/lib/roadie/selector.rb +15 -5
- data/lib/roadie/style_attribute_builder.rb +2 -1
- data/lib/roadie/style_block.rb +3 -3
- data/lib/roadie/style_property.rb +3 -2
- data/lib/roadie/stylesheet.rb +2 -13
- data/lib/roadie/url_generator.rb +24 -8
- data/lib/roadie/url_rewriter.rb +6 -3
- data/lib/roadie/utils.rb +1 -1
- data/lib/roadie/version.rb +1 -2
- data/lib/roadie.rb +23 -23
- data/roadie.gemspec +23 -25
- data/spec/hash_as_cache_store_spec.rb +1 -1
- data/spec/integration_spec.rb +41 -44
- data/spec/lib/roadie/asset_scanner_spec.rb +9 -4
- data/spec/lib/roadie/cached_provider_spec.rb +4 -4
- data/spec/lib/roadie/css_not_found_spec.rb +8 -5
- data/spec/lib/roadie/deduplicator_spec.rb +3 -3
- data/spec/lib/roadie/document_spec.rb +45 -27
- data/spec/lib/roadie/filesystem_provider_spec.rb +8 -10
- data/spec/lib/roadie/inliner_spec.rb +40 -44
- data/spec/lib/roadie/markup_improver_spec.rb +17 -25
- data/spec/lib/roadie/net_http_provider_spec.rb +8 -8
- data/spec/lib/roadie/null_provider_spec.rb +2 -2
- data/spec/lib/roadie/null_url_rewriter_spec.rb +2 -2
- data/spec/lib/roadie/path_rewriter_provider_spec.rb +4 -4
- data/spec/lib/roadie/provider_list_spec.rb +25 -21
- data/spec/lib/roadie/selector_spec.rb +4 -4
- data/spec/lib/roadie/style_attribute_builder_spec.rb +5 -5
- data/spec/lib/roadie/style_block_spec.rb +1 -1
- data/spec/lib/roadie/style_property_spec.rb +8 -8
- data/spec/lib/roadie/stylesheet_spec.rb +2 -20
- data/spec/lib/roadie/test_provider_spec.rb +4 -4
- data/spec/lib/roadie/url_generator_spec.rb +1 -1
- data/spec/lib/roadie/url_rewriter_spec.rb +6 -4
- data/spec/spec_helper.rb +8 -8
- data/spec/support/have_attribute_matcher.rb +1 -2
- data/spec/support/have_node_matcher.rb +3 -3
- data/spec/support/have_selector_matcher.rb +2 -3
- data/spec/support/have_styling_matcher.rb +10 -11
- data/spec/support/have_xpath_matcher.rb +2 -3
- metadata +22 -21
- data/.travis.yml +0 -20
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "spec_helper"
|
4
|
+
require "roadie/rspec"
|
5
5
|
|
6
6
|
describe TestProvider do
|
7
7
|
subject(:provider) { TestProvider.new }
|
@@ -13,7 +13,7 @@ describe TestProvider do
|
|
13
13
|
it "finds styles from a predefined hash" do
|
14
14
|
provider = TestProvider.new({
|
15
15
|
"foo.css" => "a { color: red; }",
|
16
|
-
"bar.css" => "body { color: green; }"
|
16
|
+
"bar.css" => "body { color: green; }"
|
17
17
|
})
|
18
18
|
expect(provider.find_stylesheet("foo.css").to_s).not_to include("body")
|
19
19
|
expect(provider.find_stylesheet("bar.css").to_s).to include("body")
|
@@ -23,7 +23,7 @@ describe TestProvider do
|
|
23
23
|
it "can have a default for missing entries" do
|
24
24
|
provider = TestProvider.new({
|
25
25
|
"foo.css" => "a { color: red; }",
|
26
|
-
:default
|
26
|
+
:default => "body { color: green; }"
|
27
27
|
})
|
28
28
|
expect(provider.find_stylesheet("foo.css").to_s).not_to include("body")
|
29
29
|
expect(provider.find_stylesheet("bar.css").to_s).to include("body")
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "spec_helper"
|
4
|
+
require "shared_examples/url_rewriter"
|
5
5
|
|
6
6
|
module Roadie
|
7
7
|
describe UrlRewriter do
|
@@ -11,7 +11,9 @@ module Roadie
|
|
11
11
|
it_behaves_like "url rewriter"
|
12
12
|
|
13
13
|
describe "transforming DOM trees" do
|
14
|
-
def dom_document(html)
|
14
|
+
def dom_document(html)
|
15
|
+
Nokogiri::HTML.parse html
|
16
|
+
end
|
15
17
|
|
16
18
|
it "rewrites all a[href]" do
|
17
19
|
expect(generator).to receive(:generate_url).with("some/path").and_return "http://foo.com/"
|
@@ -89,7 +91,7 @@ module Roadie
|
|
89
91
|
|
90
92
|
it "correctly identifies URLs with parenthesis inside them" do
|
91
93
|
expect(generator).to receive(:generate_url).with("images/map_(large_(extra)).png").and_return "x"
|
92
|
-
rewriter.transform_css
|
94
|
+
rewriter.transform_css "url(images/map_(large_(extra)).png)"
|
93
95
|
end
|
94
96
|
end
|
95
97
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "rspec/collection_matchers"
|
4
|
+
require "webmock/rspec"
|
5
5
|
|
6
|
-
if ENV[
|
7
|
-
require
|
6
|
+
if ENV["CI"]
|
7
|
+
require "simplecov"
|
8
8
|
SimpleCov.start
|
9
9
|
|
10
|
-
require
|
10
|
+
require "codecov"
|
11
11
|
SimpleCov.formatter = SimpleCov::Formatter::Codecov
|
12
12
|
end
|
13
13
|
|
14
|
-
$: << File.dirname(__FILE__) +
|
15
|
-
require
|
14
|
+
$: << File.dirname(__FILE__) + "/../lib"
|
15
|
+
require "roadie"
|
16
16
|
|
17
17
|
RSpec.configure do |config|
|
18
18
|
config.run_all_when_everything_filtered = true
|
19
19
|
end
|
20
20
|
|
21
|
-
Dir[
|
21
|
+
Dir["./spec/support/**/*.rb"].sort.each { |file| require file }
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
RSpec::Matchers.define :have_attribute do |attribute|
|
4
|
-
@selector =
|
4
|
+
@selector = "body > *:first"
|
5
5
|
|
6
6
|
chain :at_selector do |selector|
|
7
7
|
@selector = selector
|
@@ -27,4 +27,3 @@ RSpec::Matchers.define :have_attribute do |attribute|
|
|
27
27
|
node && node[attribute_name]
|
28
28
|
end
|
29
29
|
end
|
30
|
-
|
@@ -11,11 +11,11 @@ RSpec::Matchers.define :have_node do |selector|
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
failure_message { "expected document to #{name_to_sentence}#{expected_to_sentence}"}
|
15
|
-
failure_message_when_negated { "expected document to not #{name_to_sentence}#{expected_to_sentence}"}
|
14
|
+
failure_message { "expected document to #{name_to_sentence}#{expected_to_sentence}" }
|
15
|
+
failure_message_when_negated { "expected document to not #{name_to_sentence}#{expected_to_sentence}" }
|
16
16
|
|
17
17
|
def match_attributes(node_attributes)
|
18
|
-
attributes =
|
18
|
+
attributes = node_attributes.map { |name, attribute| [name, attribute.value] }.to_h
|
19
19
|
@attributes == attributes
|
20
20
|
end
|
21
21
|
end
|
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
RSpec::Matchers.define :have_selector do |selector|
|
4
4
|
match { |document| !document.css(selector).empty? }
|
5
|
-
failure_message { "expected document to have selector #{selector.inspect}"}
|
6
|
-
failure_message_when_negated { "expected document to not have selector #{selector.inspect}"}
|
5
|
+
failure_message { "expected document to have selector #{selector.inspect}" }
|
6
|
+
failure_message_when_negated { "expected document to not have selector #{selector.inspect}" }
|
7
7
|
end
|
8
|
-
|
@@ -5,7 +5,7 @@ RSpec::Matchers.define :have_styling do |rules|
|
|
5
5
|
|
6
6
|
chain(:at_selector) { |selector| @selector = selector }
|
7
7
|
match { |document|
|
8
|
-
@selector ||=
|
8
|
+
@selector ||= "body > *:first"
|
9
9
|
normalized_rules == styles_at_selector(document)
|
10
10
|
}
|
11
11
|
|
@@ -23,7 +23,7 @@ RSpec::Matchers.define :have_styling do |rules|
|
|
23
23
|
|
24
24
|
def styles_at_selector(document)
|
25
25
|
expect(document).to have_selector(@selector)
|
26
|
-
StylingExpectation.new document.at_css(@selector)[
|
26
|
+
StylingExpectation.new document.at_css(@selector)["style"]
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
@@ -42,23 +42,22 @@ class StylingExpectation
|
|
42
42
|
rules == other.rules
|
43
43
|
end
|
44
44
|
|
45
|
-
def to_s
|
45
|
+
def to_s
|
46
|
+
rules.to_s
|
47
|
+
end
|
46
48
|
|
47
49
|
protected
|
50
|
+
|
48
51
|
attr_reader :rules
|
49
52
|
|
50
53
|
private
|
54
|
+
|
51
55
|
def parse_rules(css)
|
52
|
-
css.split(
|
56
|
+
css.split(";").map { |property| parse_property(property) }
|
53
57
|
end
|
54
58
|
|
55
59
|
def parse_property(property)
|
56
|
-
rule, value = property.split(
|
57
|
-
[rule,
|
58
|
-
end
|
59
|
-
|
60
|
-
# JRuby's Nokogiri encodes quotes
|
61
|
-
def normalize_quotes(string)
|
62
|
-
string.gsub '%22', '"'
|
60
|
+
rule, value = property.split(":", 2).map(&:strip)
|
61
|
+
[rule, value]
|
63
62
|
end
|
64
63
|
end
|
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
RSpec::Matchers.define :have_xpath do |xpath|
|
4
4
|
match { |document| !document.xpath(xpath).empty? }
|
5
|
-
failure_message { "expected document to have xpath #{xpath.inspect}"}
|
6
|
-
failure_message_when_negated { "expected document to not have xpath #{xpath.inspect}"}
|
5
|
+
failure_message { "expected document to have xpath #{xpath.inspect}" }
|
6
|
+
failure_message_when_negated { "expected document to not have xpath #{xpath.inspect}" }
|
7
7
|
end
|
8
|
-
|
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:
|
4
|
+
version: 5.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Magnus Bergmark
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -39,47 +39,47 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.4'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name: rspec
|
56
|
+
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '3.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '3.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: rspec-collection_matchers
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: '1.0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: '1.0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: webmock
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -105,9 +105,10 @@ extra_rdoc_files:
|
|
105
105
|
- Changelog.md
|
106
106
|
files:
|
107
107
|
- ".autotest"
|
108
|
+
- ".github/workflows/main.yml"
|
108
109
|
- ".gitignore"
|
109
110
|
- ".rubocop.yml"
|
110
|
-
- ".
|
111
|
+
- ".solargraph.yml"
|
111
112
|
- ".yardopts"
|
112
113
|
- Changelog.md
|
113
114
|
- Gemfile
|
@@ -181,7 +182,7 @@ homepage: http://github.com/Mange/roadie
|
|
181
182
|
licenses:
|
182
183
|
- MIT
|
183
184
|
metadata: {}
|
184
|
-
post_install_message:
|
185
|
+
post_install_message:
|
185
186
|
rdoc_options: []
|
186
187
|
require_paths:
|
187
188
|
- lib
|
@@ -189,15 +190,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
189
190
|
requirements:
|
190
191
|
- - ">="
|
191
192
|
- !ruby/object:Gem::Version
|
192
|
-
version: '2.
|
193
|
+
version: '2.6'
|
193
194
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
194
195
|
requirements:
|
195
196
|
- - ">="
|
196
197
|
- !ruby/object:Gem::Version
|
197
198
|
version: '0'
|
198
199
|
requirements: []
|
199
|
-
rubygems_version: 3.0.
|
200
|
-
signing_key:
|
200
|
+
rubygems_version: 3.0.9
|
201
|
+
signing_key:
|
201
202
|
specification_version: 4
|
202
203
|
summary: Making HTML emails comfortable for the Ruby rockstars
|
203
204
|
test_files:
|
data/.travis.yml
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
sudo: false
|
2
|
-
language: ruby
|
3
|
-
rvm:
|
4
|
-
- 2.4
|
5
|
-
- 2.5
|
6
|
-
- 2.6
|
7
|
-
- jruby
|
8
|
-
- rbx
|
9
|
-
before_install:
|
10
|
-
- gem install bundler -v '1.17.3'
|
11
|
-
matrix:
|
12
|
-
allow_failures:
|
13
|
-
# Rubinius and JRuby have a lot of trouble and no large following, so I'm going to
|
14
|
-
# allow failures on it until it gets more stable on Travis / Real Life(tm).
|
15
|
-
# Let me know if you need it. Patches are welcome!
|
16
|
-
- rvm: jruby
|
17
|
-
- rvm: rbx
|
18
|
-
fast_finish: true
|
19
|
-
cache: bundler
|
20
|
-
script: "rake"
|