diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 8335e6e0740bfd669543306a1478f422000e3993..54b414a30ec7231b3988327d6456673e3ccfb103 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,3 +1,10 @@ +*SVN* + +* Do not raise an exception when default helper is missing; log a debug message instead. It's nice to delete empty helpers. [Jeremy Kemper] + +* Controllers with acronyms in their names (e.g. PDFController) require the correct default helper (PDFHelper in file pdf_helper.rb). #2262 [jeff@opendbms.com] + + *1.11.0* (November 7th, 2005) * Added request as instance method to views, so you can do <%= request.env["HTTP_REFERER"] %>, just like you can already access response, session, and the likes [DHH] diff --git a/actionpack/lib/action_controller/helpers.rb b/actionpack/lib/action_controller/helpers.rb index 674c28e6c77e8c550a72211abde9673d9f00505f..19675605d42e07efd268b57d288a3d6e4c1c19f1 100644 --- a/actionpack/lib/action_controller/helpers.rb +++ b/actionpack/lib/action_controller/helpers.rb @@ -108,12 +108,23 @@ def helper_attr(*attrs) end private + def default_helper_module! + module_name = name.sub(/^Controllers::/, '').sub(/Controller$|$/, 'Helper') + module_path = module_name.split('::').map { |m| m.underscore }.join('/') + require_dependency module_path + helper module_name.constantize + rescue LoadError + logger.debug("#{name}: missing default helper path #{module_path}") if logger + rescue NameError + logger.debug("#{name}: missing default helper module #{module_name}") if logger + end + def inherited_with_helper(child) inherited_without_helper(child) begin child.master_helper_module = Module.new child.master_helper_module.send :include, master_helper_module - child.helper child.controller_path + child.send :default_helper_module! rescue MissingSourceFile => e raise unless e.is_missing?("helpers/#{child.controller_path}_helper") end diff --git a/actionpack/test/controller/helper_test.rb b/actionpack/test/controller/helper_test.rb index cd48704e3a3d5d15f422a46733ed9771e98b0093..6fb67ee38e9210e741723278e23b6eaadf2f75aa 100644 --- a/actionpack/test/controller/helper_test.rb +++ b/actionpack/test/controller/helper_test.rb @@ -14,6 +14,14 @@ def render_hello_world def rescue_action(e) raise end end + + class PDFController < ActionController::Base + def test + render :inline => "test: <%= foobar %>" + end + + def rescue_action(e) raise end + end end module LocalAbcHelper @@ -100,11 +108,19 @@ def test_helper_attr end def test_helper_for_nested_controller - @request = ActionController::TestRequest.new - @response = ActionController::TestResponse.new - @request.action = "render_hello_world" - - assert_equal "hello: Iz guuut!", Fun::GamesController.process(@request, @response).body + request = ActionController::TestRequest.new + response = ActionController::TestResponse.new + request.action = 'render_hello_world' + + assert_equal 'hello: Iz guuut!', Fun::GamesController.process(request, response).body + end + + def test_helper_for_acronym_controller + request = ActionController::TestRequest.new + response = ActionController::TestResponse.new + request.action = 'test' + + assert_equal 'test: baz', Fun::PDFController.process(request, response).body end private diff --git a/actionpack/test/fixtures/helpers/fun/pdf_helper.rb b/actionpack/test/fixtures/helpers/fun/pdf_helper.rb new file mode 100644 index 0000000000000000000000000000000000000000..1890f6c9eccc68778e784be5cf1cb17aec115e6f --- /dev/null +++ b/actionpack/test/fixtures/helpers/fun/pdf_helper.rb @@ -0,0 +1,3 @@ +module Fun::PDFHelper + def foobar() 'baz' end +end