Skip to content

Commit 334188f

Browse files
committed
utility method to rescue and replace LoadError
1 parent 5892e38 commit 334188f

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

lib/html/pipeline.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ class Pipeline
4444
autoload :TextFilter, 'html/pipeline/text_filter'
4545

4646
class MissingDependencyError < LoadError; end
47+
def self.require_dependency(name, requirer)
48+
require name
49+
rescue LoadError => e
50+
raise MissingDependencyError,
51+
"Missing dependency '#{name}' for #{requirer}. See README.md for details.\n#{e.class.name}: #{e}"
52+
end
4753

4854
# Our DOM implementation.
4955
DocumentFragment = Nokogiri::HTML::DocumentFragment
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# encoding: utf-8
2+
require "test_helper"
3+
4+
class HTML::Pipeline::RequireHelperTest < Minitest::Test
5+
6+
def test_works_with_existing
7+
HTML::Pipeline.require_dependency('rake', 'SomeClass')
8+
end
9+
10+
def test_raises_mising_dependency_error
11+
assert_raises HTML::Pipeline::MissingDependencyError do
12+
HTML::Pipeline.require_dependency('non-existant', 'SomeClass')
13+
end
14+
end
15+
16+
def test_raises_error_including_message
17+
error = assert_raises(LoadError) do
18+
HTML::Pipeline.require_dependency('non-existant', 'SomeClass')
19+
end
20+
assert_includes(error.message, "Missing dependency 'non-existant' for SomeClass. See README.md for details.")
21+
end
22+
23+
def test_raises_error_includes_underlying_message
24+
error = assert_raises LoadError do
25+
HTML::Pipeline.require_dependency('non-existant', 'SomeClass')
26+
end
27+
assert_includes(error.message, "LoadError: cannot load such file")
28+
end
29+
end

0 commit comments

Comments
 (0)