Skip to content

Commit 010a6bd

Browse files
authored
Merge pull request #284 from timdiggins/output-underlying-load-error-when-wrapping
Output underlying load error when wrapping
2 parents 5892e38 + b18a2a5 commit 010a6bd

File tree

10 files changed

+44
-47
lines changed

10 files changed

+44
-47
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

lib/html/pipeline/autolink_filter.rb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
begin
2-
require "rinku"
3-
rescue LoadError => _
4-
raise HTML::Pipeline::MissingDependencyError, "Missing dependency 'rinku' for AutolinkFilter. See README.md for details."
5-
end
1+
HTML::Pipeline.require_dependency("rinku", "AutolinkFilter")
62

73
module HTML
84
class Pipeline

lib/html/pipeline/email_reply_filter.rb

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,5 @@
1-
begin
2-
require "escape_utils"
3-
rescue LoadError => _
4-
raise HTML::Pipeline::MissingDependencyError, "Missing dependency 'escape_utils' for EmailReplyFilter. See README.md for details."
5-
end
6-
7-
begin
8-
require "email_reply_parser"
9-
rescue LoadError => _
10-
raise HTML::Pipeline::MissingDependencyError, "Missing dependency 'email_reply_parser' for EmailReplyFilter. See README.md for details."
11-
end
1+
HTML::Pipeline.require_dependency("escape_utils", "EmailReplyFilter")
2+
HTML::Pipeline.require_dependency("email_reply_parser", "EmailReplyFilter")
123

134
module HTML
145
class Pipeline

lib/html/pipeline/emoji_filter.rb

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
require "cgi"
2-
3-
begin
4-
require "gemoji"
5-
rescue LoadError => _
6-
raise HTML::Pipeline::MissingDependencyError, "Missing dependency 'gemoji' for EmojiFilter. See README.md for details."
7-
end
2+
HTML::Pipeline.require_dependency("gemoji", "EmojiFilter")
83

94
module HTML
105
class Pipeline

lib/html/pipeline/markdown_filter.rb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
begin
2-
require "commonmarker"
3-
rescue LoadError => _
4-
raise HTML::Pipeline::MissingDependencyError, "Missing dependency 'commonmarker' for MarkdownFilter. See README.md for details."
5-
end
1+
HTML::Pipeline.require_dependency("commonmarker", "MarkdownFilter")
62

73
module HTML
84
class Pipeline

lib/html/pipeline/plain_text_input_filter.rb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
begin
2-
require "escape_utils"
3-
rescue LoadError => _
4-
raise HTML::Pipeline::MissingDependencyError, "Missing dependency 'escape_utils' for PlainTextInputFilter. See README.md for details."
5-
end
1+
HTML::Pipeline.require_dependency("escape_utils", "PlainTextInputFilter")
62

73
module HTML
84
class Pipeline

lib/html/pipeline/sanitization_filter.rb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
begin
2-
require "sanitize"
3-
rescue LoadError => _
4-
raise HTML::Pipeline::MissingDependencyError, "Missing dependency 'sanitize' for SanitizationFilter. See README.md for details."
5-
end
1+
HTML::Pipeline.require_dependency("sanitize", "SanitizationFilter")
62

73
module HTML
84
class Pipeline

lib/html/pipeline/syntax_highlight_filter.rb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
begin
2-
require "linguist"
3-
rescue LoadError => _
4-
raise HTML::Pipeline::MissingDependencyError, "Missing dependency 'github-linguist' for SyntaxHighlightFilter. See README.md for details."
5-
end
1+
HTML::Pipeline.require_dependency("linguist", "SyntaxHighlightFilter")
62

73
module HTML
84
class Pipeline

lib/html/pipeline/textile_filter.rb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
begin
2-
require "redcloth"
3-
rescue LoadError => _
4-
raise HTML::Pipeline::MissingDependencyError, "Missing dependency 'RedCloth' for TextileFilter. See README.md for details."
5-
end
1+
HTML::Pipeline.require_dependency("redcloth", "RedCloth")
62

73
module HTML
84
class Pipeline
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)