Class: PactBroker::Pacts::Repository

Inherits:
Object
  • Object
show all
Includes:
Logging
Defined in:
lib/pact_broker/pacts/repository.rb

Constant Summary

Constants included from Logging

Logging::LOG_DIR, Logging::LOG_FILE_NAME

Instance Method Summary collapse

Methods included from Logging

included, #logger, #logger=

Instance Method Details

#create(params) ⇒ Object



17
18
19
20
21
22
23
# File 'lib/pact_broker/pacts/repository.rb', line 17

def create params
  DatabaseModel.new(
    version_id: params[:version_id],
    provider_id: params[:provider_id],
    pact_version_content: find_or_create_pact_version_content(params[:json_content]),
  ).save.to_domain
end

#delete(params) ⇒ Object



32
33
34
35
36
37
38
39
# File 'lib/pact_broker/pacts/repository.rb', line 32

def delete params
  id = AllPacts
    .consumer(params.consumer_name)
    .provider(params.provider_name)
    .consumer_version_number(params.consumer_version_number)
    .limit(1).first.id
  DatabaseModel.where(id: id).delete
end

#find_all_pact_versions_between(consumer_name, options) ⇒ Object



41
42
43
44
45
46
47
48
# File 'lib/pact_broker/pacts/repository.rb', line 41

def find_all_pact_versions_between consumer_name, options
  AllPacts
    .eager(:tags)
    .consumer(consumer_name)
    .provider(options.fetch(:and))
    .reverse_order(:consumer_version_order)
    .collect(&:to_domain)
end

#find_by_version_and_provider(version_id, provider_id) ⇒ Object



58
59
60
61
62
63
# File 'lib/pact_broker/pacts/repository.rb', line 58

def find_by_version_and_provider version_id, provider_id
  AllPacts
    .eager(:tags)
    .where(consumer_version_id: version_id, provider_id: provider_id)
    .limit(1).collect(&:to_domain_with_content)[0]
end

#find_latest_pact(consumer_name, provider_name, tag = nil) ⇒ Object



69
70
71
72
73
74
75
# File 'lib/pact_broker/pacts/repository.rb', line 69

def find_latest_pact(consumer_name, provider_name, tag = nil)
  query = AllPacts
    .consumer(consumer_name)
    .provider(provider_name)
  query = query.tag(tag) unless tag.nil?
  query.latest.all.collect(&:to_domain_with_content)[0]
end

#find_latest_pact_versions_for_provider(provider_name, tag = nil) ⇒ Object



50
51
52
53
54
55
56
# File 'lib/pact_broker/pacts/repository.rb', line 50

def find_latest_pact_versions_for_provider provider_name, tag = nil
  if tag
    LatestTaggedPacts.provider(provider_name).where(tag_name: tag).collect(&:to_domain)
  else
    LatestPacts.provider(provider_name).collect(&:to_domain)
  end
end

#find_latest_pactsObject



65
66
67
# File 'lib/pact_broker/pacts/repository.rb', line 65

def find_latest_pacts
  LatestPacts.collect(&:to_domain)
end

#find_next_pact(pact) ⇒ Object



95
96
97
98
99
100
101
102
# File 'lib/pact_broker/pacts/repository.rb', line 95

def find_next_pact pact
  AllPacts
    .eager(:tags)
    .consumer(pact.consumer.name)
    .provider(pact.provider.name)
    .consumer_version_order_after(pact.consumer_version.order)
    .earliest.collect(&:to_domain_with_content)[0]
end

#find_pact(consumer_name, consumer_version, provider_name) ⇒ Object



77
78
79
80
81
82
83
84
# File 'lib/pact_broker/pacts/repository.rb', line 77

def find_pact consumer_name, consumer_version, provider_name
  AllPacts
    .eager(:tags)
    .consumer(consumer_name)
    .provider(provider_name)
    .consumer_version_number(consumer_version)
    .limit(1).collect(&:to_domain_with_content)[0]
end

#find_previous_distinct_pact(pact) ⇒ Object



104
105
106
107
108
109
110
111
# File 'lib/pact_broker/pacts/repository.rb', line 104

def find_previous_distinct_pact pact
  previous, current = nil, pact
  loop do
    previous = find_previous_distinct_pact_by_sha current
    return previous if previous.nil? || different?(current, previous)
    current = previous
  end
end

#find_previous_pact(pact) ⇒ Object



86
87
88
89
90
91
92
93
# File 'lib/pact_broker/pacts/repository.rb', line 86

def find_previous_pact pact
  AllPacts
    .eager(:tags)
    .consumer(pact.consumer.name)
    .provider(pact.provider.name)
    .consumer_version_order_before(pact.consumer_version.order)
    .latest.collect(&:to_domain_with_content)[0]
end

#update(id, params) ⇒ Object



25
26
27
28
29
30
# File 'lib/pact_broker/pacts/repository.rb', line 25

def update id, params
  DatabaseModel.find(id: id).tap do | pact |
    pact_version_content = find_or_create_pact_version_content(params[:json_content])
    pact.update(pact_version_content: pact_version_content)
  end.to_domain
end