class Apia::RouteSet
Attributes
controllers[R]
endpoints[R]
groups[R]
map[R]
routes[R]
Public Class Methods
new()
click to toggle source
# File lib/apia/route_set.rb, line 14 def initialize @map = {} @routes = [] @controllers = [] @endpoints = [] @groups = [] end
split_path(path)
click to toggle source
Split a URL part into its appropriate parts
@param path [String] @return [Array<String>]
# File lib/apia/route_set.rb, line 82 def split_path(path) strip_slashes(path).split('/') end
strip_slashes(string)
click to toggle source
Remove slashes from the start and end of a given string
@param string [String] @return [String]
# File lib/apia/route_set.rb, line 74 def strip_slashes(string) string.sub(/\A\/+/, '').sub(/\/\z/, '') end
Public Instance Methods
add(route)
click to toggle source
Add a new route to the set
@param route [Moonstone::Route] @return [Moonstone::Route]
# File lib/apia/route_set.rb, line 30 def add(route) @routes << route if route.controller && !@controllers.include?(route.controller) @controllers << route.controller end if route.endpoint && !@controllers.include?(route.endpoint) @endpoints << route.endpoint end parts = self.class.split_path(route.path).map { |p| p =~ /\A:/ ? '?' : p } parts.size.times do |i| if i.zero? source = @map else source = @map.dig(*parts[0, i]) end source[parts[i]] ||= { _routes: [] } source[parts[i]][:_routes] << route if i == parts.size - 1 end route end
dsl()
click to toggle source
# File lib/apia/route_set.rb, line 22 def dsl @dsl ||= DSLs::RouteSet.new(self) end
find(request_method, path)
click to toggle source
Find routes that exactly match a given path
@param request_method [Symbol] @param path [String] @return [Array<Moonstone::Route>]
# File lib/apia/route_set.rb, line 58 def find(request_method, path) parts = self.class.split_path(path) last = @map parts.size.times do |i| last = last[parts[i]] || last['?'] return [] if last.nil? end last[:_routes].select { |r| r.request_method == request_method } end