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

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

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