class Pact::Consumer::Configuration::MockService

Attributes

consumer_name[RW]
host[RW]
pact_specification_version[RW]
port[RW]
provider_name[RW]
standalone[RW]
verify[RW]

Public Class Methods

new(name, consumer_name, provider_name) click to toggle source
# File lib/pact/consumer/configuration/mock_service.rb, line 16
def initialize name, consumer_name, provider_name
  @name = name
  @consumer_name = consumer_name
  @provider_name = provider_name
  @port = nil
  @host = "localhost"
  @standalone = false
  @verify = true
  @pact_specification_version = '2'
  @finalized = false
end

Public Instance Methods

finalize() click to toggle source
# File lib/pact/consumer/configuration/mock_service.rb, line 50
def finalize
  raise 'Already finalized!' if @finalized
  register_mock_service
  configure_consumer_contract_builder
  @finalized = true
end

Private Instance Methods

configure_consumer_contract_builder() click to toggle source
# File lib/pact/consumer/configuration/mock_service.rb, line 68
def configure_consumer_contract_builder
  consumer_contract_builder = create_consumer_contract_builder
  create_consumer_contract_builders_method consumer_contract_builder
  setup_verification(consumer_contract_builder) if verify
  consumer_contract_builder
end
create_consumer_contract_builder() click to toggle source
# File lib/pact/consumer/configuration/mock_service.rb, line 75
def create_consumer_contract_builder
  consumer_contract_builder_fields = {
    :consumer_name => consumer_name,
    :provider_name => provider_name,
    :pactfile_write_mode => Pact.configuration.pactfile_write_mode,
    :port => port,
    :host => host,
    :pact_dir => Pact.configuration.pact_dir
  }
  Pact::Consumer::ConsumerContractBuilder.new consumer_contract_builder_fields
end
create_consumer_contract_builders_method(consumer_contract_builder) click to toggle source

This makes the consumer_contract_builder available via a module method with the given identifier as the method name. I feel this should be defined somewhere else, but I'm not sure where

# File lib/pact/consumer/configuration/mock_service.rb, line 96
def create_consumer_contract_builders_method consumer_contract_builder
  Pact::Consumer::ConsumerContractBuilders.send(:define_method, @name.to_sym) do
    consumer_contract_builder
  end
  Pact.consumer_world.add_consumer_contract_builder consumer_contract_builder
end
mock_service_options() click to toggle source
# File lib/pact/consumer/configuration/mock_service.rb, line 103
def mock_service_options
  {
    pact_specification_version: pact_specification_version,
    find_available_port: port.nil?,
  }
end
register_mock_service() click to toggle source
# File lib/pact/consumer/configuration/mock_service.rb, line 59
def register_mock_service
  unless standalone
    url = "http://#{host}#{port.nil? ? '' : ":#{port}"}"
    ret = Pact::MockService::AppManager.instance.register_mock_service_for(provider_name, url, mock_service_options)
    raise "pact-mock_service(v#{Pact::MockService::VERSION}) does not support 'find available port' feature" unless ret
    @port = ret
  end
end
setup_verification(consumer_contract_builder) click to toggle source
# File lib/pact/consumer/configuration/mock_service.rb, line 87
def setup_verification consumer_contract_builder
  Pact.configuration.add_provider_verification do | example_description |
    consumer_contract_builder.verify example_description
  end
end