class PactBroker::Client::Hal::HttpClient
Constants
- RETRYABLE_ERRORS
Attributes
password[RW]
token[RW]
username[RW]
verbose[RW]
Public Class Methods
new(options)
click to toggle source
# File lib/pact_broker/client/hal/http_client.rb, line 14 def initialize options @username = options[:username] @password = options[:password] @verbose = options[:verbose] @token = options[:token] end
Public Instance Methods
build_nested_query(value, prefix = nil)
click to toggle source
From Rack lib/rack/utils.rb
# File lib/pact_broker/client/hal/http_client.rb, line 154 def build_nested_query(value, prefix = nil) case value when Array value.map { |v| build_nested_query(v, "#{prefix}[]") }.join("&") when Hash value.map { |k, v| build_nested_query(v, prefix ? "#{prefix}[#{escape(k)}]" : escape(k)) }.delete_if(&:empty?).join('&') when nil prefix else raise ArgumentError, "value must be a Hash" if prefix.nil? "#{prefix}=#{escape(value)}" end end
create_request(uri, http_method, body = nil, headers = {})
click to toggle source
# File lib/pact_broker/client/hal/http_client.rb, line 48 def create_request uri, http_method, body = nil, headers = {} request = Net::HTTP.const_get(http_method).new(uri.request_uri) request['Content-Type'] ||= "application/json" if ['Post', 'Put'].include?(http_method) request['Content-Type'] ||= "application/merge-patch+json" if ['Patch'].include?(http_method) request['Accept'] = "application/hal+json" request['Accept-Encoding'] = nil if verbose? headers.each do | key, value | request[key] = value end request.body = body if body request.basic_auth username, password if username request['Authorization'] = "Bearer #{token}" if token request end
default_max_tries()
click to toggle source
# File lib/pact_broker/client/hal/http_client.rb, line 120 def default_max_tries 5 end
delete(href, body = nil, headers = {})
click to toggle source
# File lib/pact_broker/client/hal/http_client.rb, line 43 def delete href, body = nil, headers = {} uri = URI(href) perform_request(create_request(uri, 'Delete', body, headers), uri) end
disable_ssl_verification?()
click to toggle source
# File lib/pact_broker/client/hal/http_client.rb, line 149 def disable_ssl_verification? ENV['PACT_DISABLE_SSL_VERIFICATION'] == 'true' || ENV['PACT_BROKER_DISABLE_SSL_VERIFICATION'] == 'true' end
escape(s)
click to toggle source
# File lib/pact_broker/client/hal/http_client.rb, line 172 def escape(s) URI.encode_www_form_component(s) end
get(href, params = {})
click to toggle source
# File lib/pact_broker/client/hal/http_client.rb, line 21 def get href, params = {}, headers = {} query = build_nested_query(params) uri = URI(href) uri.query = query perform_request(create_request(uri, 'Get', nil, headers), uri) end
output_stream()
click to toggle source
# File lib/pact_broker/client/hal/http_client.rb, line 128 def output_stream AuthorizationHeaderRedactor.new($stdout) end
patch(href, body = nil, headers = {})
click to toggle source
# File lib/pact_broker/client/hal/http_client.rb, line 38 def patch href, body = nil, headers = {} uri = URI(href) perform_request(create_request(uri, 'Patch', body, headers), uri) end
perform_request(request, uri)
click to toggle source
# File lib/pact_broker/client/hal/http_client.rb, line 64 def perform_request request, uri response = until_truthy_or_max_times(condition: ->(resp) { resp.code.to_i < 500 }) do http = Net::HTTP.new(uri.host, uri.port, :ENV) http.set_debug_output(output_stream) if verbose? http.use_ssl = (uri.scheme == 'https') # Need to manually set the ca_file and ca_path for the pact-ruby-standalone. # The env vars seem to be picked up automatically in later Ruby versions. # See https://github.com/pact-foundation/pact-ruby-standalone/issues/57 http.ca_file = ENV['SSL_CERT_FILE'] if ENV['SSL_CERT_FILE'] && ENV['SSL_CERT_FILE'] != '' http.ca_path = ENV['SSL_CERT_DIR'] if ENV['SSL_CERT_DIR'] && ENV['SSL_CERT_DIR'] != '' if x509_certificate? http.cert = OpenSSL::X509::Certificate.new(x509_client_cert_file) http.key = OpenSSL::PKey::RSA.new(x509_client_key_file) end if disable_ssl_verification? if verbose? $stdout.puts("SSL verification is disabled") end http.verify_mode = OpenSSL::SSL::VERIFY_NONE end http.start do |http| http.request request end end Response.new(response) end
post(href, body = nil, headers = {})
click to toggle source
# File lib/pact_broker/client/hal/http_client.rb, line 33 def post href, body = nil, headers = {} uri = URI(href) perform_request(create_request(uri, 'Post', body, headers), uri) end
put(href, body = nil, headers = {})
click to toggle source
# File lib/pact_broker/client/hal/http_client.rb, line 28 def put href, body = nil, headers = {} uri = URI(href) perform_request(create_request(uri, 'Put', body, headers), uri) end
sleep(seconds)
click to toggle source
# File lib/pact_broker/client/hal/http_client.rb, line 124 def sleep seconds Kernel.sleep seconds end
until_truthy_or_max_times(options = {}) { || ... }
click to toggle source
# File lib/pact_broker/client/hal/http_client.rb, line 93 def until_truthy_or_max_times options = {} max_tries = options.fetch(:times, default_max_tries) tries = 0 sleep_interval = options.fetch(:sleep, 5) sleep(sleep_interval) if options[:sleep_first] while true begin result = yield return result if max_tries < 2 if options[:condition] condition_result = options[:condition].call(result) return result if condition_result else return result if result end tries += 1 return result if max_tries == tries sleep sleep_interval rescue *RETRYABLE_ERRORS => e tries += 1 $stderr.puts "ERROR: Error making request - #{e.class} #{e.message} #{e.backtrace.find{|l| l.include?('pact_broker-client')}}, attempt #{tries} of #{max_tries}" raise e if max_tries == tries sleep sleep_interval end end end
verbose?()
click to toggle source
# File lib/pact_broker/client/hal/http_client.rb, line 132 def verbose? verbose || ENV["VERBOSE"] == "true" end
x509_certificate?()
click to toggle source
# File lib/pact_broker/client/hal/http_client.rb, line 136 def x509_certificate? ENV['X509_CLIENT_CERT_FILE'] && ENV['X509_CLIENT_CERT_FILE'] != '' && ENV['X509_CLIENT_KEY_FILE'] && ENV['X509_CLIENT_KEY_FILE'] != '' end
x509_client_cert_file()
click to toggle source
# File lib/pact_broker/client/hal/http_client.rb, line 141 def x509_client_cert_file File.read(ENV['X509_CLIENT_CERT_FILE']) end
x509_client_key_file()
click to toggle source
# File lib/pact_broker/client/hal/http_client.rb, line 145 def x509_client_key_file File.read(ENV['X509_CLIENT_KEY_FILE']) end