Install url helpers on module instance so they can be accessed

globally
This commit is contained in:
Joshua Peek 2010-03-17 16:04:41 -05:00
parent b652aa8121
commit 13a783672a
2 changed files with 14 additions and 5 deletions

@ -65,7 +65,7 @@ def split_glob_param!(params)
# named routes.
class NamedRouteCollection #:nodoc:
include Enumerable
attr_reader :routes, :helpers
attr_reader :routes, :helpers, :module
def initialize
clear!
@ -241,21 +241,29 @@ def install_helpers(destinations = [ActionController::Base, ActionView::Base], r
def url_helpers
@url_helpers ||= begin
router = self
routes = self
Module.new do
helpers = Module.new do
extend ActiveSupport::Concern
include UrlFor
@routes = routes
class << self
delegate :url_for, :to => '@routes'
end
extend routes.named_routes.module
# ROUTES TODO: install_helpers isn't great... can we make a module with the stuff that
# we can include?
# Yes plz - JP
included do
router.install_helpers(self)
routes.install_helpers(self)
end
define_method(:_router) { router }
define_method(:_router) { routes }
end
helpers
end
end

@ -193,6 +193,7 @@ def test_login
assert_equal '/login', url_for(:controller => 'sessions', :action => 'new', :only_path => true)
assert_equal 'http://rubyonrails.org/login', Routes.url_for(:controller => 'sessions', :action => 'create')
assert_equal 'http://rubyonrails.org/login', Routes.url_helpers.login_url
end
end