Class: Spaceship::Client
- Inherits:
-
Object
- Object
- Spaceship::Client
- Defined in:
- lib/spaceship/ui.rb,
lib/spaceship/portal/ui/select_team.rb,
lib/spaceship/client.rb
Direct Known Subclasses
Defined Under Namespace
Classes: InvalidUserCredentialsError, NoUserCredentialsError, UnexpectedResponse, UserInterface
Constant Summary collapse
- PROTOCOL_VERSION =
"QH65B2"
Instance Attribute Summary collapse
-
#client ⇒ Object
readonly
Returns the value of attribute client.
-
#cookie ⇒ Object
Returns the value of attribute cookie.
-
#logger ⇒ Object
The logger in which all requests are logged /tmp/spaceship.log by default.
-
#user ⇒ Object
The user that is currently logged in.
Automatic Paging collapse
-
#page_size ⇒ Object
The page size we want to request, defaults to 500.
-
#paging ⇒ Object
Handles the paging for you…
Login and Team Selection collapse
-
#login(user = nil, password = nil) ⇒ Spaceship::Client
Authenticates with Apple’s web services.
-
#session? ⇒ Bool
Do we have a valid session?.
- #with_retry(tries = 5, &block) ⇒ Object
Class Method Summary collapse
- .hostname ⇒ Object
-
.login(user = nil, password = nil) ⇒ Spaceship::Client
Authenticates with Apple’s web services.
Instance Method Summary collapse
-
#initialize ⇒ Client
constructor
A new instance of Client.
-
#UI ⇒ Object
Public getter for all UI related code rubocop:disable Style/MethodName.
Constructor Details
#initialize ⇒ Client
Returns a new instance of Client.
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/spaceship/client.rb', line 62 def initialize @client = Faraday.new(self.class.hostname) do |c| c.response :json, content_type: /\bjson$/ c.response :xml, content_type: /\bxml$/ c.response :plist, content_type: /\bplist$/ c.adapter Faraday.default_adapter if ENV['DEBUG'] # for debugging only # This enables tracking of networking requests using Charles Web Proxy c.response :logger c.proxy "https://127.0.0.1:8888" end end end |
Instance Attribute Details
#client ⇒ Object (readonly)
Returns the value of attribute client.
18 19 20 |
# File 'lib/spaceship/client.rb', line 18 def client @client end |
#cookie ⇒ Object
Returns the value of attribute cookie.
19 20 21 |
# File 'lib/spaceship/client.rb', line 19 def @cookie end |
#logger ⇒ Object
The logger in which all requests are logged /tmp/spaceship.log by default
26 27 28 |
# File 'lib/spaceship/client.rb', line 26 def logger @logger end |
#user ⇒ Object
The user that is currently logged in
22 23 24 |
# File 'lib/spaceship/client.rb', line 22 def user @user end |
Class Method Details
.hostname ⇒ Object
58 59 60 |
# File 'lib/spaceship/client.rb', line 58 def self.hostname raise "You must implemented self.hostname" end |
.login(user = nil, password = nil) ⇒ Spaceship::Client
Authenticates with Apple’s web services. This method has to be called once to generate a valid session. The session will automatically be used from then on.
This method will automatically use the username from the Appfile (if available) and fetch the password from the Keychain (if available)
49 50 51 52 53 54 55 56 |
# File 'lib/spaceship/client.rb', line 49 def self.login(user = nil, password = nil) instance = self.new if instance.login(user, password) instance else raise InvalidUserCredentialsError.new, "Invalid User Credentials" end end |
Instance Method Details
#login(user = nil, password = nil) ⇒ Spaceship::Client
Authenticates with Apple’s web services. This method has to be called once to generate a valid session. The session will automatically be used from then on.
This method will automatically use the username from the Appfile (if available) and fetch the password from the Keychain (if available)
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/spaceship/client.rb', line 141 def login(user = nil, password = nil) if user.to_s.empty? or password.to_s.empty? require 'credentials_manager' keychain_entry = CredentialsManager::AccountManager.new(user: user, password: password) user ||= keychain_entry.user password = keychain_entry.password end if user.to_s.strip.empty? or password.to_s.strip.empty? raise NoUserCredentialsError.new, "No login data provided" end self.user = user begin send_login_request(user, password) # different in subclasses rescue InvalidUserCredentialsError => ex raise ex unless keychain_entry if keychain_entry.invalid_credentials login(user) else puts "Please run this tool again to apply the new password" end end end |
#page_size ⇒ Object
The page size we want to request, defaults to 500
103 104 105 |
# File 'lib/spaceship/client.rb', line 103 def page_size @page_size ||= 500 end |
#paging ⇒ Object
Handles the paging for you… for free Just pass a block and use the parameter as page number
109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/spaceship/client.rb', line 109 def paging page = 0 results = [] loop do page += 1 current = yield(page) results += current break if (current || []).count < page_size # no more results end return results end |
#session? ⇒ Bool
Returns Do we have a valid session?.
170 171 172 |
# File 'lib/spaceship/client.rb', line 170 def session? !!@cookie end |
#UI ⇒ Object
Public getter for all UI related code rubocop:disable Style/MethodName
11 12 13 |
# File 'lib/spaceship/ui.rb', line 11 def UI UserInterface.new(self) end |
#with_retry(tries = 5, &block) ⇒ Object
174 175 176 177 178 179 180 181 182 183 |
# File 'lib/spaceship/client.rb', line 174 def with_retry(tries = 5, &block) return block.call rescue Faraday::Error::TimeoutError => ex # New Faraday version: Faraday::TimeoutError => ex unless (tries -= 1).zero? sleep 3 retry end raise ex # re-raise the exception end |