class ApiTransformer::Routes
Collection of routes
Public Class Methods
new()
click to toggle source
# File lib/api_transformer/routes.rb, line 4 def initialize @routes = {} end
Public Instance Methods
add(args)
click to toggle source
# File lib/api_transformer/routes.rb, line 8 def add(args) pattern, path_params = parse_path_definition(args[:path]) route = Route.new( path_params: path_params, options: args[:options], block: args[:block], failure_handlers: args[:failure_handlers], helper_blocks: args[:helper_blocks] ) store_route(args[:method], pattern, route) end
find(raw_method, path)
click to toggle source
# File lib/api_transformer/routes.rb, line 22 def find(raw_method, path) method = raw_method.downcase.to_sym return unless @routes[method] pattern, route = @routes[method].find do |pattern, _| path.match(pattern) end [route, path_params(path, route, pattern)] end
Private Instance Methods
parse_path_definition(path)
click to toggle source
# File lib/api_transformer/routes.rb, line 35 def parse_path_definition(path) parts = path.split(/\//) pattern_string = parts .map { |part| part.match(/^\:/) ? "(.*?)" : part } .join("\/") .tap { |inner| "^#{inner}$" } pattern = Regexp.new("^#{pattern_string}$") params = parts .select { |part| part.match(/^\:/) } .map { |part| part.gsub(/^\:/, "").to_sym } [pattern, params] end
path_params(path, route, pattern)
click to toggle source
# File lib/api_transformer/routes.rb, line 52 def path_params(path, route, pattern) if pattern matches = path.match(pattern)[1..-1] Hash[route[:path_params].zip(matches)] else {} end end
store_route(method, pattern, route)
click to toggle source
# File lib/api_transformer/routes.rb, line 61 def store_route(method, pattern, route) @routes[method] ||= {} @routes[method][pattern] = route end