class PencilcaseTeamsShipit::API

Public Class Methods

new(key, token) click to toggle source
# File lib/pencilcase_teams_shipit/api.rb, line 11
def initialize(key, token)
  @key = key
  @token = token
end
pencilcase_url() click to toggle source
# File lib/pencilcase_teams_shipit/api.rb, line 7
def self.pencilcase_url
  ENV['PENCILCASE_URL'] ? ENV['PENCILCASE_URL'] : 'https://teams.pencilcase.io/api/v1'
end

Public Instance Methods

check_metadata(metadata, filename) click to toggle source
# File lib/pencilcase_teams_shipit/api.rb, line 73
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(title, bundle_id, uuid, filename) click to toggle source
# File lib/pencilcase_teams_shipit/api.rb, line 63
def confirm_upload(title, bundle_id, uuid, filename)
  options = {
    title: title,
    bundle_id: bundle_id,
    uuid: uuid
  }
  response = RestClient.put(PencilcaseTeamsShipit::API::pencilcase_url + "/shipit",  options, {"X-PencilCase-UUID" => @key, "X-PencilCase-Token" => @token})
  metadata = JSON.parse(response)
end
obtain_upload_url(filename) click to toggle source
# File lib/pencilcase_teams_shipit/api.rb, line 44
def obtain_upload_url(filename)
  options = { filename: filename}
  begin
    response = RestClient.post(PencilcaseTeamsShipit::API::pencilcase_url + "/shipit", options, {"X-Pencilcase-UUID" => @key, "X-PencilCase-Token" => @token})
  rescue Exception => e
    puts e.message.colorize(:red)
    response = nil
  end
end
upload(title, bundle_id, filename) click to toggle source
# File lib/pencilcase_teams_shipit/api.rb, line 16
def upload(title, bundle_id, 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 #{bundle_id}".colorize(:green)
    response = self.upload_version(item_details, filename)
    return false if response.nil?

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

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