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 = {} = args.pop if args[-1].is_a? Hash # Check for default option [: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: [:via] ? [:via].downcase : false, options: }) end |