aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch/routing/route.rb
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2011-03-14 18:26:30 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2011-03-14 18:26:30 -0700
commit9f2706d770a2a5513d54dac9d0fb536f787a434b (patch)
treeeccaac48351764b6845377edd35de6812a5cc85d /actionpack/lib/action_dispatch/routing/route.rb
parent9ba2d422f58e17b9e3d2a91d9979017aa36d13bd (diff)
downloadrails-9f2706d770a2a5513d54dac9d0fb536f787a434b.tar.gz
rails-9f2706d770a2a5513d54dac9d0fb536f787a434b.tar.bz2
rails-9f2706d770a2a5513d54dac9d0fb536f787a434b.zip
use a list to represent the supported verbs for a route object
Diffstat (limited to 'actionpack/lib/action_dispatch/routing/route.rb')
-rw-r--r--actionpack/lib/action_dispatch/routing/route.rb20
1 files changed, 11 insertions, 9 deletions
diff --git a/actionpack/lib/action_dispatch/routing/route.rb b/actionpack/lib/action_dispatch/routing/route.rb
index 0f90b2169d..a049510182 100644
--- a/actionpack/lib/action_dispatch/routing/route.rb
+++ b/actionpack/lib/action_dispatch/routing/route.rb
@@ -12,6 +12,8 @@ module ActionDispatch
@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 @@ module ActionDispatch
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