Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 1303

Show
Ignore:
Timestamp:
05/14/05 08:36:19 (3 years ago)
Author:
david
Message:

Added support for POST data in form of YAML or XML, which is controller through the POST_DATA_MARSHAL header

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/actionpack/lib/action_controller/cgi_ext/cgi_ext.rb

    r525 r1303  
    2626 
    2727  def request_parameters 
    28     CGIMethods.parse_request_parameters(params
     28    CGIMethods.parse_request_parameters(params, env_table
    2929  end 
    3030 
  • trunk/actionpack/lib/action_controller/cgi_ext/cgi_methods.rb

    r39 r1303  
    11require 'cgi' 
     2require 'action_controller/vendor/xml_simple' 
    23 
    34# Static methods for parsing the query and request parameters that can be used in 
     
    1718 
    1819        if k =~ /(.*)\[\]$/ 
    19             if parsed_params.has_key? $1 
    20                 parsed_params[$1] << v 
    21             else 
    22                 parsed_params[$1] = [v] 
    23             end 
     20          if parsed_params.has_key? $1 
     21            parsed_params[$1] << v 
     22          else 
     23            parsed_params[$1] = [v] 
     24          end 
    2425        else 
    25             parsed_params[k] = v.nil? ? nil : v 
     26          parsed_params[k] = v.nil? ? nil : v 
    2627        end 
    2728      } 
     
    4647     
    4748      return parsed_params 
     49    end 
     50 
     51    def self.parse_formatted_request_parameters(format, raw_post_data) 
     52      case format 
     53        when :xml 
     54          return XmlSimple.xml_in(raw_post_data, 'ForceArray' => false) 
     55        when :yaml 
     56          return YAML.load(raw_post_data) 
     57      end 
     58    rescue Object => e 
     59      { "exception" => "#{e.message} (#{e.class})", "backtrace" => e.backtrace,  
     60        "raw_post_data" => raw_post_data, "format" => format } 
    4861    end 
    4962 
  • trunk/actionpack/lib/action_controller/cgi_process.rb

    r1211 r1303  
    6464 
    6565    def request_parameters 
    66       CGIMethods.parse_request_parameters(@cgi.params) 
     66      if env['HTTP_POST_DATA_FORMAT'] 
     67        CGIMethods.parse_formatted_request_parameters(env['HTTP_POST_DATA_FORMAT'].downcase.intern, env['RAW_POST_DATA']) 
     68      else 
     69        CGIMethods.parse_request_parameters(@cgi.params) 
     70      end 
    6771    end 
    6872     
  • trunk/actionpack/lib/action_controller/request.rb

    r1211 r1303  
    3030    def head? 
    3131      method == :head 
     32    end 
     33 
     34 
     35    def post_format 
     36      if env['POST_DATA_FORMAT'] 
     37        env['POST_DATA_FORMAT'].downcase.intern 
     38      else 
     39        :query_string 
     40      end 
     41    end 
     42 
     43    def formatted_post? 
     44      [ :xml, :yaml ].include?(post_format) && post? 
     45    end 
     46 
     47    def xml_post? 
     48      post_format == :xml && post? 
     49    end 
     50 
     51    def yaml_post? 
     52      post_format == :yaml && post? 
    3253    end 
    3354