Skip to content

Commit

Permalink
Rewrite journey routes formatter for performance
Browse files Browse the repository at this point in the history
  • Loading branch information
bogdan committed Aug 28, 2013
1 parent af3a69a commit 5c224de
Showing 1 changed file with 23 additions and 23 deletions.
46 changes: 23 additions & 23 deletions actionpack/lib/action_dispatch/journey/visitors.rb
Expand Up @@ -84,44 +84,44 @@ def visit_GROUP(node)

# Used for formatting urls (url_for)
class Formatter < Visitor # :nodoc:
attr_reader :options, :consumed
attr_reader :options

def initialize(options)
@options = options
@consumed = {}
end

private

def visit_GROUP(node)
if consumed == options
nil
else
route = visit(node.left)
route.include?("\0") ? nil : route
def visit(node, optional = false)
case node.type
when :LITERAL, :SLASH, :DOT
node.left
when :STAR
visit(node.left)
when :GROUP
visit(node.left, true)
when :CAT
visit_CAT(node, optional)
when :SYMBOL
visit_SYMBOL(node)
end
end

def terminal(node)
node.left
end

def binary(node)
[visit(node.left), visit(node.right)].join
end

def nary(node)
node.children.map { |c| visit(c) }.join
def visit_CAT(node, optional)
left = visit(node.left, optional)
right = visit(node.right, optional)
if optional && !(right && left)
""
else
left + right
end
end

def visit_SYMBOL(node)
key = node.to_sym

if value = options[key]
consumed[key] = value
if value = options[node.to_sym]
Router::Utils.escape_path(value)
else
"\0"
nil
end
end
end
Expand Down

0 comments on commit 5c224de

Please sign in to comment.