Method: Feet::RouteObject#match

Defined in:
lib/feet/routing.rb

#match(url, *args) ⇒ Object

Example arguments url “:controller/:id” args [:default=>{“action”=>“show”}]



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/feet/routing.rb', line 34

def match(url, *args)
  # Capture the options hash
  options = {}
  options = args.pop if args[-1].is_a? Hash
  # Check for default option
  options[:default] ||= {}

  # Get destination and limit the # of arguments
  dest = nil
  dest = args.pop if args.size > 0
  raise 'Too many arguments!' if args.size > 0

  # Parse URL parts. Split on appropriate punctuation
  # (slash, parens, question mark, dot)
  parts = url.split /(\/|\(|\)|\?|\.)/
  parts.reject! { |p| p.empty? }

  vars = []
  regexp_parts = parts.map do |part|
    case part[0]
    when ':'
      # Map Variable
      vars << part[1..-1]
      '([a-zA-Z0-9]+)?'
    when '*'
      # Map Wildcard
      vars << part[1..-1]
      '(.*)'
    when '.'
      '\\.' # Literal dot
    else
      part
    end
  end

  # Join the main regexp
  regexp = regexp_parts.join('')

  # Store match object
  @rules.push({
                regexp: Regexp.new("^/#{regexp}$"),
                vars: vars,
                dest: dest,
                via: options[:via] ? options[:via].downcase : false,
                options: options
              })
end