Class: Router
- Inherits:
-
Object
- Object
- Router
- Defined in:
- lib/opi/router.rb
Constant Summary collapse
- WILDCARD_PATTERN =
/\/\*/
- NAMED_SEGMENTS_PATTERN =
/\/:([^$\/]+)/
- NAMED_SEGMENTS_REPLACEMENT_PATTERN =
/\/:([^$\/]+)/
Instance Attribute Summary collapse
-
#routes ⇒ Object
Returns the value of attribute routes.
Instance Method Summary collapse
-
#initialize(routes = []) ⇒ Router
constructor
A new instance of Router.
- #route(method, path) ⇒ Object
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
#routes ⇒ Object
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 |