aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPratik Naik <pratiknaik@gmail.com>2008-12-21 19:04:48 +0000
committerPratik Naik <pratiknaik@gmail.com>2008-12-21 19:04:48 +0000
commitf5b7f0911bc507673afe6a045176e6e3c7305d74 (patch)
tree2b707bf2eb60941e748bc7b19eec01fcb5616b63
parentfab4f96bf2b6cccc95760341e4f65c4cbbb3e9f2 (diff)
parentfcd58dc27a99085b161f2463988d4ee373d44ec6 (diff)
downloadrails-f5b7f0911bc507673afe6a045176e6e3c7305d74.tar.gz
rails-f5b7f0911bc507673afe6a045176e6e3c7305d74.tar.bz2
rails-f5b7f0911bc507673afe6a045176e6e3c7305d74.zip
Merge commit 'fred/more_pullable'
-rw-r--r--actionpack/lib/action_controller/streaming.rb15
-rw-r--r--actionpack/test/controller/send_file_test.rb25
-rw-r--r--railties/lib/commands/dbconsole.rb2
3 files changed, 38 insertions, 4 deletions
diff --git a/actionpack/lib/action_controller/streaming.rb b/actionpack/lib/action_controller/streaming.rb
index 333fb61b45..e1786913a7 100644
--- a/actionpack/lib/action_controller/streaming.rb
+++ b/actionpack/lib/action_controller/streaming.rb
@@ -24,7 +24,8 @@ module ActionController #:nodoc:
# Options:
# * <tt>:filename</tt> - suggests a filename for the browser to use.
# Defaults to <tt>File.basename(path)</tt>.
- # * <tt>:type</tt> - specifies an HTTP content type. Defaults to 'application/octet-stream'.
+ # * <tt>:type</tt> - specifies an HTTP content type. Defaults to 'application/octet-stream'. You can specify
+ # either a string or a symbol for a registered type register with <tt>Mime::Type.register</tt>, for example :json
# * <tt>:length</tt> - used to manually override the length (in bytes) of the content that
# is going to be sent to the client. Defaults to <tt>File.size(path)</tt>.
# * <tt>:disposition</tt> - specifies whether the file will be shown inline or downloaded.
@@ -107,7 +108,8 @@ module ActionController #:nodoc:
#
# Options:
# * <tt>:filename</tt> - suggests a filename for the browser to use.
- # * <tt>:type</tt> - specifies an HTTP content type. Defaults to 'application/octet-stream'.
+ # * <tt>:type</tt> - specifies an HTTP content type. Defaults to 'application/octet-stream'. You can specify
+ # either a string or a symbol for a registered type register with <tt>Mime::Type.register</tt>, for example :json
# * <tt>:disposition</tt> - specifies whether the file will be shown inline or downloaded.
# Valid values are 'inline' and 'attachment' (default).
# * <tt>:status</tt> - specifies the status code to send with the response. Defaults to '200 OK'.
@@ -143,9 +145,16 @@ module ActionController #:nodoc:
disposition <<= %(; filename="#{options[:filename]}") if options[:filename]
+ content_type = options[:type]
+ if content_type.is_a?(Symbol)
+ raise ArgumentError, "Unknown MIME type #{options[:type]}" unless Mime::EXTENSION_LOOKUP.has_key?(content_type.to_s)
+ content_type = Mime::Type.lookup_by_extension(content_type.to_s)
+ end
+ content_type = content_type.to_s.strip # fixes a problem with extra '\r' with some browsers
+
headers.update(
'Content-Length' => options[:length],
- 'Content-Type' => options[:type].to_s.strip, # fixes a problem with extra '\r' with some browsers
+ 'Content-Type' => content_type,
'Content-Disposition' => disposition,
'Content-Transfer-Encoding' => 'binary'
)
diff --git a/actionpack/test/controller/send_file_test.rb b/actionpack/test/controller/send_file_test.rb
index c4349bfc7f..1b7486ad34 100644
--- a/actionpack/test/controller/send_file_test.rb
+++ b/actionpack/test/controller/send_file_test.rb
@@ -119,6 +119,31 @@ class SendFileTest < Test::Unit::TestCase
assert_equal 'private', h['Cache-Control']
end
+ def test_send_file_headers_with_mime_lookup_with_symbol
+ options = {
+ :length => 1,
+ :type => :png
+ }
+
+ @controller.headers = {}
+ @controller.send(:send_file_headers!, options)
+
+ headers = @controller.headers
+
+ assert_equal 'image/png', headers['Content-Type']
+ end
+
+
+ def test_send_file_headers_with_bad_symbol
+ options = {
+ :length => 1,
+ :type => :this_type_is_not_registered
+ }
+
+ @controller.headers = {}
+ assert_raises(ArgumentError){ @controller.send(:send_file_headers!, options) }
+ end
+
%w(file data).each do |method|
define_method "test_send_#{method}_status" do
@controller.options = { :stream => false, :status => 500 }
diff --git a/railties/lib/commands/dbconsole.rb b/railties/lib/commands/dbconsole.rb
index 6ff895aa30..06848d3c91 100644
--- a/railties/lib/commands/dbconsole.rb
+++ b/railties/lib/commands/dbconsole.rb
@@ -41,7 +41,7 @@ when "mysql"
if config['password'] && include_password
args << "--password=#{config['password']}"
- elsif config['password'] && !config['password'].empty?
+ elsif config['password'] && !config['password'].to_s.empty?
args << "-p"
end