Sha256: c57b94c1d4c11983c3f9a0d52a9f7622cb13ffbb73eb888a3dbedd3dc3a66ea7

Contents?: true

Size: 1.66 KB

Versions: 3

Compression:

Stored size: 1.66 KB

Contents

require 'uri'
require 'mime/types'

module Uploadcare
  module UploadingApi
    class UploadParams
      def initialize(global_options, request_options)
        @global_options = global_options
        @request_options = request_options
      end

      def for_url_upload(url)
        {
          source_url: parse_url(url),
          pub_key: public_key,
          store: store
        }.reject { |k, v| v.nil? }
      end

      def for_file_upload(files)
        {
          UPLOADCARE_PUB_KEY: public_key,
          UPLOADCARE_STORE: store
        }.reject { |k, v| v.nil? }.merge(file_params(files))
      end

      private

      attr_reader :global_options, :request_options

      def public_key
        global_options[:public_key]
      end

      def store
        mapping = { true => 1, false => 0, auto: 'auto' }

        global_value = global_options[:autostore]
        per_request_value = request_options[:store]

        mapping[per_request_value] || mapping[global_value]
      end

      def file_params(files)
        Hash[files.map.with_index { |file, i| ["file[#{i}]", build_upload_io(file)] }]
      end

      def parse_url(url)
        uri = URI.parse(url)

        unless uri.is_a?(URI::HTTP) # will also be true for https
          raise ArgumentError, 'invalid url was given'
        end

        uri
      end

      def build_upload_io(file)
        unless file.is_a?(File)
          raise ArgumentError, "expected File object, #{file} given"
        end

        Faraday::UploadIO.new file.path, extract_mime_type(file)
      end

      def extract_mime_type file
        types = MIME::Types.of(file.path)
        types[0].content_type
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
uploadcare-ruby-2.1.2 lib/uploadcare/api/uploading_api/upload_params.rb
uploadcare-ruby-2.1.1 lib/uploadcare/api/uploading_api/upload_params.rb
uploadcare-ruby-2.0.0 lib/uploadcare/api/uploading_api/upload_params.rb