class PactBroker::Client::BaseClient

Constants

ERROR_CODE_MAPPING

Attributes

base_url[R]
client_options[R]

Public Class Methods

new(options) click to toggle source
# File lib/pact_broker/client/base_client.rb, line 47
def initialize options
  @base_url = options[:base_url]
  @client_options = options[:client_options] || {}
  @verbose = @client_options[:verbose]
  self.class.base_uri base_url
  self.class.debug_output($stderr) if verbose?
  self.class.basic_auth(client_options[:basic_auth][:username], client_options[:basic_auth][:password]) if client_options[:basic_auth]
  self.class.headers('Authorization' => "Bearer #{client_options[:token]}") if client_options[:token]
  self.class.ssl_ca_file(ENV['SSL_CERT_FILE']) if ENV['SSL_CERT_FILE'] && ENV['SSL_CERT_FILE'] != ''
  self.class.ssl_ca_path(ENV['SSL_CERT_DIR']) if ENV['SSL_CERT_DIR'] && ENV['SSL_CERT_DIR'] != ''
  @default_options = {}
  @default_options[:verify] = false if (ENV['PACT_DISABLE_SSL_VERIFICATION'] == 'true' || ENV['PACT_BROKER_DISABLE_SSL_VERIFICATION'] == 'true')
end

Public Instance Methods

default_get_headers() click to toggle source
# File lib/pact_broker/client/base_client.rb, line 65
def default_get_headers
  default_request_headers
end
default_patch_headers() click to toggle source
# File lib/pact_broker/client/base_client.rb, line 69
def default_patch_headers
  default_request_headers.merge('Content-Type' => 'application/json')
end
default_put_headers() click to toggle source
# File lib/pact_broker/client/base_client.rb, line 73
def default_put_headers
  default_request_headers.merge('Content-Type' => 'application/json')
end
default_request_headers() click to toggle source
# File lib/pact_broker/client/base_client.rb, line 61
def default_request_headers
  {'Accept' => 'application/hal+json, application/json'}
end
get(url, options = {}) click to toggle source
# File lib/pact_broker/client/base_client.rb, line 114
def get url, options = {}, &block
  self.class.get(url, @default_options.merge(options), &block)
end
handle_response(response) { |response| ... } click to toggle source
# File lib/pact_broker/client/base_client.rb, line 77
def handle_response response
  if response.success?
    yield response
  elsif response.code == 404
    nil
  elsif ERROR_CODE_MAPPING.key?(response.code)
    message = ERROR_CODE_MAPPING.fetch(response.code)
    if response.body && response.body.size > 0
      message = message + ": #{response.body}"
    end
    raise Error.new(message)
  else
    error_message = nil
    begin
      errors = JSON.parse(response.body)['errors']
      error_message = if errors.is_a?(Array)
        errors.join("\n")
      elsif errors.is_a?(Hash)
        errors.collect{ |key, value| "#{key}: #{value}" }.join("\n")
      else
        response.body
      end
    rescue
      raise Error.new("status=#{response.code} #{response.body}")
    end
    raise Error.new(error_message)
  end
end
patch(url, options) click to toggle source
# File lib/pact_broker/client/base_client.rb, line 106
def patch url, options
  self.class.patch(url, @default_options.merge(options.merge(body: options[:body].to_json)))
end
put(url, options = {}) click to toggle source
# File lib/pact_broker/client/base_client.rb, line 110
def put url, options = {}, &block
  self.class.put(url, @default_options.merge(options), &block)
end
url_for_relation(relation_name, params) click to toggle source
# File lib/pact_broker/client/base_client.rb, line 118
def url_for_relation relation_name, params
  handle_response(get("/", headers: default_get_headers)) do | response |
    relation = (JSON.parse(response.body)['_links'] || {})[relation_name]
    if relation
      url = relation['href']
      params.each do | (key, value) |
        url = url.gsub("{#{key}}", encode_param(value))
      end
      url
    else
      raise PactBroker::Client::RelationNotFound.new("Could not find relation #{relation_name} in index resource. Try upgrading your Pact Broker as the feature you require may not exist in your version. If you are using PactFlow, you may not have the permissions required for this action.")
    end
  end
end
verbose?() click to toggle source
# File lib/pact_broker/client/base_client.rb, line 133
def verbose?
  @verbose
end