class Slowlane::Fabric::Client
Attributes
access_token[RW]
agent[RW]
csrf_token[RW]
developer_token[RW]
host[RW]
login_data[RW]
password[RW]
team[RW]
team_id[RW]
username[RW]
Public Class Methods
new()
click to toggle source
# File lib/slowlane/fabric/client.rb, line 20 def initialize self.host = "fabric.io" end
Public Instance Methods
bootstrap()
click to toggle source
Handles login and CSRF tokens
# File lib/slowlane/fabric/client.rb, line 121 def bootstrap if (self.csrf_token.nil?) csrf! end # # First need developer token # if (self.developer_token.nil?) config! end # # Need to login too # if (self.access_token.nil?) login! end end
config!()
click to toggle source
# File lib/slowlane/fabric/client.rb, line 276 def config! page = get ('/api/v2/client_boot/config_data') config_object = JSON.parse(page.body) unless config_object['developer_token'].nil? self.developer_token = config_object['developer_token'] else raise Error #raise UnsuccessfulAuthenticationError end end
csrf!()
click to toggle source
# File lib/slowlane/fabric/client.rb, line 266 def csrf! page = get('/login') token = page.at('meta[name="csrf-token"]')[:content] unless token.nil? self.csrf_token = token end end
find_apps_by_bundle_id(bundle_id)
click to toggle source
# File lib/slowlane/fabric/client.rb, line 187 def find_apps_by_bundle_id(bundle_id) apps = list_apps() apps.select { |app| app['bundle_identifier'] == bundle_id } end
find_group_by_name(name)
click to toggle source
# File lib/slowlane/fabric/client.rb, line 172 def find_group_by_name(name) testers = list_testers() testers.each do |tester| groups=tester['groups'] groups.each do |group| #puts group['name'] if group['name'] == name return group end end end return nil end
find_tester_by_email(email)
click to toggle source
# File lib/slowlane/fabric/client.rb, line 192 def find_tester_by_email(email) testers = list_testers() testers.find { |tester| tester['email'] == email } end
get(uri, parameters = [], referer = nil, headers = {})
click to toggle source
# File lib/slowlane/fabric/client.rb, line 24 def get(uri, parameters = [], referer = nil, headers = {}) uri = ::File.join("https://#{self.host}", uri) unless /^https?/ === uri #puts "Requesting: #{uri}" unless (self.developer_token.nil?) headers['X-CRASHLYTICS-DEVELOPER-TOKEN'] = self.developer_token end unless (self.access_token.nil?) headers['X-CRASHLYTICS-ACCESS-TOKEN'] = self.access_token end unless (self.csrf_token.nil?) headers['X-CSRF-Token'] = self.csrf_token end headers['X-Requested-With'] = 'XMLHttpRequest' 3.times do agent.get(uri, parameters, referer, headers) return agent.page end #raise NetworkError raise Error end
list_apps()
click to toggle source
# File lib/slowlane/fabric/client.rb, line 142 def list_apps bootstrap page = get("/api/v2/organizations/#{self.team_id}/apps") apps = JSON.parse(page.body) return apps end
list_members()
click to toggle source
# File lib/slowlane/fabric/client.rb, line 162 def list_members bootstrap page = get("/api/v2/organizations/#{self.team_id}/team_members") members = JSON.parse(page.body) return members end
list_organizations()
click to toggle source
# File lib/slowlane/fabric/client.rb, line 152 def list_organizations bootstrap page = get("/api/v2/organizations") organizations = JSON.parse(page.body) return organizations end
list_tester_apps(tester_id)
click to toggle source
# File lib/slowlane/fabric/client.rb, line 224 def list_tester_apps(tester_id) bootstrap page = get("/api/v2/organizations/#{self.team_id}/beta_distribution/testers/#{tester_id}/apps") data = JSON.parse(page.body) return data['apps'] end
list_tester_devices(tester_id)
click to toggle source
# File lib/slowlane/fabric/client.rb, line 213 def list_tester_devices(tester_id) bootstrap page = get("/api/v2/organizations/#{self.team_id}/beta_distribution/testers/#{tester_id}/devices") data = JSON.parse(page.body) return data['devices'] end
list_tester_groups(tester_id)
click to toggle source
# File lib/slowlane/fabric/client.rb, line 256 def list_tester_groups(tester_id) bootstrap page = get("/api/v2/organizations/#{self.team_id}/beta_distribution/testers/#{tester_id}/groups") data = JSON.parse(page.body) return data['groups'] end
list_testers(app_id = nil)
click to toggle source
# File lib/slowlane/fabric/client.rb, line 198 def list_testers(app_id = nil) bootstrap if app_id.nil? app_id = self.list_apps.first['id'] end page = get("/api/v2/organizations/#{self.team_id}/apps/#{app_id}/beta_distribution/testers_in_organization?include_developers=true") testers = JSON.parse(page.body) return testers['testers'] end
login!()
click to toggle source
# File lib/slowlane/fabric/client.rb, line 289 def login! begin session = agent.post('https://fabric.io/api/v2/session', { "email" => self.username, "password" => self.password }, { 'X-CRASHLYTICS-DEVELOPER-TOKEN' => self.developer_token, 'X-CSRF-Token' => self.csrf_token, 'X-Requested-With' => 'XMLHttpRequest' } ) rescue Mechanize::ResponseCodeError => ex message = JSON.parse(ex.page.body) unless message['message'].nil? puts message['message'] end end self.login_data = JSON.parse(agent.page.body) unless self.login_data['token'].nil? self.access_token = self.login_data['token'] select_team! else raise Error #raise UnsuccessfulAuthenticationError end end
post(uri, parameters = [], referer = nil, headers = {})
click to toggle source
# File lib/slowlane/fabric/client.rb, line 54 def post(uri, parameters = [], referer = nil, headers = {}) uri = ::File.join("https://#{self.host}", uri) unless /^https?/ === uri #puts "Requesting: #{uri}" unless (self.developer_token.nil?) headers['X-CRASHLYTICS-DEVELOPER-TOKEN'] = self.developer_token end unless (self.access_token.nil?) headers['X-CRASHLYTICS-ACCESS-TOKEN'] = self.access_token end unless (self.csrf_token.nil?) headers['X-CSRF-Token'] = self.csrf_token end headers['X-Requested-With'] = 'XMLHttpRequest' headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8' # emails[]:patrick@smalltownheroes.be 3.times do agent.post(uri, parameters, headers) return agent.page end #raise NetworkError raise Error end
put(uri, parameters = [], referer = nil, headers = {})
click to toggle source
# File lib/slowlane/fabric/client.rb, line 86 def put(uri, parameters = [], referer = nil, headers = {}) uri = ::File.join("https://#{self.host}", uri) unless /^https?/ === uri #puts "Requesting: #{uri}" unless (self.developer_token.nil?) headers['X-CRASHLYTICS-DEVELOPER-TOKEN'] = self.developer_token end unless (self.access_token.nil?) headers['X-CRASHLYTICS-ACCESS-TOKEN'] = self.access_token end unless (self.csrf_token.nil?) headers['X-CSRF-Token'] = self.csrf_token end headers['X-Requested-With'] = 'XMLHttpRequest' headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8' 3.times do agent.put(uri, parameters, headers) return agent.page end #raise NetworkError raise Error end
select_team!()
click to toggle source
# File lib/slowlane/fabric/client.rb, line 314 def select_team! if self.login_data['organizations'].nil? raise Error # raise UnknownTeamError end teams = self.login_data['organizations'] teams.each do |team| if team['alias'] == self.team or team['name'] == self.team self.team_id = team['id'] break end end if self.team_id.nil? #raise UnknownTeamError raise Error end end
tester_invite(app_id,group_id,email)
click to toggle source
# File lib/slowlane/fabric/client.rb, line 246 def tester_invite(app_id,group_id,email) bootstrap input = URI.encode_www_form( "emails[]" => email) page = put("/api/v2/organizations/#{self.team_id}/apps/#{app_id}/beta_distribution/groups/#{group_id}/testers/invite", input) data = JSON.parse(page.body) require 'pp' pp data end
tester_resend_invitation(app_id,email)
click to toggle source
# File lib/slowlane/fabric/client.rb, line 234 def tester_resend_invitation(app_id,email) bootstrap page = post("/api/v2/organizations/#{self.team_id}/apps/#{app_id}/beta_distribution/resend_invitation", { "emails[]" => email }) data = JSON.parse(page.body) require 'pp' pp data end