class Pact::ProviderVerifier::SetUpProviderState
Attributes
Public Class Methods
Source
# File lib/pact/provider_verifier/set_up_provider_state.rb, line 18 def self.call provider_state, consumer, options new(provider_state, consumer, options).call end
Source
# File lib/pact/provider_verifier/set_up_provider_state.rb, line 11 def initialize provider_state, consumer, options @provider_state = provider_state @consumer = consumer @options = options @params = (options && options[:params]) || {} end
Public Instance Methods
Source
# File lib/pact/provider_verifier/set_up_provider_state.rb, line 22 def call if provider_states_setup_url.nil? warn_if_provider_state_set return end log_request response = post_to_provider_state check_for_error response begin JSON.parse(response.body) rescue {} end end
Private Instance Methods
Source
# File lib/pact/provider_verifier/set_up_provider_state.rb, line 93 def add_custom_provider_header request custom_provider_headers.each do | header_name, header_value | request[header_name] = header_value end end
Source
# File lib/pact/provider_verifier/set_up_provider_state.rb, line 99 def check_for_error response if response.status >= 300 && !(@options[:enable_pending] == true) raise SetUpProviderStateError.new(set_up_provider_state_error_message(response)) end end
Source
# File lib/pact/provider_verifier/set_up_provider_state.rb, line 86 def custom_provider_headers ENV.fetch('CUSTOM_PROVIDER_HEADER', '').split("\n").each_with_object({}) do | header, headers_hash | header_name, header_value = header.split(":", 2).collect(&:strip) headers_hash[header_name] = header_value end end
Source
# File lib/pact/provider_verifier/set_up_provider_state.rb, line 109 def log_request if verbose? $stdout.puts "DEBUG: Setting up provider state '#{provider_state}' for consumer '#{consumer}' using provider state set up URL #{provider_states_setup_url}" end end
Source
# File lib/pact/provider_verifier/set_up_provider_state.rb, line 42 def post_to_provider_state verbose = verbose? options = {url: provider_states_setup_url} if provider_states_setup_url.start_with?("https:") options[:ssl] = {verify: false} end connection = Faraday.new(options) do | faraday | # Have encountered flakiness on windows build for pact-go # Using retries as a hacky solution to try and get around this # until/if we can work out what the underlying cause is. # https://github.com/pact-foundation/pact-go/issues/42 # eg. https://ci.appveyor.com/project/mefellows/pact-go/build/25#L1202 faraday.request :retry, max: 2, interval: 0.05, interval_randomness: 0.5, backoff_factor: 2, methods:[:post], exceptions: [Faraday::ConnectionFailed] faraday.response :logger if verbose faraday.adapter Faraday.default_adapter end connection.post do |req| req.headers["Content-Type"] = "application/json" add_custom_provider_header req req.body = { consumer: consumer, state: provider_state, states: [provider_state], params: params }.to_json end end
Source
# File lib/pact/provider_verifier/set_up_provider_state.rb, line 78 def provider_states_setup_url ENV['PROVIDER_STATES_SETUP_URL'] end
Source
# File lib/pact/provider_verifier/set_up_provider_state.rb, line 105 def set_up_provider_state_error_message(response) "Error setting up provider state '#{provider_state}' for consumer '#{consumer}' at #{provider_states_setup_url}. response status=#{response.status} response body=#{response.body}" end
Source
# File lib/pact/provider_verifier/set_up_provider_state.rb, line 82 def verbose? ENV['VERBOSE_LOGGING'] end
Source
# File lib/pact/provider_verifier/set_up_provider_state.rb, line 115 def warn_if_provider_state_set if provider_state $stderr.puts "WARN: Skipping set up for provider state '#{provider_state}' for consumer '#{consumer}' as there is no --provider-states-setup-url specified." end end