Sha256: ba637ff263406aeac3bdd2cfcc9d57318bd9a8aa00dea6e9d0f8fd62311b93e4

Contents?: true

Size: 1.18 KB

Versions: 3

Compression:

Stored size: 1.18 KB

Contents

require "digest"
require "json"

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

3 entries across 3 versions & 1 rubygems

Version Path
artifactory-gem_import-1.1.0 lib/artifactory/gem_import/gems/uploader.rb
artifactory-gem_import-1.0.0 lib/artifactory/gem_import/gems/uploader.rb
artifactory-gem_import-0.2.2 lib/artifactory/gem_import/gems/uploader.rb