Class: Router

Inherits:
Object
  • Object
show all
Defined in:
lib/opi/router.rb

Constant Summary collapse

WILDCARD_PATTERN =
/\/\*/
NAMED_SEGMENTS_PATTERN =
/\/:([^$\/]+)/
NAMED_SEGMENTS_REPLACEMENT_PATTERN =
/\/:([^$\/]+)/

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(routes = []) ⇒ Router

Returns a new instance of Router.



8
9
10
# File 'lib/opi/router.rb', line 8

def initialize(routes=[])
  @routes = routes
end

Instance Attribute Details

#routesObject

Returns the value of attribute routes.



2
3
4
# File 'lib/opi/router.rb', line 2

def routes
  @routes
end

Instance Method Details

#route(method, path) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/opi/router.rb', line 12

def route(method, path)
  method_routes = self.routes.find_all{|x| x[:method] == method}
  method_routes.each do |route|
    if route[:path] =~ WILDCARD_PATTERN
      src = "\\A#{route[:path].gsub('*','(.*)')}\\Z"
      if match = path.match(Regexp.new(src))
        return [route, match[1].split('/')]
      end
    elsif route[:path] =~ NAMED_SEGMENTS_PATTERN
      src = "\\A#{route[:path].gsub(NAMED_SEGMENTS_REPLACEMENT_PATTERN, '/(?<\1>[^$/]+)')}\\Z"
      if match = path.match(Regexp.new(src))
        return [route, Hash[match.names.zip(match.captures)]]
      end
    elsif path == route[:path]
      return [route]
    end
  end
  nil
end