class Olelo::Routing::Router
Constants
- SYNTAX
Attributes
head[R]
tail[R]
Public Class Methods
new()
click to toggle source
# File lib/olelo/routing.rb, line 146 def initialize @head, @tail = [], [] end
Public Instance Methods
add(function, path, patterns = {})
click to toggle source
# File lib/olelo/routing.rb, line 165 def add(function, path, patterns = {}) tail = patterns.delete(:tail) pattern = Regexp.escape(path) SYNTAX.each_pair {|k,v| pattern.gsub!(k, v) } keys = [] pattern.gsub!(/:(\w+)/) do keys << $1 patterns.key?($1) ? "(#{patterns[$1]})" : "([^/?&#\.]+)" end pattern = /^#{pattern}$/ if i = @head.index {|x| x.first == path } @head[i] = [path, pattern, keys, function] elsif i = @tail.index {|x| x.first == path } @tail[i] = [path, pattern, keys, function] else (tail ? @tail : @head) << [path, pattern, keys, function] end end
each(&block)
click to toggle source
# File lib/olelo/routing.rb, line 160 def each(&block) @head.each(&block) @tail.each(&block) end
find(path) { |name, params, function| ... }
click to toggle source
# File lib/olelo/routing.rb, line 150 def find(path) each do |name, pattern, keys, function| if match = pattern.match(path) params = {} keys.zip(match.captures.to_a).each {|k, v| params[k] = v if !v.blank? } yield(name, params, function) end end end