def process_match exp
first_arg = exp.first_arg
second_arg = exp.second_arg
last_arg = exp.last_arg
if string? first_arg
matcher = first_arg.value
if matcher == ':controller(/:action(/:id(.:format)))' or
matcher.include? ':controller' and action_route?(matcher)
@tracker.routes[:allow_all_actions] = first_arg
return exp
elsif action_route?(first_arg)
if hash? second_arg and controller_name = hash_access(second_arg, :controller)
loose_action(controller_name, "matched")
end
elsif second_arg.nil? and in_controller_block? and not matcher.include? ":"
add_route matcher
end
end
if hash? last_arg
hash_iterate last_arg do |k, v|
if string? k
if string? v
add_route_from_string v
elsif in_controller_block? and symbol? v
add_route v
end
elsif symbol? k
case k.value
when :action
if string? v
add_route_from_string v
else
add_route v
end
when :to
if string? v
add_route_from_string v[1]
elsif in_controller_block? and symbol? v
add_route v
end
end
end
end
end
@current_controller = nil unless in_controller_block?
exp
end