aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib
diff options
context:
space:
mode:
authorYehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>2009-06-15 11:21:08 -0700
committerYehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>2009-06-15 11:21:08 -0700
commit5a8a550a45c5ca7abc9785ed180d5f46189c9958 (patch)
tree57e604e8485e34a6d7058c8f243e941d38bca949 /actionpack/lib
parentc50b03b754948b676b74c334edfb277fa45c1d14 (diff)
downloadrails-5a8a550a45c5ca7abc9785ed180d5f46189c9958.tar.gz
rails-5a8a550a45c5ca7abc9785ed180d5f46189c9958.tar.bz2
rails-5a8a550a45c5ca7abc9785ed180d5f46189c9958.zip
Finish making things pass with updated internal content_type semantics
Diffstat (limited to 'actionpack/lib')
-rw-r--r--actionpack/lib/action_controller/base/mime_responds.rb2
-rw-r--r--actionpack/lib/action_controller/base/streaming.rb9
-rw-r--r--actionpack/lib/action_controller/new_base/rack_convenience.rb2
-rw-r--r--actionpack/lib/action_controller/testing/process.rb2
-rw-r--r--actionpack/lib/action_dispatch/http/response.rb56
5 files changed, 20 insertions, 51 deletions
diff --git a/actionpack/lib/action_controller/base/mime_responds.rb b/actionpack/lib/action_controller/base/mime_responds.rb
index 3c17dda1a1..5c7218691e 100644
--- a/actionpack/lib/action_controller/base/mime_responds.rb
+++ b/actionpack/lib/action_controller/base/mime_responds.rb
@@ -125,7 +125,7 @@ module ActionController #:nodoc:
end
@controller.template.formats = [mime_type.to_sym]
- @response.content_type = mime_type.to_s
+ @response.content_type = mime_type
block_given? ? block.call : @controller.send(:render, :action => @controller.action_name)
end
diff --git a/actionpack/lib/action_controller/base/streaming.rb b/actionpack/lib/action_controller/base/streaming.rb
index 73d4bde6c1..5c72fc9ad9 100644
--- a/actionpack/lib/action_controller/base/streaming.rb
+++ b/actionpack/lib/action_controller/base/streaming.rb
@@ -162,15 +162,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)
+ raise ArgumentError, "Unknown MIME type #{options[:type]}" unless Mime::EXTENSION_LOOKUP.key?(content_type.to_s)
+ self.content_type = Mime::Type.lookup_by_extension(content_type.to_s)
+ else
+ self.content_type = content_type
end
- content_type = content_type.to_s.strip # fixes a problem with extra '\r' with some browsers
headers.merge!(
'Content-Length' => options[:length],
- 'Content-Type' => content_type,
'Content-Disposition' => disposition,
'Content-Transfer-Encoding' => 'binary'
)
diff --git a/actionpack/lib/action_controller/new_base/rack_convenience.rb b/actionpack/lib/action_controller/new_base/rack_convenience.rb
index 5dfa7d12f3..805157b0e3 100644
--- a/actionpack/lib/action_controller/new_base/rack_convenience.rb
+++ b/actionpack/lib/action_controller/new_base/rack_convenience.rb
@@ -3,7 +3,7 @@ module ActionController
extend ActiveSupport::Concern
included do
- delegate :headers, :status=, :location=,
+ delegate :headers, :status=, :location=, :content_type=,
:status, :location, :content_type, :to => "@_response"
attr_internal :request, :response
end
diff --git a/actionpack/lib/action_controller/testing/process.rb b/actionpack/lib/action_controller/testing/process.rb
index 9647f8ce45..ea5752d4f5 100644
--- a/actionpack/lib/action_controller/testing/process.rb
+++ b/actionpack/lib/action_controller/testing/process.rb
@@ -56,6 +56,8 @@ module ActionController #:nodoc:
@block = nil
@length = 0
@body = []
+ @charset = nil
+ @content_type = nil
@request = @template = nil
end
diff --git a/actionpack/lib/action_dispatch/http/response.rb b/actionpack/lib/action_dispatch/http/response.rb
index b9db7a4508..e58b4b5e19 100644
--- a/actionpack/lib/action_dispatch/http/response.rb
+++ b/actionpack/lib/action_dispatch/http/response.rb
@@ -67,12 +67,7 @@ module ActionDispatch # :nodoc:
end
def body=(body)
- @body =
- if body.respond_to?(:to_str)
- [body]
- else
- body
- end
+ @body = body.respond_to?(:to_str) ? [body] : body
end
def body_parts
@@ -96,36 +91,7 @@ module ActionDispatch # :nodoc:
# If a character set has been defined for this response (see charset=) then
# the character set information will also be included in the content type
# information.
- def content_type=(mime_type)
- self.headers["Content-Type"] =
- if mime_type =~ /charset/ || (c = charset).nil?
- mime_type.to_s
- else
- "#{mime_type}; charset=#{c}"
- end
- end
-
- # Returns the response's content MIME type, or nil if content type has been set.
- def content_type
- content_type = String(headers["Content-Type"] || headers["type"]).split(";")[0]
- content_type.blank? ? nil : content_type
- end
-
- # Set the charset of the Content-Type header. Set to nil to remove it.
- # If no content type is set, it defaults to HTML.
- def charset=(charset)
- headers["Content-Type"] =
- if charset
- "#{content_type || Mime::HTML}; charset=#{charset}"
- else
- content_type || Mime::HTML.to_s
- end
- end
-
- def charset
- charset = String(headers["Content-Type"] || headers["type"]).split(";")[1]
- charset.blank? ? nil : charset.strip.split("=")[1]
- end
+ attr_accessor :charset, :content_type
def last_modified
if last = headers['Last-Modified']
@@ -162,15 +128,15 @@ module ActionDispatch # :nodoc:
end
def assign_default_content_type_and_charset!
- if type = headers['Content-Type'] || headers['type']
- unless type =~ /charset=/ || sending_file?
- headers['Content-Type'] = "#{type}; charset=#{default_charset}"
- end
- else
- type = Mime::HTML.to_s
- type += "; charset=#{default_charset}" unless sending_file?
- headers['Content-Type'] = type
- end
+ return if !headers["Content-Type"].blank?
+
+ @content_type ||= Mime::HTML
+ @charset ||= default_charset
+
+ type = @content_type.to_s.dup
+ type << "; charset=#{@charset}" unless sending_file?
+
+ headers["Content-Type"] = type
end
def prepare!