class LuckyRouter::Fragment(T)

Overview

A fragment represents possible combinations for a part of the path. The first/top fragment represents the first "part" of a path.

The fragment contains the possible static parts or a single dynamic part Each static part or dynamic part has another fragment, that represents the next set of fragments that could match. This is a bit confusing so let's dive into an example:

The Fragment would represent the possible combinations for the first part

# 'nil' because there is no route with a dynamic part in the first slot
fragment.dynamic_part # nil

# This returns a Hash whose keys are the possible values, and a value for the
*next* Fragment
fragment.static_parts

# Would return:
{"users" => Fragment, "posts" => Fragment}

# The Fragment in the 'users' key would have:

# Fragment.new(PathPart(":id"))
fragment.dynamic_part

# Static parts
fragment.static_parts
{"foo" => Fragment}

Gotcha

The last fragment of a path is "empty". It does not have static parts or dynamic parts

Defined in:

lucky_router/fragment.cr

Constructors

Instance Method Summary

Constructor Detail

def self.new(path_part : LuckyRouter::PathPart) #

[View source]

Instance Method Detail

def add_part(path_part : PathPart) : Fragment(T) #

[View source]
def dynamic? : Bool #

[View source]
def dynamic_parts #

[View source]
def find(parts : Array(String), method : String) : Match(T) | NoMatch #

This looks for a matching fragment for the given parts and returns NoMatch if one is not found


[View source]
def find(parts : Slice(String), method : String) : Match(T) | NoMatch #

This looks for a matching fragment for the given parts and returns NoMatch if one is not found


[View source]
def find_match(path_parts : Array(String), method : String) : Match(T) | Nil #

[View source]
def find_match(path_parts : Slice(String), method : String) : Match(T) | Nil #

[View source]
def glob_part : Fragment(T) | Nil #

[View source]
def glob_part=(glob_part : Fragment(T) | Nil) #

[View source]
def match_for_method(method) #

[View source]
def method_to_payload #

Every path can have multiple request methods and since each fragment represents a request path the final step to finding the payload is to search for a matching request method


[View source]
def path_part : PathPart #

[View source]
def process_parts(parts : Array(PathPart), method : String, payload : T) #

[View source]
def static_parts #

[View source]