Sha256: bb95c5744f1f7390c2c4c97c2f56bff63d4b50adf5fa37d210818089ea1728ed

Contents?: true

Size: 1.21 KB

Versions: 16

Compression:

Stored size: 1.21 KB

Contents

# frozen_string_literal: true

module HTTPX
  module Plugins
    #
    # This plugin adds support for passing `http-form_data` objects (like file objects) as "multipart/form-data";
    #
    #   HTTPX.post(URL, form: form: { image: HTTP::FormData::File.new("path/to/file")})
    #
    # https://gitlab.com/honeyryderchuck/httpx/wikis/Multipart-Uploads
    #
    module Multipart
      module FormTranscoder
        module_function

        class Encoder
          extend Forwardable

          def_delegator :@raw, :content_type

          def_delegator :@raw, :to_s

          def_delegator :@raw, :read

          def initialize(form)
            @raw = HTTP::FormData.create(form)
          end

          def bytesize
            @raw.content_length
          end

          def force_encoding(*args)
            @raw.to_s.force_encoding(*args)
          end

          def to_str
            @raw.to_s
          end
        end

        def encode(form)
          Encoder.new(form)
        end
      end

      def self.load_dependencies(*)
        require "http/form_data"
      end

      def self.configure(*)
        Transcoder.register("form", FormTranscoder)
      end
    end
    register_plugin :multipart, Multipart
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
httpx-0.9.0 lib/httpx/plugins/multipart.rb
httpx-0.8.2 lib/httpx/plugins/multipart.rb
httpx-0.8.1 lib/httpx/plugins/multipart.rb
httpx-0.8.0 lib/httpx/plugins/multipart.rb
httpx-0.7.0 lib/httpx/plugins/multipart.rb
httpx-0.6.7 lib/httpx/plugins/multipart.rb
httpx-0.6.6 lib/httpx/plugins/multipart.rb
httpx-0.6.5 lib/httpx/plugins/multipart.rb
httpx-0.6.4 lib/httpx/plugins/multipart.rb
httpx-0.6.3 lib/httpx/plugins/multipart.rb
httpx-0.6.2 lib/httpx/plugins/multipart.rb
httpx-0.6.1 lib/httpx/plugins/multipart.rb
httpx-0.6.0 lib/httpx/plugins/multipart.rb
httpx-0.5.1 lib/httpx/plugins/multipart.rb
httpx-0.5.0 lib/httpx/plugins/multipart.rb
httpx-0.4.1 lib/httpx/plugins/multipart.rb