提交 f2f4ed21 编写于 作者: A Andrew White

Merge pull request #18776 from eileencodes/cache-url-helpers

Cache `url_helpers`
......@@ -410,61 +410,63 @@ def #{name}
end
def url_helpers(supports_path = true)
routes = self
Module.new do
extend ActiveSupport::Concern
include UrlFor
@url_helpers ||= begin
routes = self
Module.new do
extend ActiveSupport::Concern
include UrlFor
# Define url_for in the singleton level so one can do:
# Rails.application.routes.url_helpers.url_for(args)
@_routes = routes
class << self
def url_for(options)
@_routes.url_for(options)
end
# Define url_for in the singleton level so one can do:
# Rails.application.routes.url_helpers.url_for(args)
@_routes = routes
class << self
def url_for(options)
@_routes.url_for(options)
end
def optimize_routes_generation?
@_routes.optimize_routes_generation?
end
def optimize_routes_generation?
@_routes.optimize_routes_generation?
attr_reader :_routes
def url_options; {}; end
end
attr_reader :_routes
def url_options; {}; end
end
url_helpers = routes.named_routes.url_helpers_module
url_helpers = routes.named_routes.url_helpers_module
# Make named_routes available in the module singleton
# as well, so one can do:
# Rails.application.routes.url_helpers.posts_path
extend url_helpers
# Make named_routes available in the module singleton
# as well, so one can do:
# Rails.application.routes.url_helpers.posts_path
extend url_helpers
# Any class that includes this module will get all
# named routes...
include url_helpers
# Any class that includes this module will get all
# named routes...
include url_helpers
if supports_path
path_helpers = routes.named_routes.path_helpers_module
if supports_path
path_helpers = routes.named_routes.path_helpers_module
include path_helpers
extend path_helpers
end
include path_helpers
extend path_helpers
end
# plus a singleton class method called _routes ...
included do
singleton_class.send(:redefine_method, :_routes) { routes }
end
# 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 }
# And an instance method _routes. Note that
# UrlFor (included in this module) add extra
# conveniences for working with @_routes.
define_method(:_routes) { @_routes || routes }
define_method(:_generate_paths_by_default) do
supports_path
end
define_method(:_generate_paths_by_default) do
supports_path
private :_generate_paths_by_default
end
private :_generate_paths_by_default
end
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册