use a list to represent the supported verbs for a route object

This commit is contained in:
Aaron Patterson 2011-03-14 18:26:30 -07:00
parent 9ba2d422f5
commit 9f2706d770
2 changed files with 13 additions and 11 deletions

@ -195,8 +195,8 @@ def constraints
def request_method_condition
if via = @options[:via]
via = Array(via).map { |m| m.to_s.dasherize.upcase }
{ :request_method => %r[^#{via.join('|')}$] }
list = Array(via).map { |m| m.to_s.dasherize.upcase }
{ :request_method => list }
else
{ }
end

@ -12,6 +12,8 @@ def initialize(set, app, conditions, requirements, defaults, name, anchor)
@defaults = defaults
@name = name
# FIXME: we should not be doing this much work in a constructor.
@requirements = requirements.merge(defaults)
@requirements.delete(:controller) if @requirements[:controller].is_a?(Regexp)
@requirements.delete_if { |k, v|
@ -23,22 +25,22 @@ def initialize(set, app, conditions, requirements, defaults, name, anchor)
conditions[:path_info] = ::Rack::Mount::Strexp.compile(path, requirements, SEPARATORS, anchor)
end
@verbs = conditions[:request_method] || []
@conditions = conditions.dup
# Rack-Mount requires that :request_method be a regular expression.
# :request_method represents the HTTP verb that matches this route.
#
# Here we munge values before they get sent on to rack-mount.
@conditions[:request_method] = %r[^#{verb}$] unless @verbs.empty?
@conditions[:path_info] = Rack::Mount::RegexpWithNamedGroups.new(@conditions[:path_info]) if @conditions[:path_info]
@conditions.delete_if{ |k,v| k != :path_info && !valid_condition?(k) }
@requirements.delete_if{ |k,v| !valid_condition?(k) }
end
def verb
if method = conditions[:request_method]
case method
when Regexp
source = method.source.upcase
source =~ /\A\^[-A-Z|]+\$\Z/ ? source[1..-2] : source
else
method.to_s.upcase
end
end
@verbs.join '|'
end
def segment_keys