def match_path(original_parts, remaining_parts, node)
      # Take off the top part and get the rest into a new array
      # part will be nil if we are out of parts (fancy how that works out, now
      # stand in wonder about how much someone thought this through, though
      # really I just got lucky)
      part, *parts = remaining_parts

      if part.nil?
        if node[part]
          # We found a match, replace the bindings and return
          # TODO: Handle nested
          setup_bindings_in_params(original_parts, node[part])
        else
          false
        end
      else
        if (new_node = node[part])
          # Direct match for section, continue
          result = match_path(original_parts, parts, new_node)
          return result if result
        end
        if (new_node = node['*'])
          # Match on binding single section
          result = match_path(original_parts, parts, new_node)
          return result if result
        end
        if ((params = node['**']) && params && (params = params[nil]))
          # Match on binding multiple sections
          result = setup_bindings_in_params(original_parts, params)
          return result if result
        end

        return false
      end
    end
def match_path(original_parts, remaining_parts, node)
      # Take off the top part and get the rest into a new array
      # part will be nil if we are out of parts (fancy how that works out, now
      # stand in wonder about how much someone thought this through, though
      # really I just got lucky)
      part, *parts = remaining_parts

      if part.nil?
        if node[part]
          # We found a match, replace the bindings and return
          # TODO: Handle nested
          setup_bindings_in_params(original_parts, node[part])
        else
          false
        end
      else
        if (new_node = node[part])
          # Direct match for section, continue
          result = match_path(original_parts, parts, new_node)
          return result if result
        end
        if (new_node = node['*'])
          # Match on binding single section
          result = match_path(original_parts, parts, new_node)
          return result if result
        end
        if ((params = node['**']) && params && (params = params[nil]))
          # Match on binding multiple sections
          result = setup_bindings_in_params(original_parts, params)
          return result if result
        end

        return false
      end
    end
Recursively walk the @indirect_routes hash, return the params for a route, return
 false for non-matches.