Sha256: 9565c273225e996a19d2f9c27d62e08558e60773f5706fe965477a0e9325de6d

Contents?: true

Size: 1.27 KB

Versions: 5

Compression:

Stored size: 1.27 KB

Contents

module PlateApi
  class PostMultipartRequest < Request
    HttpAdapter = :net_http

    def initialize(public_key, secret, path, parameters = {}, custom_server = nil)
      super(public_key, secret, "POST", path, custom_server)

      @post_parameters = map_parameters(parameters)
    end

    def extra_builder_options(builder)
      builder.request :multipart
      builder.request :url_encoded
    end

    def extra_request_options(request)
      request.body = @post_parameters
    end

    def mime_type(full_path)
      begin
        IO.popen(["file", "--brief", "--mime-type", full_path], in: :close, err: :close) { |io| io.read.chomp }
      rescue SystemCallError
        # determine mime_type based on extension as a fallback, in case `file` is not installed on the client machine
        mime_type_fallback(full_path)
      end
    end

    def mime_type_fallback(full_path)
      MIME::Types.type_for(full_path).first.content_type
    end

    def map_parameters(parameters)
      parameters.keys.each do |key|
        val = parameters[key]
        if val.is_a? File
          full_path = File.expand_path(val)
          mime_type = mime_type(full_path)
          parameters[key] = Faraday::UploadIO.new(full_path, mime_type)
        end
      end

      return parameters
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
plate_api-1.2.8 lib/plate_api/post_multipart_request.rb
plate_api-1.2.7 lib/plate_api/post_multipart_request.rb
plate_api-1.2.6 lib/plate_api/post_multipart_request.rb
plate_api-1.2.5 lib/plate_api/post_multipart_request.rb
plate_api-1.2.4 lib/plate_api/post_multipart_request.rb