aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/CHANGELOG.md7
-rw-r--r--actionpack/lib/abstract_controller/helpers.rb7
-rw-r--r--actionpack/test/abstract/.helper_test.rb.swpbin0 -> 12288 bytes
-rw-r--r--actionpack/test/abstract/helper_test.rb20
-rw-r--r--actionpack/test/fixtures/helpers_missing/invalid_require_helper.rb5
5 files changed, 38 insertions, 1 deletions
diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md
index ea1d090bc2..3105dbcc42 100644
--- a/actionpack/CHANGELOG.md
+++ b/actionpack/CHANGELOG.md
@@ -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
parsing json params.
diff --git a/actionpack/lib/abstract_controller/helpers.rb b/actionpack/lib/abstract_controller/helpers.rb
index 5ae8c6c3b0..a928205963 100644
--- a/actionpack/lib/abstract_controller/helpers.rb
+++ b/actionpack/lib/abstract_controller/helpers.rb
@@ -150,7 +150,12 @@ module AbstractController
@error = error
@path = "helpers/#{path}.rb"
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
diff --git a/actionpack/test/abstract/.helper_test.rb.swp b/actionpack/test/abstract/.helper_test.rb.swp
new file mode 100644
index 0000000000..d029f89288
--- /dev/null
+++ b/actionpack/test/abstract/.helper_test.rb.swp
Binary files differ
diff --git a/actionpack/test/abstract/helper_test.rb b/actionpack/test/abstract/helper_test.rb
index 7960e5b55b..2cc27fbecd 100644
--- a/actionpack/test/abstract/helper_test.rb
+++ b/actionpack/test/abstract/helper_test.rb
@@ -48,6 +48,14 @@ module AbstractController
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
def setup
@controller = AbstractHelpers.new
@@ -97,5 +105,17 @@ module AbstractController
assert_equal "Hello Default", @controller.response_body
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
diff --git a/actionpack/test/fixtures/helpers_missing/invalid_require_helper.rb b/actionpack/test/fixtures/helpers_missing/invalid_require_helper.rb
new file mode 100644
index 0000000000..d8801e54d5
--- /dev/null
+++ b/actionpack/test/fixtures/helpers_missing/invalid_require_helper.rb
@@ -0,0 +1,5 @@
+require 'very_invalid_file_name'
+
+module InvalidRequireHelper
+end
+