mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Clean up routes inclusion and add some comments for the next soul that decides to adventure on this code.
This commit is contained in:
parent
439d3407ea
commit
49b6b4994e
4 changed files with 51 additions and 62 deletions
|
@ -284,10 +284,5 @@ module ActionDispatch
|
||||||
|
|
||||||
SEPARATORS = %w( / . ? ) #:nodoc:
|
SEPARATORS = %w( / . ? ) #:nodoc:
|
||||||
HTTP_METHODS = [:get, :head, :post, :put, :delete, :options] #:nodoc:
|
HTTP_METHODS = [:get, :head, :post, :put, :delete, :options] #:nodoc:
|
||||||
|
|
||||||
# A helper module to hold URL related helpers.
|
|
||||||
module Helpers #:nodoc:
|
|
||||||
include PolymorphicRoutes
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -123,11 +123,6 @@ module ActionDispatch
|
||||||
routes.length
|
routes.length
|
||||||
end
|
end
|
||||||
|
|
||||||
def install(destinations = [ActionController::Base, ActionView::Base])
|
|
||||||
helper = @module
|
|
||||||
destinations.each { |d| d.module_eval { include helper } }
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
def url_helper_name(name, kind = :url)
|
def url_helper_name(name, kind = :url)
|
||||||
:"#{name}_#{kind}"
|
:"#{name}_#{kind}"
|
||||||
|
@ -276,14 +271,15 @@ module ActionDispatch
|
||||||
@prepend.each { |blk| eval_block(blk) }
|
@prepend.each { |blk| eval_block(blk) }
|
||||||
end
|
end
|
||||||
|
|
||||||
def install_helpers(destinations)
|
module MountedHelpers #:nodoc:
|
||||||
destinations.each { |d| d.module_eval { include Helpers } }
|
extend ActiveSupport::Concern
|
||||||
named_routes.install(destinations)
|
include UrlFor
|
||||||
end
|
|
||||||
|
|
||||||
module MountedHelpers
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Contains all the mounted helpers accross different
|
||||||
|
# engines and the `main_app` helper for the application.
|
||||||
|
# You can include this in your classes if you want to
|
||||||
|
# access routes for other engines.
|
||||||
def mounted_helpers
|
def mounted_helpers
|
||||||
MountedHelpers
|
MountedHelpers
|
||||||
end
|
end
|
||||||
|
@ -294,7 +290,7 @@ module ActionDispatch
|
||||||
routes = self
|
routes = self
|
||||||
MountedHelpers.class_eval do
|
MountedHelpers.class_eval do
|
||||||
define_method "_#{name}" do
|
define_method "_#{name}" do
|
||||||
RoutesProxy.new(routes, self._routes_context)
|
RoutesProxy.new(routes, _routes_context)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -306,29 +302,40 @@ module ActionDispatch
|
||||||
end
|
end
|
||||||
|
|
||||||
def url_helpers
|
def url_helpers
|
||||||
routes = self
|
@url_helpers ||= begin
|
||||||
|
routes = self
|
||||||
|
|
||||||
@url_helpers ||= Module.new {
|
Module.new do
|
||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
include UrlFor
|
include UrlFor
|
||||||
|
|
||||||
@_routes = routes
|
# Define url_for in the singleton level so one can do:
|
||||||
def self.url_for(options)
|
# Rails.application.routes.url_helpers.url_for(args)
|
||||||
@_routes.url_for options
|
@_routes = routes
|
||||||
|
class << self
|
||||||
|
delegate :url_for, :to => '@_routes'
|
||||||
|
end
|
||||||
|
|
||||||
|
# Make named_routes available in the module singleton
|
||||||
|
# as well, so one can do:
|
||||||
|
# Rails.application.routes.url_helpers.posts_path
|
||||||
|
extend routes.named_routes.module
|
||||||
|
|
||||||
|
# Any class that includes this module will get all
|
||||||
|
# named routes...
|
||||||
|
include routes.named_routes.module
|
||||||
|
|
||||||
|
# plus a singleton class method called _routes ...
|
||||||
|
included do
|
||||||
|
singleton_class.send(:redefine_method, :_routes) { routes }
|
||||||
|
end
|
||||||
|
|
||||||
|
# And an instance method _routes. Note that
|
||||||
|
# UrlFor (included in this module) add extra
|
||||||
|
# conveniences for working with @_routes.
|
||||||
|
define_method(:_routes) { @_routes || routes }
|
||||||
end
|
end
|
||||||
|
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
|
|
||||||
routes.install_helpers([self])
|
|
||||||
singleton_class.send(:redefine_method, :_routes) { routes }
|
|
||||||
end
|
|
||||||
|
|
||||||
define_method(:_routes) { @_routes || routes }
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def empty?
|
def empty?
|
||||||
|
|
|
@ -8,7 +8,8 @@ module ActionDispatch
|
||||||
#
|
#
|
||||||
# <b>Tip:</b> If you need to generate URLs from your models or some other place,
|
# <b>Tip:</b> If you need to generate URLs from your models or some other place,
|
||||||
# then ActionController::UrlFor is what you're looking for. Read on for
|
# then ActionController::UrlFor is what you're looking for. Read on for
|
||||||
# an introduction.
|
# an introduction. In general, this module should not be included on its own,
|
||||||
|
# as it is usually included by url_helpers (as in Rails.application.routes.url_helpers).
|
||||||
#
|
#
|
||||||
# == URL generation from parameters
|
# == URL generation from parameters
|
||||||
#
|
#
|
||||||
|
@ -84,7 +85,6 @@ module ActionDispatch
|
||||||
include PolymorphicRoutes
|
include PolymorphicRoutes
|
||||||
|
|
||||||
included do
|
included do
|
||||||
# TODO: with_routing extends @controller with url_helpers, trickling down to including this module which overrides its default_url_options
|
|
||||||
unless method_defined?(:default_url_options)
|
unless method_defined?(:default_url_options)
|
||||||
# Including in a class uses an inheritable hash. Modules get a plain hash.
|
# Including in a class uses an inheritable hash. Modules get a plain hash.
|
||||||
if respond_to?(:class_attribute)
|
if respond_to?(:class_attribute)
|
||||||
|
@ -151,16 +151,17 @@ module ActionDispatch
|
||||||
end
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
def _with_routes(routes)
|
|
||||||
old_routes, @_routes = @_routes, routes
|
|
||||||
yield
|
|
||||||
ensure
|
|
||||||
@_routes = old_routes
|
|
||||||
end
|
|
||||||
|
|
||||||
def _routes_context
|
def _with_routes(routes)
|
||||||
self
|
old_routes, @_routes = @_routes, routes
|
||||||
end
|
yield
|
||||||
|
ensure
|
||||||
|
@_routes = old_routes
|
||||||
|
end
|
||||||
|
|
||||||
|
def _routes_context
|
||||||
|
self
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -159,20 +159,6 @@ class ActionPackAssertionsControllerTest < ActionController::TestCase
|
||||||
assert_equal @response.body, 'request method: GET'
|
assert_equal @response.body, 'request method: GET'
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_redirect_to_named_route
|
|
||||||
with_routing do |set|
|
|
||||||
set.draw do
|
|
||||||
match 'route_one', :to => 'action_pack_assertions#nothing', :as => :route_one
|
|
||||||
match ':controller/:action'
|
|
||||||
end
|
|
||||||
set.install_helpers([ActionController::Base, ActionView::Base])
|
|
||||||
|
|
||||||
process :redirect_to_named_route
|
|
||||||
assert_redirected_to 'http://test.host/route_one'
|
|
||||||
assert_redirected_to route_one_url
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_string_constraint
|
def test_string_constraint
|
||||||
with_routing do |set|
|
with_routing do |set|
|
||||||
set.draw do
|
set.draw do
|
||||||
|
|
Loading…
Reference in a new issue