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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/main.yml +43 -0
  3. data/.solargraph.yml +16 -0
  4. data/Changelog.md +14 -2
  5. data/Gemfile +5 -2
  6. data/README.md +11 -13
  7. data/Rakefile +2 -2
  8. data/lib/roadie/asset_provider.rb +3 -1
  9. data/lib/roadie/asset_scanner.rb +6 -6
  10. data/lib/roadie/cached_provider.rb +1 -0
  11. data/lib/roadie/deduplicator.rb +1 -0
  12. data/lib/roadie/document.rb +7 -10
  13. data/lib/roadie/errors.rb +18 -14
  14. data/lib/roadie/filesystem_provider.rb +13 -3
  15. data/lib/roadie/inliner.rb +49 -19
  16. data/lib/roadie/markup_improver.rb +22 -31
  17. data/lib/roadie/net_http_provider.rb +25 -11
  18. data/lib/roadie/null_provider.rb +18 -5
  19. data/lib/roadie/null_url_rewriter.rb +6 -2
  20. data/lib/roadie/path_rewriter_provider.rb +4 -1
  21. data/lib/roadie/provider_list.rb +15 -11
  22. data/lib/roadie/rspec/asset_provider.rb +4 -1
  23. data/lib/roadie/rspec.rb +2 -2
  24. data/lib/roadie/selector.rb +15 -5
  25. data/lib/roadie/style_attribute_builder.rb +2 -1
  26. data/lib/roadie/style_block.rb +3 -3
  27. data/lib/roadie/style_property.rb +3 -2
  28. data/lib/roadie/stylesheet.rb +2 -13
  29. data/lib/roadie/url_generator.rb +24 -8
  30. data/lib/roadie/url_rewriter.rb +6 -3
  31. data/lib/roadie/utils.rb +1 -1
  32. data/lib/roadie/version.rb +1 -2
  33. data/lib/roadie.rb +23 -23
  34. data/roadie.gemspec +23 -25
  35. data/spec/hash_as_cache_store_spec.rb +1 -1
  36. data/spec/integration_spec.rb +41 -44
  37. data/spec/lib/roadie/asset_scanner_spec.rb +9 -4
  38. data/spec/lib/roadie/cached_provider_spec.rb +4 -4
  39. data/spec/lib/roadie/css_not_found_spec.rb +8 -5
  40. data/spec/lib/roadie/deduplicator_spec.rb +3 -3
  41. data/spec/lib/roadie/document_spec.rb +45 -27
  42. data/spec/lib/roadie/filesystem_provider_spec.rb +8 -10
  43. data/spec/lib/roadie/inliner_spec.rb +40 -44
  44. data/spec/lib/roadie/markup_improver_spec.rb +17 -25
  45. data/spec/lib/roadie/net_http_provider_spec.rb +8 -8
  46. data/spec/lib/roadie/null_provider_spec.rb +2 -2
  47. data/spec/lib/roadie/null_url_rewriter_spec.rb +2 -2
  48. data/spec/lib/roadie/path_rewriter_provider_spec.rb +4 -4
  49. data/spec/lib/roadie/provider_list_spec.rb +25 -21
  50. data/spec/lib/roadie/selector_spec.rb +4 -4
  51. data/spec/lib/roadie/style_attribute_builder_spec.rb +5 -5
  52. data/spec/lib/roadie/style_block_spec.rb +1 -1
  53. data/spec/lib/roadie/style_property_spec.rb +8 -8
  54. data/spec/lib/roadie/stylesheet_spec.rb +2 -20
  55. data/spec/lib/roadie/test_provider_spec.rb +4 -4
  56. data/spec/lib/roadie/url_generator_spec.rb +1 -1
  57. data/spec/lib/roadie/url_rewriter_spec.rb +6 -4
  58. data/spec/spec_helper.rb +8 -8
  59. data/spec/support/have_attribute_matcher.rb +1 -2
  60. data/spec/support/have_node_matcher.rb +3 -3
  61. data/spec/support/have_selector_matcher.rb +2 -3
  62. data/spec/support/have_styling_matcher.rb +10 -11
  63. data/spec/support/have_xpath_matcher.rb +2 -3
  64. metadata +22 -21
  65. data/.travis.yml +0 -20
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
4
- require 'roadie/rspec'
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 => "body { color: green; }",
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,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
3
+ require "spec_helper"
4
4
 
5
5
  module Roadie
6
6
  describe UrlGenerator do
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
4
- require 'shared_examples/url_rewriter'
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); Nokogiri::HTML.parse html; end
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 'url(images/map_(large_(extra)).png)'
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 'rspec/collection_matchers'
4
- require 'webmock/rspec'
3
+ require "rspec/collection_matchers"
4
+ require "webmock/rspec"
5
5
 
6
- if ENV['CI']
7
- require 'simplecov'
6
+ if ENV["CI"]
7
+ require "simplecov"
8
8
  SimpleCov.start
9
9
 
10
- require 'codecov'
10
+ require "codecov"
11
11
  SimpleCov.formatter = SimpleCov::Formatter::Codecov
12
12
  end
13
13
 
14
- $: << File.dirname(__FILE__) + '/../lib'
15
- require 'roadie'
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['./spec/support/**/*.rb'].each { |file| require file }
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 = 'body > *:first'
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 = Hash[node_attributes.map { |name, attribute| [name, attribute.value] }]
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 ||= 'body > *:first'
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)['style']
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() rules.to_s end
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(';').map { |property| parse_property(property) }
56
+ css.split(";").map { |property| parse_property(property) }
53
57
  end
54
58
 
55
59
  def parse_property(property)
56
- rule, value = property.split(':', 2).map(&:strip)
57
- [rule, normalize_quotes(value)]
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.0.0
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: 2019-10-13 00:00:00.000000000 Z
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: rspec
42
+ name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '3.0'
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: '3.0'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rspec-collection_matchers
56
+ name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.0'
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: '1.0'
68
+ version: '3.0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rubocop
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: 0.75.0
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: 0.75.0
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
- - ".travis.yml"
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.4'
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.2
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"