Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

if format is unknown NullMimeTypeObject is returned

If a unknown format is passed in a request, the methods html?, xml?, json? ...etc
Nil Exception.

This patch add a class NullMimeTypeObject, that is returned when  request.format is unknown
and it responds false to the methods that ends with '?'.

It refers to #7837, not fixes because it's not considered a improvement not a bug.
  • Loading branch information...
commit a8560fa361958b33d76e4468eb5c07d82a20196e 1 parent 6569709
@acapilleri acapilleri authored
View
5 actionpack/CHANGELOG.md
@@ -1,5 +1,10 @@
## Rails 4.0.0 (unreleased) ##
+* Added `NullMimeTypeObject` class. This allows to use html?, xml?, json?..etc when
+ the `format` of `request` is unknown.
+
+ *Angelo Capilleri*
+
* `date_select` helper accepts `with_css_classes: true` to add css classes similar with type
of generated select tags.
View
13 actionpack/lib/action_dispatch/http/mime_type.rb
@@ -153,7 +153,7 @@ def lookup(string)
end
def lookup_by_extension(extension)
- EXTENSION_LOOKUP[extension.to_s]
+ EXTENSION_LOOKUP[extension.to_s] || NullMimeTypeObject.new
end
# Registers an alias that's not used on mime type lookup, but can be referenced directly. Especially useful for
@@ -301,6 +301,17 @@ def respond_to_missing?(method, include_private = false) #:nodoc:
method.to_s.ends_with? '?'
end
end
+
+ class NullMimeTypeObject
+ private
+ def method_missing(method, *args)
+ if method.to_s.ends_with? '?'
+ false
+ else
+ super
+ end
+ end
+ end
end
require 'action_dispatch/http/mime_types'
View
12 actionpack/test/dispatch/request_test.rb
@@ -590,7 +590,17 @@ def url_for(options = {})
request = stub_request
request.expects(:parameters).at_least_once.returns({ :format => :unknown })
- assert request.formats.empty?
+ assert_instance_of Mime::NullMimeTypeObject , 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.html?, false
+ assert_equal request.format.xml?, false
+ assert_equal request.format.json?, false
+ assert !request.format.html?
end
test "formats with xhr request" do
Please sign in to comment.
Something went wrong with that request. Please try again.