module Roda::RodaPlugins::ReeRoutes::ClassMethods
def build_traverse_tree_proc(tree, context)
def build_traverse_tree_proc(tree, context) has_arbitrary_param = tree.values[0].start_with?(":") route_parts = has_arbitrary_param ? tree.values.map { _1.gsub(":", "") } : tree.values procs = [] child_procs = tree.children.map do |child| build_traverse_tree_proc(child, context) end route_procs = tree.routes.map do |route| route_proc(route, context) end procs << if tree.children.length > 0 if has_arbitrary_param Proc.new do |r| r.on String do |param_val| route_parts.each do |route_part| r.params[route_part] = param_val end child_procs.each do |child_proc| r.instance_exec(r, &child_proc) end r.is do route_procs.each do |route_proc| r.instance_exec(r, &route_proc) end end nil end end else Proc.new do |r| r.on route_parts[0] do child_procs.each do |child_proc| r.instance_exec(r, &child_proc) end r.is do route_procs.each do |route_proc| r.instance_exec(r, &route_proc) end end nil end end end else Proc.new do |r| if has_arbitrary_param r.is String do |param_val| route_parts.each do |route_part| r.params[route_part] = param_val end r.is do route_procs.each do |route_proc| r.instance_exec(r, &route_proc) end end nil end else r.is route_parts[0] do r.is do route_procs.each do |route_proc| r.instance_exec(r, &route_proc) end end nil end end end end Proc.new do |r| procs.each do |proc| r.instance_exec(r, &proc) end end end