class VCloudSdk::Connection::FileUploader

Public Class Methods

upload(href, file, vcloud_auth_header, http_method = :Put) click to toggle source
# File lib/ruby_vcloud_sdk/connection/file_uploader.rb, line 6
def upload(href, file, vcloud_auth_header, http_method = :Put)
  request = create_request(href, file, vcloud_auth_header, http_method)
  net = create_connection(href)
  net.start do |http|
    response = http.request(request) {
      |http_response| http_response.read_body }
    raise ApiRequestError "Error Response: #{response.code}" if
      response.code.to_i >= 400
    response
  end
end

Private Class Methods

create_connection(href) click to toggle source
# File lib/ruby_vcloud_sdk/connection/file_uploader.rb, line 32
def create_connection(href)
  uri = URI::parse(href)
  net = Net::HTTP.new(uri.host, uri.port)
  net.use_ssl = uri.is_a?(URI::HTTPS)
  net.verify_mode = OpenSSL::SSL::VERIFY_NONE if net.use_ssl?
  net
end
create_request(href, file, vcloud_auth_header, http_method = :Put) click to toggle source
# File lib/ruby_vcloud_sdk/connection/file_uploader.rb, line 20
def create_request(href, file, vcloud_auth_header, http_method = :Put)
  headers = {}
  headers["x-vcloud-authorization"] = vcloud_auth_header
  # Ruby 1.8 does not have size on the file object
  headers["Content-Length"] = File.size(file.path).to_s
  headers["Transfer-Encoding"] = "chunked"
  request_type = Net::HTTP.const_get(http_method)
  request = request_type.new(href, headers)
  request.body_stream = file
  request
end