mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
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:
@@ -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]
|
||||
|
||||
@@ -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!
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user