Harbor::Router
Attributes
Public Class Methods
Public Instance Methods
delete(matcher, &handler)
Matches a DELETE request
# File lib/harbor/router.rb, line 36 36: def delete(matcher, &handler) 37: register(:delete, matcher, &handler) 38: end
get(matcher, &handler)
Matches a GET request
# File lib/harbor/router.rb, line 20 20: def get(matcher, &handler) 21: register(:get, matcher, &handler) 22: register(:head, matcher, &handler) 23: end
match(request)
# File lib/harbor/router.rb, line 82 82: def match(request) 83: @routes.each do |request_method, matcher, param_keys, handler| 84: next unless request.request_method == request_method 85: 86: # Strip trailing forward-slash on request path before matching 87: request_path = (request.path_info[-1] == ?/) ? request.path_info[0..-2] : request.path_info 88: 89: next unless request_path =~ matcher 90: 91: request.route_captures = $~.captures 92: request.params.update(Hash[*param_keys.zip(request.route_captures).flatten]) 93: return handler 94: end 95: 96: # No routes matched, so return false 97: false 98: end
merge!(other)
# File lib/harbor/router.rb, line 15 15: def merge!(other) 16: self.routes |= other.routes 17: end
post(matcher, &handler)
Matches a POST (create) request
# File lib/harbor/router.rb, line 26 26: def post(matcher, &handler) 27: register(:post, matcher, &handler) 28: end
put(matcher, &handler)
Matches a PUT (update) request
# File lib/harbor/router.rb, line 31 31: def put(matcher, &handler) 32: register(:put, matcher, &handler) 33: end
Private Instance Methods
transform(matcher)
# File lib/harbor/router.rb, line 102 102: def transform(matcher) 103: param_keys = [] 104: 105: if matcher.is_a?(String) 106: # Strip trailing forward-slash on routes 107: matcher = matcher[0..-2] if (matcher[-1] == ?/) 108: matcher = /^#{matcher.gsub('.', '[\.]').gsub(PARAM) { param_keys << $2; "(#{URI_CHAR}+)" }}$/ 109: end 110: 111: [matcher, param_keys] 112: end