class CircleCi::Request

Request class to handle HTTP API interactions

Constants

DEFAULT_HEADERS
DEFAULT_OPTIONS

Public Class Methods

new(config, path, params = {}) click to toggle source
# File lib/circleci/request.rb, line 23
def initialize(config, path, params = {})
  @config = config
  @uri = build_uri(path, params)
  @net = net_http
  setup_http(@net)
end

Public Instance Methods

delete() click to toggle source
# File lib/circleci/request.rb, line 38
def delete
  execute :delete
end
get() click to toggle source
# File lib/circleci/request.rb, line 30
def get
  execute :get
end
post(body = {}) click to toggle source
# File lib/circleci/request.rb, line 34
def post(body = {})
  execute :post, body
end

Private Instance Methods

build_uri(path, params = {}) click to toggle source
# File lib/circleci/request.rb, line 64
def build_uri(path, params = {})
  uri = @config.uri
  uri.path += path
  params['circle-token'] = @config.token
  uri.query = URI.encode_www_form(params)
  uri
end
connection(verb, body = {}) click to toggle source
# File lib/circleci/request.rb, line 50
def connection(verb, body = {})
  req = Net::HTTP.const_get(verb.to_s.capitalize, false).new(@uri, DEFAULT_HEADERS)
  req.body = JSON.dump(body) unless verb == :get
  req
end
execute(verb, body = {}) click to toggle source
# File lib/circleci/request.rb, line 44
def execute(verb, body = {})
  http = connection(verb, body)
  setup_http(http)
  transmit http
end
net_http() click to toggle source
# File lib/circleci/request.rb, line 72
def net_http
  proxy_uri = @config.proxy_uri
  if @config.proxy && proxy_uri
    Net::HTTP.new(@uri.hostname, @uri.port,
                  proxy_uri.host, proxy_uri.port, proxy_uri.user, proxy_uri.password)
  else
    Net::HTTP.new(@uri.hostname, @uri.port, nil, nil, nil, nil)
  end
end
setup_http(http) click to toggle source
# File lib/circleci/request.rb, line 56
def setup_http(http)
  options = DEFAULT_OPTIONS.merge(@config.request_overrides)
  options.each do |option, value|
    setter = "#{option.to_sym}="
    http.send(setter, value) if http.respond_to?(setter)
  end
end
transmit(req) click to toggle source
# File lib/circleci/request.rb, line 82
def transmit(req)
  response = nil
  @net.start do |http|
    response = http.request(req, nil, &:read_body)
  end
  Response.new response
end