Skip to content

Commit

Permalink
fixes rails#8631 local inflections from interfereing with HTTP_METHOD…
Browse files Browse the repository at this point in the history
…_LOOKUP dispatch logic
  • Loading branch information
asanghi committed Jan 16, 2013
1 parent fd990f2 commit 5f3b40e
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 1 deletion.
5 changes: 5 additions & 0 deletions actionpack/CHANGELOG.md
@@ -1,5 +1,10 @@
## Rails 3.2.12 (unreleased) ##

* Eagerly populate the http method loookup cache so local project inflections do
not interfere with use of underscore method ( and we don't need locks )

*Aditya Sanghi*

* `BestStandardsSupport` no longer duplicates `X-UA-Compatible` values on
each request to prevent header size from blowing up.

Expand Down
7 changes: 6 additions & 1 deletion actionpack/lib/action_dispatch/http/request.rb
Expand Up @@ -56,7 +56,12 @@ def key?(key)
RFC5789 = %w(PATCH)

HTTP_METHODS = RFC2616 + RFC2518 + RFC3253 + RFC3648 + RFC3744 + RFC5323 + RFC5789
HTTP_METHOD_LOOKUP = Hash.new { |h, m| h[m] = m.underscore.to_sym if HTTP_METHODS.include?(m) }
HTTP_METHOD_LOOKUP = {}

# Populate the HTTP method lookup cache
HTTP_METHODS.each do |method|
HTTP_METHOD_LOOKUP[method] = method.underscore.to_sym
end

# Returns the HTTP \method that the application should see.
# In the case where the \method was overridden by a middleware
Expand Down
21 changes: 21 additions & 0 deletions actionpack/test/dispatch/request_test.rb
Expand Up @@ -371,6 +371,27 @@ def url_for(options = {})
assert request.put?
end

test "post uneffected by local inflections" do
existing_acrnoyms = ActiveSupport::Inflector.inflections.acronyms.dup
existing_acrnoym_regex = ActiveSupport::Inflector.inflections.acronym_regex.dup
begin
ActiveSupport::Inflector.inflections do |inflect|
inflect.acronym "POS"
end
assert_equal "pos_t", "POST".underscore
request = stub_request "REQUEST_METHOD" => "POST"
assert_equal :post, ActionDispatch::Request::HTTP_METHOD_LOOKUP["POST"]
assert_equal :post, request.method_symbol
assert request.post?
ensure
# Reset original acronym set
ActiveSupport::Inflector.inflections do |inflect|
inflect.send(:instance_variable_set,"@acronyms",existing_acrnoyms)
inflect.send(:instance_variable_set,"@acronym_regex",existing_acrnoym_regex)
end
end
end

test "xml format" do
request = stub_request
request.expects(:parameters).at_least_once.returns({ :format => 'xml' })
Expand Down

0 comments on commit 5f3b40e

Please sign in to comment.