class RobocaseShipit::API

Public Class Methods

new(key, token) click to toggle source
# File lib/robocase_shipit/api.rb, line 10
def initialize(key, token)
  @key = key
  @token = token
end
robocase_url() click to toggle source
# File lib/robocase_shipit/api.rb, line 6
def self.robocase_url
  ENV['ROBOCASE_URL'] ? ENV['ROBOCASE_URL'] : 'https://www.robocase.io/api/v1'
end

Public Instance Methods

check_metadata(metadata, filename) click to toggle source
# File lib/robocase_shipit/api.rb, line 65
def check_metadata(metadata, filename)
  s3_size = metadata['content_length']
  s3_md5 = metadata['etag']

  if s3_size && s3_md5
    size = File.size filename
    if size == s3_size
      puts "#{s3_size} matches #{size}".colorize(:green)
    else
      puts "ERROR: #{s3_size} did not match #{size}".colorize(:red)
      return false
    end

    md5 = Digest::MD5.file(filename).hexdigest
    if "\"#{md5}\"" == s3_md5
      puts "#{s3_md5} matches \"#{md5}\"".colorize(:green)
    else
      puts "ERROR: #{s3_md5} did not match \"#{md5}\"".colorize(:red)
      return false
    end
    true
  else
    puts "ERROR: uploaded file did not match!"
    false
  end
end
confirm_upload(uuid, filename) click to toggle source
# File lib/robocase_shipit/api.rb, line 59
def confirm_upload(uuid, filename)
  options = { uuid: uuid }
  response = RestClient.put(RobocaseShipit::API::robocase_url + "/items/version",  options, {"X-RoboCase-UUID" => @key, "X-RoboCase-Token" => @token})
  metadata = JSON.parse(response)
end
obtain_upload_url(filename) click to toggle source
# File lib/robocase_shipit/api.rb, line 40
def obtain_upload_url(filename)
  options = { filename: filename}
  begin
    response = RestClient.post(RobocaseShipit::API::robocase_url + "/items/version", options, {"X-Robocase-UUID" => @key, "X-RoboCase-Token" => @token})
  rescue Exception => e
    puts e.message.colorize(:red)
    response = nil
  end
end
upload(filename) click to toggle source
# File lib/robocase_shipit/api.rb, line 15
def upload(filename)
  if File.exists?(filename)
    response = self.obtain_upload_url(filename)
    return if response.nil?
    item_details = JSON.parse(response)

    puts "Uploading new version of #{item_details['item']}".colorize(:green)
    response = self.upload_version(item_details, filename)
    return if response.nil?

    puts "Confirming upload of #{item_details['item']}".colorize(:green)
    metadata = self.confirm_upload(item_details['uuid'], filename)
    return if metadata.nil?

    puts "Verifying metadata".colorize(:green)
    if self.check_metadata(metadata, filename)
      puts "Success".colorize(:green)
    else
      puts "ERROR!".colorize(:red)
    end
  else
    puts "ERROR: The file that you've specified does not exist".colorize(:red)
  end
end
upload_version(options, file) click to toggle source
# File lib/robocase_shipit/api.rb, line 50
def upload_version(options, file)
  begin
    response = RestClient.post options['url'], options['fields'].merge(file: File.new("./#{file}", 'rb')), {}
  rescue
    puts e.message.colorize(:red)
    response = nil
  end
end