Sha256: 6bde75d4d56e3ad3a8a86fb7cf014e522a377bd5f26d695416f0175745d13437
Contents?: true
Size: 1.88 KB
Versions: 2
Compression:
Stored size: 1.88 KB
Contents
module Happy class Controller module Routing def path_to_regexp(path) # Since we want to be compatible with Ruby 1.8.7, we unfortunately can't use named captures like this: # Regexp.compile('^'+path.gsub(/\)/, ')?').gsub(/\//, '\/').gsub(/\./, '\.').gsub(/:(\w+)/, '(?<\\1>.+)')+'$') Regexp.compile('^'+path.gsub(/\)/, ')?').gsub(/\//, '\/').gsub(/\./, '\.').gsub(/:(\w+)/, '(.+)')+'$') end def path(*args, &blk) options = (args.pop if args.last.is_a?(Hash)) || {} args = [nil] if args.empty? args.each do |name| # If a path name has been given, match it against the next request path part. if name.present? # convert symbols to ":foo" type string name = ":#{name}" if name.is_a?(Symbol) path_match = path_to_regexp(name).match(unprocessed_path.first) end # Match the request method, if specified method_matched = [nil, request.request_method.downcase.to_sym].include?(options[:method]) path_matched = (path_match || (name.nil? && unprocessed_path.empty?)) # Only do something here if method and requested path both match if path_matched && method_matched # Transfer variables contained in path name to params hash if path_match name.scan(/:(\w+)/).flatten.each do |var| request.params[var] = path_match.captures.shift end processed_path << unprocessed_path.shift end serve!(instance_exec(&blk)) or raise Errors::NotFound end end end [:get, :post, :put, :delete].each do |method| define_method(method) do |*args, &blk| args.last.is_a?(Hash) ? args.last.merge(:method => method) : args.push(:method => method) path(*args, &blk) end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
happy-0.1.0.pre21 | lib/happy/controller/routing.rb |
happy-0.1.0.pre20 | lib/happy/controller/routing.rb |