Sha256: c0ff127d48a8b9586a849f460124e5cc6d9ad0242c75e725f5ff685de3baff2d

Contents?: true

Size: 1.48 KB

Versions: 1

Compression:

Stored size: 1.48 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_json]
        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])
        "/pacticipants/#{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)
        "/pacticipants/#{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.2 lib/pact_broker/client/pacts.rb