class Navigable::Router::Trie

Constants

PATH_SEPARATOR

Public Class Methods

new() click to toggle source
# File lib/navigable/router/trie.rb, line 10
def initialize
  @root = Node.new
end

Public Instance Methods

add_route(path, endpoint) click to toggle source
# File lib/navigable/router/trie.rb, line 14
def add_route(path, endpoint)
  traverse(path) { |segment, node| node.add(segment) }.attach(endpoint)
end
find_route(path) { |route_params| ... } click to toggle source
# File lib/navigable/router/trie.rb, line 18
def find_route(path)
  route_params = {}
  node = traverse(path) do |segment, node|
    node.find(segment) { |params| route_params.merge!(params) }
  end

  yield(route_params) if node && block_given?

  node&.endpoint
end
print(verb, routes) click to toggle source

Private Instance Methods

traverse(path) { |segment, node| ... } click to toggle source
# File lib/navigable/router/trie.rb, line 35
def traverse(path)
  _, *segments = path.split(PATH_SEPARATOR)
  segments.reduce(@root) do |node, segment|
    break unless node
    yield(segment, node)
  end
end