class ReeRoda::BuildRoutingTree
def call(routes)
def call(routes) tree = nil routes.each do |route| splitted = route.path.split("/") parent_tree = tree splitted.each_with_index do |v, j| if tree.nil? tree = RoutingTree.new([v], j, :string) parent_tree = tree next end current = parent_tree.find_by_value(value: v, depth: j) if current parent_tree = current current.add_route(route) if j == (splitted.length - 1) else if !parent_tree.any_child_has_value?(v) if parent_tree.children.any? { |c| c.type == :param } && v.start_with?(":") param_child = parent_tree.children.find { |c| c.type == :param } param_child.values << v if !param_child.values.include?(v) param_child.add_route(route) if j == (splitted.length - 1) parent_tree = param_child next end new_tree = parent_tree.add_child(v, j, v.start_with?(":") ? :param : :string) parent_tree = new_tree end parent_tree.add_route(route) if j == (splitted.length - 1) end end end tree end