Sha256: 512f5366687663c53da02cce4709562ced5bf3fe55f456b990d3a6eb543cb507

Contents?: true

Size: 1.38 KB

Versions: 32

Compression:

Stored size: 1.38 KB

Contents

require 'faraday'

module Koala  
  module HTTPService
    class MultipartRequest < Faraday::Request::Multipart
      # Facebook expects nested parameters to be passed in a certain way
      # Based on our testing (https://github.com/arsduo/koala/issues/125),
      # Faraday needs two changes to make that work:
      # 1) [] need to be escaped (e.g. params[foo]=bar ==> params%5Bfoo%5D=bar)
      # 2) such messages need to be multipart-encoded
    
      self.mime_type = 'multipart/form-data'.freeze
    
      def process_request?(env)
        # if the request values contain any hashes or arrays, multipart it
        super || !!(env[:body].respond_to?(:values) && env[:body].values.find {|v| v.is_a?(Hash) || v.is_a?(Array)})
      end   
    
    
      def process_params(params, prefix = nil, pieces = nil, &block)
        params.inject(pieces || []) do |all, (key, value)|
          key = "#{prefix}%5B#{key}%5D" if prefix

          case value
          when Array
            values = value.inject([]) { |a,v| a << [nil, v] }
            process_params(values, key, all, &block)
          when Hash
            process_params(value, key, all, &block)
          else
            all << block.call(key, value)
          end
        end
      end
    end
  end
  
  # @private
  # legacy support for when MultipartRequest lived directly under Koala
  MultipartRequest = HTTPService::MultipartRequest  
end

Version data entries

32 entries across 32 versions & 1 rubygems

Version Path
koala-2.5.0 lib/koala/http_service/multipart_request.rb
koala-2.5.0rc1 lib/koala/http_service/multipart_request.rb
koala-2.4.0 lib/koala/http_service/multipart_request.rb
koala-2.3.0 lib/koala/http_service/multipart_request.rb
koala-2.3.0rc1 lib/koala/http_service/multipart_request.rb
koala-2.2.0 lib/koala/http_service/multipart_request.rb
koala-2.2.0rc3 lib/koala/http_service/multipart_request.rb
koala-2.2.0rc2 lib/koala/http_service/multipart_request.rb
koala-2.2.0rc1 lib/koala/http_service/multipart_request.rb
koala-2.0.0 lib/koala/http_service/multipart_request.rb
koala-2.0.0rc1 lib/koala/http_service/multipart_request.rb
koala-1.11.1 lib/koala/http_service/multipart_request.rb
koala-1.11.0 lib/koala/http_service/multipart_request.rb
koala-1.11.0rc lib/koala/http_service/multipart_request.rb
koala-1.10.1 lib/koala/http_service/multipart_request.rb
koala-1.10.0 lib/koala/http_service/multipart_request.rb
koala-1.10.0rc2 lib/koala/http_service/multipart_request.rb
koala-1.10.0rc lib/koala/http_service/multipart_request.rb
koala-1.9.0 lib/koala/http_service/multipart_request.rb
koala-1.9.0rc1 lib/koala/http_service/multipart_request.rb