class Navigable::Router::Node

Constants

DYNAMIC_PREFIX
MUSTERMANN_VERSION

Attributes

endpoint[R]

Public Class Methods

new() click to toggle source
# File lib/navigable/router/node.rb, line 11
def initialize
  @endpoint = nil
  @static = nil
  @dynamic = nil
end

Public Instance Methods

add(segment) click to toggle source
# File lib/navigable/router/node.rb, line 17
def add(segment)
  dynamic?(segment) ? add_dynamic(segment) : add_static(segment)
end
attach(endpoint) click to toggle source
# File lib/navigable/router/node.rb, line 25
def attach(endpoint)
  @endpoint = endpoint
end
find(segment) { |symbolize_keys(params)| ... } click to toggle source
# File lib/navigable/router/node.rb, line 21
def find(segment)
  find_node(segment) { |params| yield(symbolize_keys(params)) if params && block_given? }
end
print(verb, routes, prefix = '') click to toggle source

Private Instance Methods

add_dynamic(segment) click to toggle source
# File lib/navigable/router/node.rb, line 41
def add_dynamic(segment)
  @dynamic ||= {}
  @dynamic[dynamic_segment(segment)] ||= self.class.new
end
add_static(segment) click to toggle source
# File lib/navigable/router/node.rb, line 36
def add_static(segment)
  @static ||= {}
  @static[segment] ||= self.class.new
end
dynamic?(segment) click to toggle source
# File lib/navigable/router/node.rb, line 67
def dynamic?(segment)
  DYNAMIC_PREFIX.match?(segment)
end
dynamic_segment(segment) click to toggle source
# File lib/navigable/router/node.rb, line 71
def dynamic_segment(segment)
  Mustermann.new(segment, type: :rails, version: MUSTERMANN_VERSION)
end
empty?() click to toggle source
# File lib/navigable/router/node.rb, line 63
def empty?
  !@static && !@dynamic
end
find_dynamic(segment, &block) click to toggle source
# File lib/navigable/router/node.rb, line 57
def find_dynamic(segment, &block)
  @dynamic ||= {}
  matcher = @dynamic.keys.find { |matcher| block.call(matcher.match(segment)&.named_captures) }
  matcher && @dynamic[matcher]
end
find_node(segment, &block) click to toggle source
# File lib/navigable/router/node.rb, line 46
def find_node(segment, &block)
  return if empty?

  find_static(segment, &block) || find_dynamic(segment, &block)
end
find_static(segment, &block) click to toggle source
# File lib/navigable/router/node.rb, line 52
def find_static(segment, &block)
  @static ||= {}
  @static[segment].tap { |node| node && block.call({}) }
end
print_segments(segments, routes, verb, prefix) click to toggle source
symbolize_keys(hash) click to toggle source
# File lib/navigable/router/node.rb, line 75
def symbolize_keys(hash)
  hash.each_with_object({}) { |(key, value), obj| obj[key.to_sym] = value }
end