mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
return Mime::NullType if format is unknown
If a request has an unknown format, the methods html?, xml?, json? ...etc not raise an Exception. This patch add a class Mime::NullType, that is returned when request.format is unknown and it responds false to the methods that ends with '?' and true to 'nil?'. It refers to #7837, this issue is considered a improvement not a bug.
This commit is contained in:
parent
f9da785d0b
commit
c2267db383
4 changed files with 28 additions and 3 deletions
|
@ -1,5 +1,10 @@
|
||||||
## Rails 4.0.0 (unreleased) ##
|
## Rails 4.0.0 (unreleased) ##
|
||||||
|
|
||||||
|
* Added `Mime::NullType` class. This allows to use html?, xml?, json?..etc when
|
||||||
|
the `format` of `request` is unknown, without raise an exception.
|
||||||
|
|
||||||
|
*Angelo Capilleri*
|
||||||
|
|
||||||
* Integrate the Journey gem into Action Dispatch so that the global namespace
|
* Integrate the Journey gem into Action Dispatch so that the global namespace
|
||||||
is not polluted with names that may be used as models.
|
is not polluted with names that may be used as models.
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ module Mime
|
||||||
class << self
|
class << self
|
||||||
def [](type)
|
def [](type)
|
||||||
return type if type.is_a?(Type)
|
return type if type.is_a?(Type)
|
||||||
Type.lookup_by_extension(type)
|
Type.lookup_by_extension(type) || NullType.new
|
||||||
end
|
end
|
||||||
|
|
||||||
def fetch(type)
|
def fetch(type)
|
||||||
|
@ -306,6 +306,17 @@ module Mime
|
||||||
method.to_s.ends_with? '?'
|
method.to_s.ends_with? '?'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class NullType
|
||||||
|
def nil?
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def method_missing(method, *args)
|
||||||
|
false if method.to_s.ends_with? '?'
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
require 'action_dispatch/http/mime_types'
|
require 'action_dispatch/http/mime_types'
|
||||||
|
|
|
@ -144,7 +144,7 @@ class SendFileTest < ActionController::TestCase
|
||||||
}
|
}
|
||||||
|
|
||||||
@controller.headers = {}
|
@controller.headers = {}
|
||||||
assert_raise(ArgumentError){ @controller.send(:send_file_headers!, options) }
|
assert !@controller.send(:send_file_headers!, options)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_send_file_headers_guess_type_from_extension
|
def test_send_file_headers_guess_type_from_extension
|
||||||
|
|
|
@ -591,7 +591,16 @@ class RequestTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
request = stub_request
|
request = stub_request
|
||||||
request.expects(:parameters).at_least_once.returns({ :format => :unknown })
|
request.expects(:parameters).at_least_once.returns({ :format => :unknown })
|
||||||
assert request.formats.empty?
|
assert_instance_of Mime::NullType, request.format
|
||||||
|
end
|
||||||
|
|
||||||
|
test "format is not nil with unknown format" do
|
||||||
|
request = stub_request
|
||||||
|
request.expects(:parameters).at_least_once.returns({ format: :hello })
|
||||||
|
assert_equal request.format.nil?, true
|
||||||
|
assert_equal request.format.html?, false
|
||||||
|
assert_equal request.format.xml?, false
|
||||||
|
assert_equal request.format.json?, false
|
||||||
end
|
end
|
||||||
|
|
||||||
test "formats with xhr request" do
|
test "formats with xhr request" do
|
||||||
|
|
Loading…
Reference in a new issue