Sha256: 1d8c08eec199bdf4a5b9097ce89f63ca2baaf7c65ea465af39573b1f93ccdda9

Contents?: true

Size: 1.17 KB

Versions: 2

Compression:

Stored size: 1.17 KB

Contents

require "digest"

module Artifactory
  module GemImport
    module Gems
      class Uploader
        def call(url, headers, file_path)
          file = File.open file_path, "r"

          [:ok, upload(url, headers, file)]
        rescue Net::HTTPClientException, Net::HTTPFatalError, Net::OpenTimeout, SocketError => err # TODO handle File errors, JSON parse errors
          [:error, err.message]
        end

        private

        def upload(url, headers, file)
          headers = headers.merge "Content-Length" => file.size.to_s,
                                  "Transfer-Encoding" => "chunked",
                                  "X-Checksum-Sha1" => sha1(file),
                                  "X-Checksum-Md5" => md5(file)

          response = HTTParty.put url,
                                  headers: headers,
                                  body_stream: file

          response.success? ? JSON.parse(response.body) : response.error!
        end

        def sha1(file)
          Digest::SHA1.hexdigest(file.read).tap { file.rewind }
        end

        def md5(file)
          Digest::MD5.hexdigest(file.read).tap { file.rewind }
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
artifactory-gem_import-0.2.0 lib/artifactory/gem_import/gems/uploader.rb
artifactory-gem_import-0.1.4 lib/artifactory/gem_import/gems/uploader.rb