1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Show real LoadError on helpers require

When helper try to require missing file rails will throw exception about
missing helper.

  # app/helpers/my_helper.rb

  require 'missing'

  module MyHelper
  end

And when we try do load helper

  class ApplicationController
    helper :my
  end

Rails will throw exception. This is wrong because there is a helper
file.

  Missing helper file helpers/my_helper.rb

Now when helper try to require non-existed file rails will throw proper
exception.

  No such file to load -- missing
This commit is contained in:
Piotr Niełacny 2013-05-16 15:37:19 +02:00 committed by LTe
parent cd0d5902dd
commit e0438b1c07
5 changed files with 38 additions and 1 deletions

View file

@ -1,3 +1,10 @@
* Fix an issue where rails raise exception about missing helper where it
should throw `LoadError`. When helper file exists and only loaded file from
this helper does not exist rails should throw LoadError instead of
`MissingHelperError`.
*Piotr Niełacny*
* Fix `ActionDispatch::ParamsParser#parse_formatted_parameters` to rewind body input stream on * Fix `ActionDispatch::ParamsParser#parse_formatted_parameters` to rewind body input stream on
parsing json params. parsing json params.

View file

@ -150,7 +150,12 @@ module AbstractController
@error = error @error = error
@path = "helpers/#{path}.rb" @path = "helpers/#{path}.rb"
set_backtrace error.backtrace set_backtrace error.backtrace
super("Missing helper file helpers/%s.rb" % path)
if error.path =~ /^#{path}(\.rb)?$/
super("Missing helper file helpers/%s.rb" % path)
else
raise error
end
end end
end end

Binary file not shown.

View file

@ -48,6 +48,14 @@ module AbstractController
end end
end end
class AbstractInvalidHelpers < AbstractHelpers
include ActionController::Helpers
path = File.join(File.expand_path('../../fixtures', __FILE__), "helpers_missing")
$:.unshift(path)
self.helpers_path = path
end
class TestHelpers < ActiveSupport::TestCase class TestHelpers < ActiveSupport::TestCase
def setup def setup
@controller = AbstractHelpers.new @controller = AbstractHelpers.new
@ -97,5 +105,17 @@ module AbstractController
assert_equal "Hello Default", @controller.response_body assert_equal "Hello Default", @controller.response_body
end end
end end
class InvalidHelpersTest < ActiveSupport::TestCase
def test_controller_raise_error_about_real_require_problem
e = assert_raise(LoadError) { AbstractInvalidHelpers.helper(:invalid_require) }
assert_equal "No such file to load -- very_invalid_file_name", e.message
end
def test_controller_raise_error_about_missing_helper
e = assert_raise(Helpers::ClassMethods::MissingHelperError) { AbstractInvalidHelpers.helper(:missing) }
assert_equal "Missing helper file helpers/missing_helper.rb", e.message
end
end
end end
end end

View file

@ -0,0 +1,5 @@
require 'very_invalid_file_name'
module InvalidRequireHelper
end