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
# File lib/navigable/router/node.rb, line 29 def print(verb, routes, prefix = '') print_segments(@static, routes, verb, prefix) print_segments(@dynamic, routes, verb, prefix) end
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
# File lib/navigable/router/node.rb, line 79 def print_segments(segments, routes, verb, prefix) segments&.each do |segment, node| routes << { verb: verb, path: "#{prefix}/#{segment}", endpoint: node.endpoint } if node.endpoint node.print(verb, routes, "#{prefix}/#{segment}") end end
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