diff options
| author | Joshua Peek <josh@joshpeek.com> | 2009-08-21 16:49:33 -0500 | 
|---|---|---|
| committer | Joshua Peek <josh@joshpeek.com> | 2009-08-21 16:49:33 -0500 | 
| commit | b58acea5696c777ae828d7866fcff334d493b4d3 (patch) | |
| tree | 608b8e70573e64a958b44d340de94d33ee785393 /actionpack | |
| parent | ce61a6bd551a96205892a125c8835c4bc69c4fad (diff) | |
| download | rails-b58acea5696c777ae828d7866fcff334d493b4d3.tar.gz rails-b58acea5696c777ae828d7866fcff334d493b4d3.tar.bz2 rails-b58acea5696c777ae828d7866fcff334d493b4d3.zip  | |
Move legacy param_parsers config onto AD::ParamsParser
Diffstat (limited to 'actionpack')
| -rw-r--r-- | actionpack/lib/action_controller/metal/compatibility.rb | 6 | ||||
| -rw-r--r-- | actionpack/lib/action_dispatch/middleware/params_parser.rb | 12 | ||||
| -rw-r--r-- | actionpack/test/controller/webservice_test.rb | 129 | 
3 files changed, 74 insertions, 73 deletions
diff --git a/actionpack/lib/action_controller/metal/compatibility.rb b/actionpack/lib/action_controller/metal/compatibility.rb index 5b0165f0e7..22f9ab219c 100644 --- a/actionpack/lib/action_controller/metal/compatibility.rb +++ b/actionpack/lib/action_controller/metal/compatibility.rb @@ -16,12 +16,6 @@ module ActionController        cattr_accessor :allow_concurrency        self.allow_concurrency = false -      cattr_accessor :param_parsers -      self.param_parsers = { Mime::MULTIPART_FORM   => :multipart_form, -                             Mime::URL_ENCODED_FORM => :url_encoded_form, -                             Mime::XML              => :xml_simple, -                             Mime::JSON             => :json } -        cattr_accessor :relative_url_root        self.relative_url_root = ENV['RAILS_RELATIVE_URL_ROOT'] diff --git a/actionpack/lib/action_dispatch/middleware/params_parser.rb b/actionpack/lib/action_dispatch/middleware/params_parser.rb index ff2b2fe74b..32ccb5c931 100644 --- a/actionpack/lib/action_dispatch/middleware/params_parser.rb +++ b/actionpack/lib/action_dispatch/middleware/params_parser.rb @@ -2,11 +2,13 @@ require 'active_support/json'  module ActionDispatch    class ParamsParser -    ActionController::Base.param_parsers[Mime::XML] = :xml_simple -    ActionController::Base.param_parsers[Mime::JSON] = :json +    DEFAULT_PARSERS = { +      Mime::XML => :xml_simple, +      Mime::JSON => :json +    } -    def initialize(app) -      @app = app +    def initialize(app, parsers = {}) +      @app, @parsers = app, DEFAULT_PARSERS.merge(parsers)      end      def call(env) @@ -24,7 +26,7 @@ module ActionDispatch          return false if request.content_length.zero?          mime_type = content_type_from_legacy_post_data_format_header(env) || request.content_type -        strategy = ActionController::Base.param_parsers[mime_type] +        strategy = @parsers[mime_type]          return false unless strategy diff --git a/actionpack/test/controller/webservice_test.rb b/actionpack/test/controller/webservice_test.rb index 9bf8da7276..3fded34d78 100644 --- a/actionpack/test/controller/webservice_test.rb +++ b/actionpack/test/controller/webservice_test.rb @@ -24,11 +24,6 @@ class WebServiceTest < ActionController::IntegrationTest    def setup      @controller = TestController.new -    @default_param_parsers = ActionController::Base.param_parsers.dup -  end - -  def teardown -    ActionController::Base.param_parsers = @default_param_parsers    end    def test_check_parameters @@ -110,58 +105,61 @@ class WebServiceTest < ActionController::IntegrationTest    def test_post_xml_using_an_attributted_node_named_type      with_test_route_set do -      ActionController::Base.param_parsers[Mime::XML] = Proc.new { |data| Hash.from_xml(data)['request'].with_indifferent_access } -      post "/", '<request><type type="string">Arial,12</type><z>3</z></request>', -        {'CONTENT_TYPE' => 'application/xml'} - -      assert_equal 'type, z', @controller.response.body -      assert @controller.params.has_key?(:type) -      assert_equal 'Arial,12', @controller.params['type'], @controller.params.inspect -      assert_equal '3', @controller.params['z'], @controller.params.inspect +      with_params_parsers Mime::XML => Proc.new { |data| Hash.from_xml(data)['request'].with_indifferent_access } do +        post "/", '<request><type type="string">Arial,12</type><z>3</z></request>', +          {'CONTENT_TYPE' => 'application/xml'} + +        assert_equal 'type, z', @controller.response.body +        assert @controller.params.has_key?(:type) +        assert_equal 'Arial,12', @controller.params['type'], @controller.params.inspect +        assert_equal '3', @controller.params['z'], @controller.params.inspect +      end      end    end    def test_register_and_use_yaml      with_test_route_set do -      ActionController::Base.param_parsers[Mime::YAML] = Proc.new { |d| YAML.load(d) } -      post "/", {"entry" => "loaded from yaml"}.to_yaml, -        {'CONTENT_TYPE' => 'application/x-yaml'} +      with_params_parsers Mime::YAML => Proc.new { |d| YAML.load(d) } do +        post "/", {"entry" => "loaded from yaml"}.to_yaml, +          {'CONTENT_TYPE' => 'application/x-yaml'} -      assert_equal 'entry', @controller.response.body -      assert @controller.params.has_key?(:entry) -      assert_equal 'loaded from yaml', @controller.params["entry"] +        assert_equal 'entry', @controller.response.body +        assert @controller.params.has_key?(:entry) +        assert_equal 'loaded from yaml', @controller.params["entry"] +      end      end    end    def test_register_and_use_yaml_as_symbol      with_test_route_set do -      ActionController::Base.param_parsers[Mime::YAML] = :yaml -      post "/", {"entry" => "loaded from yaml"}.to_yaml, -        {'CONTENT_TYPE' => 'application/x-yaml'} +      with_params_parsers Mime::YAML => :yaml do +        post "/", {"entry" => "loaded from yaml"}.to_yaml, +          {'CONTENT_TYPE' => 'application/x-yaml'} -      assert_equal 'entry', @controller.response.body -      assert @controller.params.has_key?(:entry) -      assert_equal 'loaded from yaml', @controller.params["entry"] +        assert_equal 'entry', @controller.response.body +        assert @controller.params.has_key?(:entry) +        assert_equal 'loaded from yaml', @controller.params["entry"] +      end      end    end    def test_register_and_use_xml_simple      with_test_route_set do -      ActionController::Base.param_parsers[Mime::XML] = Proc.new { |data| Hash.from_xml(data)['request'].with_indifferent_access } -      post "/", '<request><summary>content...</summary><title>SimpleXml</title></request>', -        {'CONTENT_TYPE' => 'application/xml'} - -      assert_equal 'summary, title', @controller.response.body -      assert @controller.params.has_key?(:summary) -      assert @controller.params.has_key?(:title) -      assert_equal 'content...', @controller.params["summary"] -      assert_equal 'SimpleXml', @controller.params["title"] +      with_params_parsers Mime::XML => Proc.new { |data| Hash.from_xml(data)['request'].with_indifferent_access } do +        post "/", '<request><summary>content...</summary><title>SimpleXml</title></request>', +          {'CONTENT_TYPE' => 'application/xml'} + +        assert_equal 'summary, title', @controller.response.body +        assert @controller.params.has_key?(:summary) +        assert @controller.params.has_key?(:title) +        assert_equal 'content...', @controller.params["summary"] +        assert_equal 'SimpleXml', @controller.params["title"] +      end      end    end    def test_use_xml_ximple_with_empty_request      with_test_route_set do -      ActionController::Base.param_parsers[Mime::XML] = :xml_simple        assert_nothing_raised { post "/", "", {'CONTENT_TYPE' => 'application/xml'} }        assert @controller.response.body.blank?      end @@ -169,7 +167,6 @@ class WebServiceTest < ActionController::IntegrationTest    def test_dasherized_keys_as_xml      with_test_route_set do -      ActionController::Base.param_parsers[Mime::XML] = :xml_simple        post "/?full=1", "<first-key>\n<sub-key>...</sub-key>\n</first-key>",          {'CONTENT_TYPE' => 'application/xml'}        assert_equal 'action, controller, first_key(sub_key), full', @controller.response.body @@ -179,7 +176,6 @@ class WebServiceTest < ActionController::IntegrationTest    def test_typecast_as_xml      with_test_route_set do -      ActionController::Base.param_parsers[Mime::XML] = :xml_simple        xml = <<-XML          <data>            <a type="integer">15</a> @@ -208,7 +204,6 @@ class WebServiceTest < ActionController::IntegrationTest    def test_entities_unescaped_as_xml_simple      with_test_route_set do -      ActionController::Base.param_parsers[Mime::XML] = :xml_simple        xml = <<-XML          <data><foo "bar's" & friends></data>        XML @@ -219,34 +214,44 @@ class WebServiceTest < ActionController::IntegrationTest    def test_typecast_as_yaml      with_test_route_set do -      ActionController::Base.param_parsers[Mime::YAML] = :yaml -      yaml = <<-YAML -        --- -        data: -          a: 15 -          b: false -          c: true -          d: 2005-03-17 -          e: 2005-03-17T21:41:07Z -          f: unparsed -          g: -            - 1 -            - hello -            - 1974-07-25 -      YAML -      post "/", yaml, {'CONTENT_TYPE' => 'application/x-yaml'} -      params = @controller.params -      assert_equal 15, params[:data][:a] -      assert_equal false, params[:data][:b] -      assert_equal true, params[:data][:c] -      assert_equal Date.new(2005,3,17), params[:data][:d] -      assert_equal Time.utc(2005,3,17,21,41,7), params[:data][:e] -      assert_equal "unparsed", params[:data][:f] -      assert_equal [1, "hello", Date.new(1974,7,25)], params[:data][:g] +      with_params_parsers Mime::YAML => :yaml do +        yaml = <<-YAML +          --- +          data: +            a: 15 +            b: false +            c: true +            d: 2005-03-17 +            e: 2005-03-17T21:41:07Z +            f: unparsed +            g: +              - 1 +              - hello +              - 1974-07-25 +        YAML +        post "/", yaml, {'CONTENT_TYPE' => 'application/x-yaml'} +        params = @controller.params +        assert_equal 15, params[:data][:a] +        assert_equal false, params[:data][:b] +        assert_equal true, params[:data][:c] +        assert_equal Date.new(2005,3,17), params[:data][:d] +        assert_equal Time.utc(2005,3,17,21,41,7), params[:data][:e] +        assert_equal "unparsed", params[:data][:f] +        assert_equal [1, "hello", Date.new(1974,7,25)], params[:data][:g] +      end      end    end    private +    def with_params_parsers(parsers = {}) +      old_session = @integration_session +      app = ActionDispatch::ParamsParser.new(ActionController::Routing::Routes, parsers) +      @integration_session = open_session(app) +      yield +    ensure +      @integration_session = old_session +    end +      def with_test_route_set        with_routing do |set|          set.draw do |map|  | 
