aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2004-12-22 13:44:16 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2004-12-22 13:44:16 +0000
commita04b1f3d8a54aaec988c264267cf9f2c2340f275 (patch)
tree024a0ed444df4dd0f3414b789b1018f9bd20ebad
parentf408fcd610c83d29effba92db29c35f7653187b6 (diff)
downloadrails-a04b1f3d8a54aaec988c264267cf9f2c2340f275.tar.gz
rails-a04b1f3d8a54aaec988c264267cf9f2c2340f275.tar.bz2
rails-a04b1f3d8a54aaec988c264267cf9f2c2340f275.zip
Added more informative exception when using helper :some_helper and the helper requires another file that fails, you'll get an error message tells you what file actually failed to load, rather than falling back on assuming it was the helper file itself #346 [dblack]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@250 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r--actionpack/CHANGELOG3
-rw-r--r--actionpack/lib/action_controller/helpers.rb9
-rw-r--r--actionpack/test/controller/helper_test.rb8
3 files changed, 17 insertions, 3 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG
index ae817a45d3..81acf0c9dd 100644
--- a/actionpack/CHANGELOG
+++ b/actionpack/CHANGELOG
@@ -1,5 +1,8 @@
*SVN*
+* Added more informative exception when using helper :some_helper and the helper requires another file that fails, you'll get an
+ error message tells you what file actually failed to load, rather than falling back on assuming it was the helper file itself #346 [dblack]
+
* Fixed regression with Base#reset_session that wouldn't use the the DEFAULT_SESSION_OPTIONS [adam@the-kramers.net]
* Fixed error rendering of rxml documents to not just swallow the exception and return 0 (still not guessing the right line, but hey)
diff --git a/actionpack/lib/action_controller/helpers.rb b/actionpack/lib/action_controller/helpers.rb
index 06bbd56283..0e1ff7dd16 100644
--- a/actionpack/lib/action_controller/helpers.rb
+++ b/actionpack/lib/action_controller/helpers.rb
@@ -55,8 +55,13 @@ module ActionController #:nodoc:
class_name = Inflector.camelize(file_name)
begin
require_dependency(file_name)
- rescue LoadError
- raise LoadError, "Missing helper file helpers/#{file_name}.rb"
+ rescue LoadError => load_error
+ requiree = / -- (.*?)(\.rb)?$/.match(load_error).to_a[1]
+ if requiree == file_name
+ raise LoadError, "Missing helper file helpers/#{file_name}.rb"
+ else
+ raise LoadError, "Can't load file: #{requiree}"
+ end
end
raise ArgumentError, "Missing #{class_name} module in helpers/#{file_name}.rb" unless Object.const_defined?(class_name)
add_template_helper(Object.const_get(class_name))
diff --git a/actionpack/test/controller/helper_test.rb b/actionpack/test/controller/helper_test.rb
index 9d1da53241..b824e40125 100644
--- a/actionpack/test/controller/helper_test.rb
+++ b/actionpack/test/controller/helper_test.rb
@@ -70,6 +70,12 @@ class HelperTest < Test::Unit::TestCase
assert_raise(LoadError) { @controller_class.helper :missing }
end
+ def test_declare_missing_file_from_helper
+ require 'broken_helper'
+ rescue LoadError => e
+ assert_nil /\bbroken_helper\b/.match(e.to_s)[1]
+ end
+
def test_helper_block
assert_nothing_raised {
@controller_class.helper { def block_helper_method; end }
@@ -107,4 +113,4 @@ class HelperTest < Test::Unit::TestCase
self.class.const_set('TestHelper', helper_module)
$VERBOSE = old_verbose
end
-end \ No newline at end of file
+end