Use LoadError#original_message if available in depend_on

did_you_mean 1.5.0 will add suggestions to `LoadError`. This means that
`LoadError#message` will now return a new string on each invocation, and
mutating the result will no longer modify the error's message.
This commit is contained in:
Eugene Kenny 2020-11-02 20:54:29 +00:00
parent 81ee5dcdf4
commit 94ab712585
2 changed files with 13 additions and 1 deletions

@ -375,7 +375,12 @@ def depend_on(file_name, message = "No such file to load -- %s.rb")
require_or_load(path || file_name)
rescue LoadError => load_error
if file_name = load_error.message[/ -- (.*?)(\.rb)?$/, 1]
load_error.message.replace(message % file_name)
load_error_message = if load_error.respond_to?(:original_message)
load_error.original_message
else
load_error.message
end
load_error_message.replace(message % file_name)
load_error.copy_blame!(load_error)
end
raise

@ -42,6 +42,13 @@ def test_depend_on_path
assert_equal expected.path, e.path
end
def test_depend_on_message
e = assert_raises(LoadError) do
ActiveSupport::Dependencies.depend_on "omgwtfbbq"
end
assert_equal "No such file to load -- omgwtfbbq.rb", e.message
end
def test_require_dependency_accepts_an_object_which_implements_to_path
o = Object.new
def o.to_path; "dependencies/service_one"; end