Class: Fastlane::Saucectl::Api
- Inherits:
-
Object
- Object
- Fastlane::Saucectl::Api
- Defined in:
- lib/fastlane/plugin/saucectl/helper/api.rb
Overview
This class provides the functions required to interact with the saucectl api for more information see: docs.saucelabs.com/dev/api/storage/
Constant Summary collapse
- UI =
FastlaneCore::UI
Instance Method Summary collapse
- #available_devices ⇒ Object
- #base_url(region) ⇒ Object
- #base_url_for_region ⇒ Object
- #build_http_request_for(path) ⇒ Object
- #delete_app(path) ⇒ Object
- #fetch_android_devices ⇒ Object
- #fetch_ios_devices ⇒ Object
-
#initialize(config) ⇒ Api
constructor
A new instance of Api.
- #retrieve_all_apps ⇒ Object
- #upload ⇒ Object
Constructor Details
#initialize(config) ⇒ Api
Returns a new instance of Api.
21 22 23 24 25 |
# File 'lib/fastlane/plugin/saucectl/helper/api.rb', line 21 def initialize(config) @config = config @encoded_auth_string = Base64.strict_encode64("#{@config[:sauce_username]}:#{@config[:sauce_access_key]}") @messages = YAML.load_file("#{__dir__}/../strings/messages.yml") end |
Instance Method Details
#available_devices ⇒ Object
27 28 29 30 31 32 33 34 35 36 |
# File 'lib/fastlane/plugin/saucectl/helper/api.rb', line 27 def available_devices path = 'v1/rdc/devices/available' https, url = build_http_request_for(path) request = Net::HTTP::Get.new(url) request['Authorization'] = "Basic #{@encoded_auth_string}" response = https.request(request) UI.user_error!("❌ Request failed: #{response.code} #{response.}") unless response.kind_of?(Net::HTTPOK) JSON.parse(response.body) end |
#base_url(region) ⇒ Object
110 111 112 |
# File 'lib/fastlane/plugin/saucectl/helper/api.rb', line 110 def base_url(region) "https://api.#{region}.saucelabs.com" end |
#base_url_for_region ⇒ Object
95 96 97 98 99 100 101 |
# File 'lib/fastlane/plugin/saucectl/helper/api.rb', line 95 def base_url_for_region case @config[:region] when 'eu' then base_url('eu-central-1') when 'us' then base_url('us-west-1') else UI.user_error!("#{@config[:region]} is an invalid region ❌. Available: #{@messages['supported_regions']}") end end |
#build_http_request_for(path) ⇒ Object
103 104 105 106 107 108 |
# File 'lib/fastlane/plugin/saucectl/helper/api.rb', line 103 def build_http_request_for(path) url = URI("#{base_url_for_region}/#{path}") https = Net::HTTP.new(url.host, url.port) https.use_ssl = true [https, url] end |
#delete_app(path) ⇒ Object
84 85 86 87 88 89 90 91 92 93 |
# File 'lib/fastlane/plugin/saucectl/helper/api.rb', line 84 def delete_app(path) https, url = build_http_request_for(path) request = Net::HTTP::Delete.new(url.path) request['Authorization'] = "Basic #{@encoded_auth_string}" response = https.request(request) UI.success("✅ Successfully deleted app from sauce labs storage: \n #{response.body}") if response.kind_of?(Net::HTTPOK) UI.user_error!("❌ Request failed: #{response.code} #{response.}") unless response.kind_of?(Net::HTTPOK) response end |
#fetch_android_devices ⇒ Object
47 48 49 50 51 52 53 54 |
# File 'lib/fastlane/plugin/saucectl/helper/api.rb', line 47 def fetch_android_devices devices = [] get_devices = available_devices get_devices.each do |device| devices << device unless device =~ /iPhone_.*/ || device =~ /iPad_.*/ end devices end |
#fetch_ios_devices ⇒ Object
38 39 40 41 42 43 44 45 |
# File 'lib/fastlane/plugin/saucectl/helper/api.rb', line 38 def fetch_ios_devices devices = [] get_devices = available_devices get_devices.each do |device| devices << device if device =~ /iPhone_.*/ || device =~ /iPad_.*/ end devices end |
#retrieve_all_apps ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/fastlane/plugin/saucectl/helper/api.rb', line 56 def retrieve_all_apps UI.("retrieving all apps for \"#{@config[:query]}\".") path = "v1/storage/files?q=#{@config[:query]}&kind=#{@config[:platform]}" https, url = build_http_request_for(path) request = Net::HTTP::Get.new(url) request['Authorization'] = "Basic #{@encoded_auth_string}" response = https.request(request) UI.user_error!("❌ Request failed: #{response.code} #{response.}") unless response.kind_of?(Net::HTTPOK) response end |
#upload ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/fastlane/plugin/saucectl/helper/api.rb', line 69 def upload UI.("⏳ Uploading \"#{@config[:app]}\" upload to Sauce Labs.") path = 'v1/storage/upload' https, url = build_http_request_for(path) request = Net::HTTP::Post.new(url) request['Authorization'] = "Basic #{@encoded_auth_string}" form_data = [['payload', File.open(@config[:file])], ['name', @config[:app]]] request.set_form(form_data, 'multipart/form-data') response = https.request(request) UI.success("✅ Successfully uploaded app to sauce labs: \n #{response.body}") if response.code.eql?('201') UI.user_error!("❌ Request failed: #{response.code} #{response.}") unless response.code.eql?('201') response end |