Changeset 3847
- Timestamp:
- 03/12/06 16:03:44 (3 years ago)
- Files:
-
- trunk/actionpack/lib/action_controller/base.rb (modified) (2 diffs)
- trunk/actionpack/lib/action_controller/cgi_ext/cgi_methods.rb (modified) (1 diff)
- trunk/actionpack/lib/action_controller/deprecated_request_methods.rb (modified) (1 diff)
- trunk/actionpack/lib/action_controller/mime_type.rb (modified) (3 diffs)
- trunk/actionpack/lib/action_controller/request.rb (modified) (1 diff)
- trunk/actionpack/lib/action_view/helpers/javascripts/prototype.js (modified) (1 diff)
- trunk/actionpack/test/controller/mime_responds_test.rb (modified) (2 diffs)
- trunk/actionpack/test/controller/webservice_test.rb (modified) (5 diffs)
- trunk/railties/html/javascripts/prototype.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/actionpack/lib/action_controller/base.rb
r3838 r3847 272 272 # Example of doing your own parser for a custom content type: 273 273 # 274 # ActionController::Base.param_parsers[ 'application/atom+xml'] = Proc.new do |data|274 # ActionController::Base.param_parsers[Mime::Type.lookup('application/atom+xml')] = Proc.new do |data| 275 275 # node = REXML::Document.new(post) 276 276 # { node.root.name => node.root } … … 282 282 # re-register XmlSimple as application/xml handler and enable application/x-yaml like this: 283 283 # 284 # ActionController::Base.param_parsers[ 'application/xml']=284 # ActionController::Base.param_parsers[Mime::XML] = 285 285 # Proc.new { |data| XmlSimple.xml_in(data, 'ForceArray' => false) } 286 # ActionController::Base.param_parsers[ 'application/x-yaml'] = :yaml287 @@param_parsers = { 'application/xml'=> :xml_simple }286 # ActionController::Base.param_parsers[Mime::YAML] = :yaml 287 @@param_parsers = { Mime::XML => :xml_simple } 288 288 cattr_accessor :param_parsers 289 289 trunk/actionpack/lib/action_controller/cgi_ext/cgi_methods.rb
r3808 r3847 59 59 end 60 60 61 def self.parse_formatted_request_parameters( format, raw_post_data)62 params = case strategy = ActionController::Base.param_parsers[ format]61 def self.parse_formatted_request_parameters(mime_type, raw_post_data) 62 params = case strategy = ActionController::Base.param_parsers[mime_type] 63 63 when Proc 64 64 strategy.call(raw_post_data) trunk/actionpack/lib/action_controller/deprecated_request_methods.rb
r3777 r3847 7 7 # X-Post-Data-Format HTTP header if present. 8 8 def post_format 9 case content_type 9 case content_type.to_s 10 10 when 'application/xml' 11 11 :xml trunk/actionpack/lib/action_controller/mime_type.rb
r3844 r3847 1 1 module Mime 2 class Type < String2 class Type 3 3 def self.lookup(string) 4 4 LOOKUP[string] … … 7 7 def initialize(string, symbol = nil, synonyms = []) 8 8 @symbol, @synonyms = symbol, synonyms 9 super(string) 9 @string = string 10 end 11 12 def to_s 13 @string 10 14 end 11 15 … … 20 24 super 21 25 end 26 end 27 28 def ==(mime_type) 29 (@synonyms + [ self ]).any? { |synonym| synonym.to_s == mime_type.to_s } if mime_type 22 30 end 23 31 end trunk/actionpack/lib/action_controller/request.rb
r3844 r3847 71 71 [ content_type, Mime::ALL ] 72 72 else 73 @env['HTTP_ACCEPT'].split(" ;").collect! do |mime_type|74 Mime::Type.lookup(mime_type.s trip)73 @env['HTTP_ACCEPT'].split(",").collect! do |mime_type| 74 Mime::Type.lookup(mime_type.split(";").first.strip) 75 75 end 76 76 end trunk/actionpack/lib/action_view/helpers/javascripts/prototype.js
r3838 r3847 705 705 ['X-Requested-With', 'XMLHttpRequest', 706 706 'X-Prototype-Version', Prototype.Version, 707 'Accept', 'text/javascript ; text/html; text/xml;*/*' ];707 'Accept', 'text/javascript, text/xml, text/html, */*' ]; 708 708 709 709 if (this.options.method == 'post') { trunk/actionpack/test/controller/mime_responds_test.rb
r3844 r3847 112 112 113 113 def test_js_or_html 114 @request.env["HTTP_ACCEPT"] = "text/javascript ;text/html"114 @request.env["HTTP_ACCEPT"] = "text/javascript, text/html" 115 115 get :js_or_html 116 116 assert_equal 'JS', @response.body … … 124 124 125 125 def test_js_or_anything 126 @request.env["HTTP_ACCEPT"] = "text/javascript ;*/*"126 @request.env["HTTP_ACCEPT"] = "text/javascript, */*" 127 127 get :js_or_html 128 128 assert_equal 'JS', @response.body trunk/actionpack/test/controller/webservice_test.rb
r3838 r3847 29 29 @controller = TestController.new 30 30 ActionController::Base.param_parsers.clear 31 ActionController::Base.param_parsers[ 'application/xml'] = :xml_node31 ActionController::Base.param_parsers[Mime::XML] = :xml_node 32 32 end 33 33 … … 56 56 57 57 def test_register_and_use_yaml 58 ActionController::Base.param_parsers[ 'application/x-yaml'] = Proc.new { |d| YAML.load(d) }58 ActionController::Base.param_parsers[Mime::YAML] = Proc.new { |d| YAML.load(d) } 59 59 process('POST', 'application/x-yaml', {"entry" => "loaded from yaml"}.to_yaml) 60 60 assert_equal 'entry', @controller.response.body … … 64 64 65 65 def test_register_and_use_yaml_as_symbol 66 ActionController::Base.param_parsers[ 'application/x-yaml'] = :yaml66 ActionController::Base.param_parsers[Mime::YAML] = :yaml 67 67 process('POST', 'application/x-yaml', {"entry" => "loaded from yaml"}.to_yaml) 68 68 assert_equal 'entry', @controller.response.body … … 72 72 73 73 def test_register_and_use_xml_simple 74 ActionController::Base.param_parsers[ 'application/xml'] = Proc.new { |data| XmlSimple.xml_in(data, 'ForceArray' => false) }74 ActionController::Base.param_parsers[Mime::XML] = Proc.new { |data| XmlSimple.xml_in(data, 'ForceArray' => false) } 75 75 process('POST', 'application/xml', '<request><summary>content...</summary><title>SimpleXml</title></request>' ) 76 76 assert_equal 'summary, title', @controller.response.body … … 83 83 def test_deprecated_request_methods 84 84 process('POST', 'application/x-yaml') 85 assert_equal 'application/x-yaml', @controller.request.content_type85 assert_equal Mime::YAML, @controller.request.content_type 86 86 assert_equal true, @controller.request.post? 87 87 assert_equal :yaml, @controller.request.post_format trunk/railties/html/javascripts/prototype.js
r3845 r3847 705 705 ['X-Requested-With', 'XMLHttpRequest', 706 706 'X-Prototype-Version', Prototype.Version, 707 'Accept', 'text/javascript ; text/html; text/xml;*/*' ];707 'Accept', 'text/javascript, text/xml, text/html, */*' ]; 708 708 709 709 if (this.options.method == 'post') {