class Fabricate::Fabricate

Attributes

api_key[R]
app_identifier[R]
developer_token[R]
filename[R]
verbose[RW]

Public Class Methods

new(options) click to toggle source
# File lib/fabricate.rb, line 14
def initialize(options)
  @app_identifier = options[:app_identifier]
  @api_key = options[:api_key]
  @filename = options[:filename]
end

Public Instance Methods

debug(message) click to toggle source
# File lib/fabricate.rb, line 63
def debug(message)
  STDERR.puts message if verbose
end
output(message) click to toggle source
# File lib/fabricate.rb, line 71
def output(message)
  puts message
end
print(message) click to toggle source
run!() click to toggle source
# File lib/fabricate.rb, line 20
def run!
  debug "Getting CSRF token..."
  response = Faraday.get "https://fabric.io/login"
  document = Oga.parse_html(response.body)
  csrf_token = document.at_css('meta[name="csrf-token"]')['content']
  raise "No CSRF token!" if csrf_token.nil?
  debug "CSRF token: #{csrf_token}"
  
  debug "Getting developer token..."
  response = Faraday.get "https://fabric.io/api/v2/client_boot/config_data" do |req|
    req.headers['X-CSRF-Token'] = csrf_token
  end
  developer_token = JSON.parse!(response.body)['developer_token']
  debug "Developer token: #{developer_token}"
  raise "No developer token!" if developer_token.nil?
  @developer_token = developer_token

  debug "Uploading file..."
  upload_file!
end
upload_file!() click to toggle source
# File lib/fabricate.rb, line 41
def upload_file!
  conn = Faraday.new do |conn|
    conn.request :multipart
    conn.request :url_encoded
    # Last middleware must be the adapter:
    conn.adapter :net_http
  end

  payload = Hash.new
  payload['code_mapping[file]'] = Faraday::UploadIO.new(filename, 'application/zip')
  payload['code_mapping[type]'] = 'dsym'
  payload['project[identifier]'] = app_identifier

  response = conn.post "https://cm.crashlytics.com/api/v3/platforms/ios/code_mappings", payload do |req|
    req.headers['X-CRASHLYTICS-API-KEY'] = api_key
    req.headers['X-CRASHLYTICS-DEVELOPER-TOKEN'] = developer_token
  end
  debug "Status: #{response.status}"
  debug response.body

end