diff options
-rw-r--r-- | actionpack/CHANGELOG | 3 | ||||
-rw-r--r-- | actionpack/lib/action_controller/helpers.rb | 9 | ||||
-rw-r--r-- | actionpack/test/controller/helper_test.rb | 8 |
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 |