Sha256: ca0f17eddfe74f8b39ab3e5e9147fa3d787e8c37160f4fc79266b225fd9ce309

Contents?: true

Size: 1.47 KB

Versions: 1

Compression:

Stored size: 1.47 KB

Contents

require 'pact/consumer_contract'
require_relative 'base_client'


module PactBroker
  module Client
    class Pacts  < BaseClient

      def publish options
        consumer_version = options[:consumer_version]
        pact_string = options[:pact]
        consumer_contract = ::Pact::ConsumerContract.from_json pact_string
        url = save_consumer_contract_url consumer_contract, consumer_version
        response = self.class.put(url, body: pact_string, headers: default_put_headers)
        handle_response(response) do
          true
        end
      end

      def last options
        url = find_last_consumer_contract_url options
        query = options[:tag] ? {tag: options[:tag]} : {}
        response = self.class.get(url, headers: default_get_headers, query: query)
        handle_response(response) do
          response.body
        end
      end

      private

      def find_last_consumer_contract_url options
        consumer_name = encode_param(options[:consumer])
        provider_name = encode_param(options[:provider])
        "/pacticipant/#{consumer_name}/versions/last/pacts/#{provider_name}"
      end

      def save_consumer_contract_url consumer_contract, consumer_version
        consumer_name = encode_param(consumer_contract.consumer.name)
        provider_name = encode_param(consumer_contract.provider.name)
        version = encode_param(consumer_version)
        "/pacticipant/#{consumer_name}/versions/#{version}/pacts/#{provider_name}"
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pact_broker-client-0.0.1 lib/pact_broker/client/pacts.rb