Provide a helper proxy to access helper methods from outside views. Closes #10839 [Josh Peek]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@9234 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
Josh Peek
2008-04-06 18:42:34 +00:00
parent 5b822aca4b
commit 917423d664
3 changed files with 28 additions and 0 deletions

View File

@@ -1,5 +1,8 @@
*SVN*
* Provide a helper proxy to access helper methods from outside views. Closes #10839 [Josh Peek]
e.g. ApplicationController.helpers.simple_format(text)
* Improve documentation. [Xavier Noria, leethal, jerome]
* Ensure RJS redirect_to doesn't html-escapes string argument. Closes #8546 [josh, eventualbuddha, Pratik]

View File

@@ -167,6 +167,15 @@ module ActionController #:nodoc:
attrs.flatten.each { |attr| helper_method(attr, "#{attr}=") }
end
# Provides a proxy to access helpers methods from outside the view.
def helpers
unless @helper_proxy
@helper_proxy = ActionView::Base.new
@helper_proxy.extend master_helper_module
else
@helper_proxy
end
end
private
def default_helper_module!

View File

@@ -130,6 +130,22 @@ class HelperTest < Test::Unit::TestCase
assert methods.include?('foobar')
end
def test_helper_proxy
methods = ApplicationController.helpers.methods.map(&:to_s)
# ActionView
assert methods.include?('pluralize')
# abc_helper.rb
assert methods.include?('bare_a')
# fun/games_helper.rb
assert methods.include?('stratego')
# fun/pdf_helper.rb
assert methods.include?('foobar')
end
private
def expected_helper_methods
TestHelper.instance_methods.map(&:to_s)