class Pebbles::API
Constants
- HEADERS
- OPTIONS
Public Class Methods
new(options={})
click to toggle source
# File lib/pebbles/api.rb, line 35 def initialize(options={}) options = OPTIONS.merge(options) options[:headers] = HEADERS.merge(options[:headers]) @api_key = options.delete(:api_key) || ENV['PEBBLES_API_KEY'] if !@api_key && options.has_key?(:username) && options.has_key?(:password) username = options.delete(:username) password = options.delete(:password) @connection = Excon.new("#{options[:scheme]}://#{options[:host]}", options) @api_key = self.post_login(username, password).body["api_key"] end @connection = Excon.new("#{options[:scheme]}://#{options[:host]}", options) end
Public Instance Methods
delete_app(app)
click to toggle source
DELETE /apps/:app
# File lib/pebbles/api/apps.rb, line 5 def delete_app(app) request( :expects => 200, :method => :delete, :path => "/apps/#{app}" ) end
delete_config_var(app, key)
click to toggle source
DELETE /apps/:app/config_vars/:key
# File lib/pebbles/api/config_vars.rb, line 5 def delete_config_var(app, key) request( :expects => 200, :method => :delete, :path => "/apps/#{app}/config_vars/#{escape(key)}" ) end
get_app(app)
click to toggle source
GET /apps/:app
# File lib/pebbles/api/apps.rb, line 23 def get_app(app) request( :expects => 200, :method => :get, :path => "/apps/#{app}" ) end
get_app_maintenance(app)
click to toggle source
GET /apps/:app/server/maintenance
# File lib/pebbles/api/apps.rb, line 32 def get_app_maintenance(app) request( :expects => 200, :method => :get, :path => "/apps/#{app}/server/maintenance" ) end
get_apps()
click to toggle source
GET /apps
# File lib/pebbles/api/apps.rb, line 14 def get_apps request( :expects => 200, :method => :get, :path => "/apps" ) end
get_config_vars(app)
click to toggle source
GET /apps/:app/config_vars
# File lib/pebbles/api/config_vars.rb, line 14 def get_config_vars(app) request( :expects => 200, :method => :get, :path => "/apps/#{app}/config_vars" ) end
get_release(app, release)
click to toggle source
GET /apps/:app/releases/:release
# File lib/pebbles/api/releases.rb, line 14 def get_release(app, release) request( :expects => 200, :method => :get, :path => "/apps/#{app}/releases/#{release}" ) end
get_releases(app)
click to toggle source
GET /apps/:app/releases
# File lib/pebbles/api/releases.rb, line 5 def get_releases(app) request( :expects => 200, :method => :get, :path => "/apps/#{app}/releases" ) end
get_user()
click to toggle source
GET /user
# File lib/pebbles/api/user.rb, line 5 def get_user request( :expects => 200, :method => :get, :path => "/user" ) end
post_app(params={})
click to toggle source
POST /apps
# File lib/pebbles/api/apps.rb, line 41 def post_app(params={}) request( :expects => 201, :method => :post, :path => '/apps', :query => app_params(params) ) end
post_app_maintenance(app, maintenance_mode)
click to toggle source
POST /apps/:app/server/maintenance
# File lib/pebbles/api/apps.rb, line 51 def post_app_maintenance(app, maintenance_mode) request( :expects => 200, :method => :post, :path => "/apps/#{app}/server/maintenance", :query => {'maintenance_mode' => maintenance_mode} ) end
post_login(username, password)
click to toggle source
# File lib/pebbles/api/login.rb, line 4 def post_login(username, password) request( :expects => 200, :method => :post, :path => '/login', :query => { 'username' => username, 'password' => password } ) end
post_release(app, release=nil)
click to toggle source
POST /apps/:app/releases/:release
# File lib/pebbles/api/releases.rb, line 23 def post_release(app, release=nil) request( :expects => 200, :method => :post, :path => "/apps/#{app}/releases", :query => {'rollback' => release} ) end
put_app(app, params)
click to toggle source
PUT /apps/:app
# File lib/pebbles/api/apps.rb, line 61 def put_app(app, params) request( :expects => 200, :method => :put, :path => "/apps/#{app}", :query => app_params(params) ) end
put_config_vars(app, vars)
click to toggle source
PUT /apps/:app/config_vars
# File lib/pebbles/api/config_vars.rb, line 23 def put_config_vars(app, vars) request( :body => MultiJson.dump(vars), :expects => 200, :method => :put, :path => "/apps/#{app}/config_vars" ) end
request(params, &block)
click to toggle source
# File lib/pebbles/api.rb, line 50 def request(params, &block) if @api_key params[:query] = { 'api_key' => @api_key, }.merge(params[:query] || {}) end begin response = @connection.request(params, &block) rescue Excon::Errors::HTTPStatusError => error klass = case error.response.status when 401 then Pebbles::API::Errors::Unauthorized when 402 then Pebbles::API::Errors::VerificationRequired when 403 then Pebbles::API::Errors::Forbidden when 404 if error.request[:path].match /\/apps\/\/.*/ Pebbles::API::Errors::NilApp else Pebbles::API::Errors::NotFound end when 408 then Pebbles::API::Errors::Timeout when 422 then Pebbles::API::Errors::RequestFailed when 423 then Pebbles::API::Errors::Locked when 429 then Pebbles::API::Errors::RateLimitExceeded when /50./ then Pebbles::API::Errors::RequestFailed else Pebbles::API::Errors::ErrorWithResponse end decompress_response!(error.response) reerror = klass.new(error.message, error.response) reerror.set_backtrace(error.backtrace) raise(reerror) end if response.body && !response.body.empty? decompress_response!(response) begin response.body = MultiJson.load(response.body) rescue # leave non-JSON body as is end end # reset (non-persistent) connection @connection.reset if response.headers.has_key?('X-Pebbles-Warning') Pebbles::Command.warnings.concat(response.headers['X-Pebbles-Warning'].split("\n")) end response end
Private Instance Methods
app_params(params)
click to toggle source
# File lib/pebbles/api.rb, line 110 def app_params(params) app_params = {} params.each do |key, value| app_params["app[#{key}]"] = value end app_params end
decompress_response!(response)
click to toggle source
# File lib/pebbles/api.rb, line 105 def decompress_response!(response) return unless response.headers['Content-Encoding'] == 'gzip' response.body = Zlib::GzipReader.new(StringIO.new(response.body)).read end
escape(string)
click to toggle source
# File lib/pebbles/api.rb, line 118 def escape(string) CGI.escape(string).gsub('.', '%2E') end