Module: PactBroker::Pacts::Service

Extended by:
Service, SquashPactsForVerification, Repositories, Services
Includes:
Logging
Included in:
Service
Defined in:
lib/pact_broker/pacts/service.rb

Instance Method Summary collapse

Methods included from Repositories

label_repository, matrix_repository, pact_repository, pacticipant_repository, tag_repository, verification_repository, version_repository, webhook_repository

Methods included from Services

badge_service, certificate_service, group_service, index_service, integration_service, label_service, matrix_service, metrics_service, pact_service, pacticipant_service, tag_service, verification_service, version_service, webhook_service, webhook_trigger_service

Methods included from SquashPactsForVerification

call, squash_pacts_for_verification

Methods included from Logging

included, #log_error

Instance Method Details

#create_or_update_pact(params, webhook_options) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/pact_broker/pacts/service.rb', line 46

def create_or_update_pact params, webhook_options
  provider = pacticipant_repository.find_by_name_or_create params[:provider_name]
  consumer = pacticipant_repository.find_by_name_or_create params[:consumer_name]
  consumer_version = version_repository.find_by_pacticipant_id_and_number_or_create consumer.id, params[:consumer_version_number]
  existing_pact = pact_repository.find_by_version_and_provider(consumer_version.id, provider.id)

  if existing_pact
    update_pact params, existing_pact, webhook_options
  else
    create_pact params, consumer_version, provider, webhook_options
  end
end

#delete(params) ⇒ Object



39
40
41
42
43
44
# File 'lib/pact_broker/pacts/service.rb', line 39

def delete params
  logger.info "Deleting pact version with params #{params}"
  pacts = pact_repository.find_all_revisions(params[:consumer_name], params[:consumer_version_number], params[:provider_name])
  webhook_service.delete_all_webhook_related_objects_by_pact_publication_ids(pacts.collect(&:id))
  pact_repository.delete(params)
end

#delete_all_pact_publications_between(consumer, options) ⇒ Object



74
75
76
# File 'lib/pact_broker/pacts/service.rb', line 74

def delete_all_pact_publications_between consumer, options
  pact_repository.delete_all_pact_publications_between consumer, options
end

#delete_all_pact_versions_between(consumer, options) ⇒ Object



78
79
80
# File 'lib/pact_broker/pacts/service.rb', line 78

def delete_all_pact_versions_between consumer, options
  pact_repository.delete_all_pact_versions_between consumer, options
end

#find_all_pact_versions_between(consumer, options) ⇒ Object



70
71
72
# File 'lib/pact_broker/pacts/service.rb', line 70

def find_all_pact_versions_between consumer, options
  pact_repository.find_all_pact_versions_between consumer, options
end

#find_by_consumer_version(params) ⇒ Object



35
36
37
# File 'lib/pact_broker/pacts/service.rb', line 35

def find_by_consumer_version params
  pact_repository.find_by_consumer_version(params[:consumer_name], params[:consumer_version_number])
end

#find_distinct_pacts_between(consumer, options) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/pact_broker/pacts/service.rb', line 100

def find_distinct_pacts_between consumer, options
  # Assumes pacts are sorted from newest to oldest
  all = pact_repository.find_all_pact_versions_between consumer, options
  distinct = []
  (0...all.size).each do | i |
    if i == all.size - 1
      distinct << all[i]
    else
      if all[i].json_content != all[i+1].json_content
        distinct << all[i]
      end
    end
  end
  distinct
end

#find_for_verification(provider_name, provider_version_tags, consumer_version_selectors) ⇒ Object



116
117
118
119
120
121
122
123
124
# File 'lib/pact_broker/pacts/service.rb', line 116

def find_for_verification(provider_name, provider_version_tags, consumer_version_selectors)
  pact_repository
    .find_for_verification(provider_name, consumer_version_selectors)
    .group_by(&:pact_version_sha)
    .values
    .collect do | head_pacts |
      squash_pacts_for_verification(provider_version_tags, head_pacts)
    end
end

#find_latest_pact(params) ⇒ Object



19
20
21
# File 'lib/pact_broker/pacts/service.rb', line 19

def find_latest_pact params
  pact_repository.find_latest_pact(params[:consumer_name], params[:provider_name], params[:tag])
end

#find_latest_pact_versions_for_provider(provider_name, options = {}) ⇒ Object



82
83
84
# File 'lib/pact_broker/pacts/service.rb', line 82

def find_latest_pact_versions_for_provider provider_name, options = {}
  pact_repository.find_latest_pact_versions_for_provider provider_name, options[:tag]
end

#find_latest_pactsObject



27
28
29
# File 'lib/pact_broker/pacts/service.rb', line 27

def find_latest_pacts
  pact_repository.find_latest_pacts
end

#find_pact(params) ⇒ Object



31
32
33
# File 'lib/pact_broker/pacts/service.rb', line 31

def find_pact params
  pact_repository.find_pact(params[:consumer_name], params[:consumer_version_number], params[:provider_name], params[:pact_version_sha])
end

#find_pact_versions_for_provider(provider_name, options = {}) ⇒ Object



90
91
92
# File 'lib/pact_broker/pacts/service.rb', line 90

def find_pact_versions_for_provider provider_name, options = {}
  pact_repository.find_pact_versions_for_provider provider_name, options[:tag]
end

#find_previous_distinct_pact_version(params) ⇒ Object



94
95
96
97
98
# File 'lib/pact_broker/pacts/service.rb', line 94

def find_previous_distinct_pact_version params
  pact = find_pact params
  return nil if pact.nil?
  pact_repository.find_previous_distinct_pact pact
end

#find_wip_pact_versions_for_provider(provider_name) ⇒ Object



86
87
88
# File 'lib/pact_broker/pacts/service.rb', line 86

def find_wip_pact_versions_for_provider provider_name
  pact_repository.find_wip_pact_versions_for_provider provider_name
end

#merge_pact(params, webhook_options) ⇒ Object



59
60
61
62
63
64
65
66
67
68
# File 'lib/pact_broker/pacts/service.rb', line 59

def merge_pact params, webhook_options
  provider = pacticipant_repository.find_by_name_or_create params[:provider_name]
  consumer = pacticipant_repository.find_by_name_or_create params[:consumer_name]
  consumer_version = version_repository.find_by_pacticipant_id_and_number_or_create consumer.id, params[:consumer_version_number]
  existing_pact = pact_repository.find_by_version_and_provider(consumer_version.id, provider.id)

  params.merge!(json_content: Merger.merge_pacts(existing_pact.json_content, params[:json_content]))

  update_pact params, existing_pact, webhook_options
end

#search_for_latest_pact(params) ⇒ Object



23
24
25
# File 'lib/pact_broker/pacts/service.rb', line 23

def search_for_latest_pact params
  pact_repository.search_for_latest_pact(params[:consumer_name], params[:provider_name], params[:tag])
end