提交 5c224de9 编写于 作者: B Bogdan Gusiev

Rewrite journey routes formatter for performance

上级 af3a69a7
...@@ -84,44 +84,44 @@ def visit_GROUP(node) ...@@ -84,44 +84,44 @@ def visit_GROUP(node)
# Used for formatting urls (url_for) # Used for formatting urls (url_for)
class Formatter < Visitor # :nodoc: class Formatter < Visitor # :nodoc:
attr_reader :options, :consumed attr_reader :options
def initialize(options) def initialize(options)
@options = options @options = options
@consumed = {}
end end
private private
def visit_GROUP(node) def visit(node, optional = false)
if consumed == options case node.type
nil when :LITERAL, :SLASH, :DOT
else node.left
route = visit(node.left) when :STAR
route.include?("\0") ? nil : route visit(node.left)
when :GROUP
visit(node.left, true)
when :CAT
visit_CAT(node, optional)
when :SYMBOL
visit_SYMBOL(node)
end end
end end
def terminal(node) def visit_CAT(node, optional)
node.left left = visit(node.left, optional)
end right = visit(node.right, optional)
if optional && !(right && left)
def binary(node) ""
[visit(node.left), visit(node.right)].join else
end left + right
end
def nary(node)
node.children.map { |c| visit(c) }.join
end end
def visit_SYMBOL(node) def visit_SYMBOL(node)
key = node.to_sym if value = options[node.to_sym]
if value = options[key]
consumed[key] = value
Router::Utils.escape_path(value) Router::Utils.escape_path(value)
else else
"\0" nil
end end
end end
end end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册