Add list of commands

This commit is contained in:
2019-10-06 18:45:42 +03:00
parent 3669e31c66
commit 21b0f7733b
2 changed files with 38 additions and 10 deletions

View File

@ -1,19 +1,40 @@
class CLI::CommandRouter
def initialize
@mappings = [] of {Regex, Proc(Hash(String, String), Nil)}
alias RouteHandler = Proc(Hash(String, String), Nil)
struct Route
def initialize(@route : String, @pattern : Regex, @desc : String, @handler : RouteHandler)
end
getter route
getter pattern
getter desc
getter handler
end
def add(route, &block : Hash(String, String) -> Nil)
def initialize
@routes = [] of Route
end
def add(route, &block : RouteHandler)
pattern = route_to_regex(route)
@mappings.push({pattern, block})
@routes.push(Route.new(route, pattern, "", block))
end
def add(route, desc, &block : RouteHandler)
pattern = route_to_regex(route)
@routes.push(Route.new(route, pattern, desc, block))
end
def handle(command)
@mappings.each do |handler|
handle_pattern(command, *handler)
@routes.each do |route|
handle_pattern(command, route.pattern, route.handler)
end
end
def routes
@routes
end
private def handle_pattern(command, pattern, cb)
m = command.match(pattern)
return if m.nil?