Class: Hobix::WebApp::QueryString
- Inherits:
- 
      Object
      
        - Object
- Hobix::WebApp::QueryString
 
- Defined in:
- lib/hobix/webapp/htmlform.rb
Instance Method Summary collapse
- 
  
    
      #decode_as_application_x_www_form_urlencoded  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    decode self as application/x-www-form-urlencoded and returns HTMLFormQuery object. 
- 
  
    
      #decode_as_multipart_form_data(boundary)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    decode self as multipart/form-data and returns HTMLFormQuery object. 
Instance Method Details
#decode_as_application_x_www_form_urlencoded ⇒ Object
decode self as application/x-www-form-urlencoded and returns HTMLFormQuery object.
| 6 7 8 9 10 11 12 13 14 15 16 17 | # File 'lib/hobix/webapp/htmlform.rb', line 6 def decode_as_application_x_www_form_urlencoded # xxx: warning if invalid? pairs = [] @escaped_query_string.scan(/([^&;=]*)=([^&;]*)/) {|key, val| key.gsub!(/\+/, ' ') key.gsub!(/%([0-9A-F][0-9A-F])/i) { [$1].pack("H*") } val.gsub!(/\+/, ' ') val.gsub!(/%([0-9A-F][0-9A-F])/i) { [$1].pack("H*") } pairs << [key.freeze, val.freeze] } HTMLFormQuery.new(pairs) end | 
#decode_as_multipart_form_data(boundary) ⇒ Object
decode self as multipart/form-data and returns HTMLFormQuery object.
| 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | # File 'lib/hobix/webapp/htmlform.rb', line 20 def decode_as_multipart_form_data( boundary ) # xxx: warning if invalid? require 'tempfile' pairs = [] boundary = "--" + boundary eol = "\015\012" str = @escaped_query_string.gsub( /(?:\r?\n|\A)#{ Regexp::quote( boundary ) }--#{ eol }.*/m, '' ) str.split( /(?:\r?\n|\A)#{ Regexp::quote( boundary ) }#{ eol }/m ).each do |part| headers = {} header, value = part.split( "#{eol}#{eol}", 2 ) next unless header and value field_name, field_data = nil, {} if header =~ /Content-Disposition: form-data;.*(?:\sname="([^"]+)")/m field_name = $1 end if header =~ /Content-Disposition: form-data;.*(?:\sfilename="([^"]+)")/m body = Tempfile.new( "WebApp" ) body.binmode if defined? body.binmode body.print value body.rewind field_data = {'filename' => $1, 'tempfile' => body} field_data['type'] = $1 if header =~ /Content-Type: (.+?)(?:#{ eol }|\Z)/m else field_data = value.gsub( /#{ eol }\Z/, '' ) end pairs << [field_name, field_data] end HTMLFormQuery.new(pairs) end |