diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2007-09-20 23:34:07 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2007-09-20 23:34:07 +0000 |
commit | 1373991dd8feacb0c09a6115a271777810807668 (patch) | |
tree | 59aa13a830091d5c440d37928f69ff49d9f4ff1a | |
parent | e86d1cd621ca62af6f71b04032b1e07a66c06bb6 (diff) | |
download | rails-1373991dd8feacb0c09a6115a271777810807668.tar.gz rails-1373991dd8feacb0c09a6115a271777810807668.tar.bz2 rails-1373991dd8feacb0c09a6115a271777810807668.zip |
Added that render :json will automatically call .to_json unless its being passed a string [DHH] Added Mime::Type.register_alias for dealing with different formats using the same mime type [DHH]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7520 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r-- | actionpack/CHANGELOG | 25 | ||||
-rwxr-xr-x | actionpack/lib/action_controller/base.rb | 1 | ||||
-rw-r--r-- | actionpack/lib/action_controller/mime_type.rb | 10 |
3 files changed, 34 insertions, 2 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 0d71df79f9..ee19d49c70 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,30 @@ *SVN* +* Added Mime::Type.register_alias for dealing with different formats using the same mime type [DHH]. Example: + + class PostsController < ApplicationController + before_filter :adjust_format_for_iphone + + def index + @posts = Post.find(:all) + + respond_to do |format| + format.html # => renders index.html.erb and uses "text/html" as the content type + format.iphone # => renders index.iphone.erb and uses "text/html" as the content type + end + end + + + private + def adjust_format_for_iphone + if request.env["HTTP_USER_AGENT"] && request.env["HTTP_USER_AGENT"][/iPhone/] + request.format = :iphone + end + end + end + +* Added that render :json will automatically call .to_json unless it's being passed a string [DHH]. + * Autolink behaves well with emails embedded in URLs. #7313 [Jeremy McAnally, tarmo] * Fixed that default layouts did not take the format into account #9564 [lifofifo] diff --git a/actionpack/lib/action_controller/base.rb b/actionpack/lib/action_controller/base.rb index 9a3ab651ac..4630103119 100755 --- a/actionpack/lib/action_controller/base.rb +++ b/actionpack/lib/action_controller/base.rb @@ -826,6 +826,7 @@ module ActionController #:nodoc: render_for_text(xml.respond_to?(:to_xml) ? xml.to_xml : xml, options[:status]) elsif json = options[:json] + json = json.to_json unless json.is_a?(String) json = "#{options[:callback]}(#{json})" unless options[:callback].blank? response.content_type = Mime::JSON render_for_text(json, options[:status]) diff --git a/actionpack/lib/action_controller/mime_type.rb b/actionpack/lib/action_controller/mime_type.rb index 7c7faefa46..29b7723d76 100644 --- a/actionpack/lib/action_controller/mime_type.rb +++ b/actionpack/lib/action_controller/mime_type.rb @@ -52,12 +52,18 @@ module Mime EXTENSION_LOOKUP[extension] end - def register(string, symbol, mime_type_synonyms = [], extension_synonyms = []) + # Registers an alias that's not usd on mime type lookup, but can be referenced directly. Especially useful for + # rendering different HTML versions depending on the user agent, like an iPhone. + def register_alias(string, symbol, extension_synonyms = []) + register(string, symbol, [], extension_synonyms, true) + end + + def register(string, symbol, mime_type_synonyms = [], extension_synonyms = [], skip_lookup = false) Mime.send :const_set, symbol.to_s.upcase, Type.new(string, symbol, mime_type_synonyms) SET << Mime.send(:const_get, symbol.to_s.upcase) - ([string] + mime_type_synonyms).each { |string| LOOKUP[string] = SET.last } + ([string] + mime_type_synonyms).each { |string| LOOKUP[string] = SET.last } unless skip_lookup ([symbol.to_s] + extension_synonyms).each { |ext| EXTENSION_LOOKUP[ext] = SET.last } end |