class Marathon::Connection
This class represents a Marathon
API Connection
.
Attributes
Public Class Methods
Create a new API connection. url
: URL of the marathon API. options
: Hash with options for marathon API.
# File lib/marathon/connection.rb, line 21 def initialize(url, options = {}) @url = url @options = options if @options[:username] and @options[:password] @options[:basic_auth] = { :username => @options[:username], :password => @options[:password] } @options.delete(:username) @options.delete(:password) end # The insecure option allows ignoring bad (or self-signed) SSL # certificates. if @options[:insecure] @options[:verify] = false @options.delete(:insecure) end end
Public Instance Methods
# File lib/marathon/connection.rb, line 46 def to_s "Marathon::Connection { :url => #{url} :options => #{options} }" end
Private Instance Methods
Create full URL with query parameters. request
: hash containing :url and optional :query
# File lib/marathon/connection.rb, line 79 def build_url(request) url = URI.escape(request[:url]) if request[:query].size > 0 url += '?' + query_params(request[:query]) end url end
Create request object. http_method
: GET/POST/PUT/DELETE. path
: Relative path to connection's URL. query
: Optional query parameters. opts
: Optional options. Ex. opts is used for PUT/POST request.
# File lib/marathon/connection.rb, line 65 def compile_request_params(http_method, path, query = nil, opts = nil) query ||= {} opts ||= {} headers = opts.delete(:headers) || {} opts[:body] = opts[:body].to_json unless opts[:body].nil? { :method => http_method, :url => "#{@url}#{path}", :query => query }.merge(@options).merge(opts).reject { |_, v| v.nil? } end
Parse response or raise error. response
: response from HTTParty call.
# File lib/marathon/connection.rb, line 89 def parse_response(response) if response.success? begin response.parsed_response rescue => err raise Marathon::Error.from_response(response) end else raise Marathon::Error.from_response(response) end end
Create URL suffix for a hash of query parameters. URL escaping is done internally. query
: Hash of query parameters.
# File lib/marathon/connection.rb, line 55 def query_params(query) query = query.select { |k, v| !v.nil? } URI.escape(query.map { |k, v| "#{k}=#{v}" }.join('&')) end
Send a request to the server and parse response. http_method
: GET/POST/PUT/DELETE. path
: Relative path to connection's URL. query
: Optional query parameters. opts
: Optional options. Ex. opts is used for PUT/POST request.
# File lib/marathon/connection.rb, line 106 def request(*args) request = compile_request_params(*args) url = build_url(request) parse_response(self.class.send(request[:method], url, request)) rescue => e if e.class == SocketError or e.class.name.start_with?('Errno::') raise IOError, "HTTP call failed: #{e.message}" else raise e end end