Class: Pact::ConsumerContract

Inherits:
Object
  • Object
show all
Includes:
Logging, PactFile, SymbolizeKeys
Defined in:
lib/pact/consumer_contract/consumer_contract.rb

Constant Summary

Constants included from PactFile

PactFile::OPEN_TIMEOUT, PactFile::READ_TIMEOUT, PactFile::RETRY_LIMIT

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from PactFile

#read, #render_pact, #save_pactfile_to_tmp

Methods included from Logging

included, #logger

Methods included from SymbolizeKeys

included, #symbolize_keys

Constructor Details

#initialize(attributes = {}) ⇒ ConsumerContract

Returns a new instance of ConsumerContract.



26
27
28
29
30
# File 'lib/pact/consumer_contract/consumer_contract.rb', line 26

def initialize(attributes = {})
  @interactions = attributes[:interactions] || []
  @consumer = attributes[:consumer]
  @provider = attributes[:provider]
end

Instance Attribute Details

#consumerObject

Returns the value of attribute consumer.



23
24
25
# File 'lib/pact/consumer_contract/consumer_contract.rb', line 23

def consumer
  @consumer
end

#interactionsObject

Returns the value of attribute interactions.



22
23
24
# File 'lib/pact/consumer_contract/consumer_contract.rb', line 22

def interactions
  @interactions
end

#providerObject

Returns the value of attribute provider.



24
25
26
# File 'lib/pact/consumer_contract/consumer_contract.rb', line 24

def provider
  @provider
end

Class Method Details

.from_hash(hash) ⇒ Object



32
33
34
35
36
37
38
39
# File 'lib/pact/consumer_contract/consumer_contract.rb', line 32

def self.from_hash(hash)
  hash = symbolize_keys(hash)
  new(
    :consumer => ServiceConsumer.from_hash(hash[:consumer]),
    :provider => ServiceProvider.from_hash(hash[:provider]),
    :interactions => hash[:interactions].collect { |hash| Interaction.from_hash(hash)}
  )
end

.from_json(string) ⇒ Object



41
42
43
44
# File 'lib/pact/consumer_contract/consumer_contract.rb', line 41

def self.from_json string
  deserialised_object = JSON.load(maintain_backwards_compatiblity_with_producer_keys(string))
  from_hash(deserialised_object)
end

.from_uri(uri, options = {}) ⇒ Object



46
47
48
# File 'lib/pact/consumer_contract/consumer_contract.rb', line 46

def self.from_uri uri, options = {}
  from_json(Pact::PactFile.read(uri, options))
end

.maintain_backwards_compatiblity_with_producer_keys(string) ⇒ Object



50
51
52
# File 'lib/pact/consumer_contract/consumer_contract.rb', line 50

def self.maintain_backwards_compatiblity_with_producer_keys string
  string.gsub('"producer":', '"provider":').gsub('"producer_state":', '"provider_state":')
end

Instance Method Details

#eachObject



68
69
70
71
72
# File 'lib/pact/consumer_contract/consumer_contract.rb', line 68

def each
  interactions.each do | interaction |
    yield interaction
  end
end

#find_interaction(criteria) ⇒ Object



54
55
56
57
58
59
60
61
62
# File 'lib/pact/consumer_contract/consumer_contract.rb', line 54

def find_interaction criteria
  interactions = find_interactions criteria
  if interactions.size == 0
    raise "Could not find interaction matching #{criteria} in pact file between #{consumer.name} and #{provider.name}."
  elsif interactions.size > 1
    raise "Found more than 1 interaction matching #{criteria} in pact file between #{consumer.name} and #{provider.name}."
  end
  interactions.first
end

#find_interactions(criteria) ⇒ Object



64
65
66
# File 'lib/pact/consumer_contract/consumer_contract.rb', line 64

def find_interactions criteria
  interactions.select{ | interaction| interaction.matches_criteria?(criteria)}
end