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