Class: EY::API
Direct Known Subclasses
Defined Under Namespace
Classes: InvalidCredentials, RequestFailed, ResourceNotFound
Constant Summary collapse
- USER_AGENT_STRING =
"EngineYardCLI/#{VERSION}"
Instance Attribute Summary collapse
-
#token ⇒ Object
readonly
Returns the value of attribute token.
Class Method Summary collapse
Instance Method Summary collapse
- #==(other) ⇒ Object
- #apps ⇒ Object
- #apps_for_repo(repo) ⇒ Object
- #environments ⇒ Object
-
#initialize(token = nil) ⇒ API
constructor
A new instance of API.
- #request(url, opts = {}) ⇒ Object
- #resolver ⇒ Object
- #user ⇒ Object
Constructor Details
Instance Attribute Details
#token ⇒ Object (readonly)
Returns the value of attribute token.
10 11 12 |
# File 'lib/engineyard/api.rb', line 10 def token @token end |
Class Method Details
.fetch_token(email, password) ⇒ Object
109 110 111 112 113 114 |
# File 'lib/engineyard/api.rb', line 109 def self.fetch_token(email, password) api_token = request("/authenticate", :method => "post", :params => { :email => email, :password => password })["api_token"] EY::EYRC.load.api_token = api_token api_token end |
.request(path, opts = {}) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/engineyard/api.rb', line 57 def self.request(path, opts={}) require 'rest_client' require 'engineyard/rest_client_ext' require 'json' url = EY.config.endpoint + "api/v2#{path}" method = (opts.delete(:method) || 'get').to_s.downcase.to_sym params = opts.delete(:params) || {} headers = opts.delete(:headers) || {} headers["Accept"] ||= "application/json" headers["User-Agent"] = USER_AGENT_STRING begin EY.ui.debug("Request", "#{method.to_s.upcase} #{url}") case method when :get, :delete, :head url.query = RestClient::Payload::UrlEncoded.new(params).to_s resp = RestClient.send(method, url.to_s, headers) else resp = RestClient.send(method, url.to_s, params, headers) end rescue RestClient::Unauthorized raise InvalidCredentials rescue Errno::ECONNREFUSED raise RequestFailed, "Could not reach the cloud API" rescue RestClient::ResourceNotFound raise ResourceNotFound, "The requested resource could not be found" rescue RestClient::BadGateway raise RequestFailed, "EY Cloud API is temporarily unavailable. Please try again soon." rescue RestClient::RequestFailed => e raise RequestFailed, "#{e.} #{e.response}" rescue OpenSSL::SSL::SSLError raise RequestFailed, "SSL is misconfigured on your cloud" end if resp.body.empty? data = '' elsif resp.headers[:content_type] =~ /application\/json/ begin data = JSON.parse(resp.body) EY.ui.debug("Response", data) rescue JSON::ParserError EY.ui.debug("Raw response", resp.body) raise RequestFailed, "Response was not valid JSON." end else data = resp.body end data end |
Instance Method Details
#==(other) ⇒ Object
20 21 22 23 |
# File 'lib/engineyard/api.rb', line 20 def ==(other) raise ArgumentError unless other.is_a?(self.class) self.token == other.token end |
#apps ⇒ Object
36 37 38 |
# File 'lib/engineyard/api.rb', line 36 def apps @apps ||= EY::Model::App.from_array(request('/apps')["apps"], :api => self) end |
#apps_for_repo(repo) ⇒ Object
44 45 46 47 |
# File 'lib/engineyard/api.rb', line 44 def apps_for_repo(repo) repo.fail_on_no_remotes! apps.find_all {|a| repo.has_remote?(a.repository_uri) } end |
#environments ⇒ Object
32 33 34 |
# File 'lib/engineyard/api.rb', line 32 def environments @environments ||= EY::Model::Environment.from_array(request('/environments')["environments"], :api => self) end |
#request(url, opts = {}) ⇒ Object
25 26 27 28 29 30 |
# File 'lib/engineyard/api.rb', line 25 def request(url, opts={}) opts[:headers] ||= {} opts[:headers]["X-EY-Cloud-Token"] = token EY.ui.debug("Token", token) self.class.request(url, opts) end |