aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/CHANGELOG.md5
-rw-r--r--actionpack/lib/action_dispatch/http/mime_type.rb13
-rw-r--r--actionpack/test/dispatch/request_test.rb12
3 files changed, 28 insertions, 2 deletions
diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md
index 48ba1518e0..cc042b5ac3 100644
--- a/actionpack/CHANGELOG.md
+++ b/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.
diff --git a/actionpack/lib/action_dispatch/http/mime_type.rb b/actionpack/lib/action_dispatch/http/mime_type.rb
index 3d560518e1..5ee6f2056e 100644
--- a/actionpack/lib/action_dispatch/http/mime_type.rb
+++ b/actionpack/lib/action_dispatch/http/mime_type.rb
@@ -153,7 +153,7 @@ module Mime
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 @@ module Mime
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'
diff --git a/actionpack/test/dispatch/request_test.rb b/actionpack/test/dispatch/request_test.rb
index e2964f9071..b3466faffb 100644
--- a/actionpack/test/dispatch/request_test.rb
+++ b/actionpack/test/dispatch/request_test.rb
@@ -590,7 +590,17 @@ class RequestTest < ActiveSupport::TestCase
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