class Algo::Docker::Connection
Attributes
options[R]
url[R]
Public Class Methods
new(url, opts)
click to toggle source
Create a new Connection
. This method takes a url (String) and options (Hash). These are passed to Excon, so any options valid for ‘Excon.new` can be passed here.
# File lib/algo/docker/connection.rb, line 10 def initialize(url, opts) case when !url.is_a?(String) raise ArgumentError, "Expected a String, got: '#{url}'" when !opts.is_a?(Hash) raise ArgumentError, "Expected a Hash, got: '#{opts}'" else uri = URI.parse(url) if uri.scheme == "unix" @url, @options = 'unix:///', {:socket => uri.path}.merge(opts) elsif uri.scheme =~ /^(https?|tcp)$/ @url, @options = url, opts else @url, @options = "http://#{uri}", opts end end end
Public Instance Methods
request(*args, &block)
click to toggle source
Send a request to the server with the ‘
# File lib/algo/docker/connection.rb, line 36 def request(*args, &block) request = compile_request_params(*args, &block) # log_request(request) response = resource.request(request).body JSON.parse(response) unless response.blank? rescue Excon::Errors::BadRequest => ex raise ClientError, ex.response.body rescue Excon::Errors::Unauthorized => ex raise UnauthorizedError, ex.response.body rescue Excon::Errors::NotFound => ex raise NotFoundError, ex.response.body rescue Excon::Errors::Conflict => ex raise ConflictError, ex.response.body rescue Excon::Errors::InternalServerError => ex raise ServerError, ex.response.body rescue Excon::Errors::Timeout => ex raise TimeoutError, ex.message end
to_s()
click to toggle source
# File lib/algo/docker/connection.rb, line 68 def to_s "Docker::Connection { :url => #{url}, :options => #{options} }" end
Private Instance Methods
compile_request_params(http_method, path, query = nil, opts = nil, &block)
click to toggle source
Given an HTTP method, path, optional query, extra options, and block, compiles a request.
# File lib/algo/docker/connection.rb, line 75 def compile_request_params(http_method, path, query = nil, opts = nil, &block) query ||= {} opts ||= {} headers = opts.delete(:headers) || {} content_type = opts[:body].nil? ? 'text/plain' : 'application/json' user_agent = "github.com:yoshiso/algo v#{Algo::VERSION}" { :method => http_method, :path => "/v#{Docker::API_VERSION}#{path}", :query => query, :headers => { 'Content-Type' => content_type, 'User-Agent' => user_agent, }.merge(headers), :expects => (200..204).to_a << 304, :idempotent => http_method == :get, :request_block => block }.merge(opts).reject { |_, v| v.nil? } end
resource()
click to toggle source
The actual client that sends HTTP methods to the Docker
server. This value is not cached, since doing so may cause socket errors after bad requests.
# File lib/algo/docker/connection.rb, line 30 def resource Excon.new(url, options) end