Class: PactBroker::Webhooks::Repository

Inherits:
Object
  • Object
show all
Includes:
Logging, Repositories
Defined in:
lib/pact_broker/webhooks/repository.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 Logging

included, #log_error

Instance Method Details

#create(uuid, webhook, consumer, provider) ⇒ Object



19
20
21
22
23
24
25
26
27
# File 'lib/pact_broker/webhooks/repository.rb', line 19

def create uuid, webhook, consumer, provider
  db_webhook = Webhook.from_domain webhook, consumer, provider
  db_webhook.uuid = uuid
  db_webhook.save
  (webhook.events || []).each do | webhook_event |
    db_webhook.add_event(webhook_event)
  end
  find_by_uuid db_webhook.uuid
end

#create_execution(triggered_webhook, webhook_execution_result) ⇒ Object



121
122
123
124
125
126
127
128
129
130
131
# File 'lib/pact_broker/webhooks/repository.rb', line 121

def create_execution triggered_webhook, webhook_execution_result
  # TriggeredWebhook may have been deleted since the webhook execution started
  if TriggeredWebhook.where(id: triggered_webhook.id).any?
    Execution.create(
      triggered_webhook: triggered_webhook,
      success: webhook_execution_result.success?,
      logs: webhook_execution_result.logs)
  else
    logger.info("Could not save webhook execution for triggered webhook with id #{triggered_webhook.id} as it has been delete from the database")
  end
end

#create_triggered_webhook(trigger_uuid, webhook, pact, verification, trigger_type) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/pact_broker/webhooks/repository.rb', line 102

def create_triggered_webhook trigger_uuid, webhook, pact, verification, trigger_type
  db_webhook = Webhook.where(uuid: webhook.uuid).single_record
  TriggeredWebhook.create(
    status: TriggeredWebhook::STATUS_NOT_RUN,
    pact_publication_id: pact.id,
    verification: verification,
    webhook: db_webhook,
    webhook_uuid: db_webhook.uuid,
    trigger_uuid: trigger_uuid,
    trigger_type: trigger_type,
    consumer: pact.consumer,
    provider: pact.provider
  )
end

#delete_by_consumer_and_provider(consumer, provider) ⇒ Object



77
78
79
# File 'lib/pact_broker/webhooks/repository.rb', line 77

def delete_by_consumer_and_provider consumer, provider
  Webhook.where(consumer: consumer, provider: provider).destroy
end

#delete_by_pacticipant(pacticipant) ⇒ Object



49
50
51
52
# File 'lib/pact_broker/webhooks/repository.rb', line 49

def delete_by_pacticipant pacticipant
  Webhook.where(consumer_id: pacticipant.id).destroy
  Webhook.where(provider_id: pacticipant.id).destroy
end

#delete_by_uuid(uuid) ⇒ Object



45
46
47
# File 'lib/pact_broker/webhooks/repository.rb', line 45

def delete_by_uuid uuid
  Webhook.where(uuid: uuid).destroy
end

#delete_executions_by_pacticipant(pacticipants) ⇒ Object



138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/pact_broker/webhooks/repository.rb', line 138

def delete_executions_by_pacticipant pacticipants
  # TODO this relationship no longer exists, deprecate in next version
  DeprecatedExecution.where(consumer: pacticipants).delete
  DeprecatedExecution.where(provider: pacticipants).delete
  execution_ids = Execution
    .join(:triggered_webhooks, {id: :triggered_webhook_id})
    .where(Sequel.or(
      Sequel[:triggered_webhooks][:consumer_id] => [*pacticipants].collect(&:id),
      Sequel[:triggered_webhooks][:provider_id] => [*pacticipants].collect(&:id),
    )).all.collect(&:id)
  Execution.where(id: execution_ids).delete
end

#delete_triggered_webhooks_by_pact_publication_ids(pact_publication_ids) ⇒ Object



166
167
168
169
170
# File 'lib/pact_broker/webhooks/repository.rb', line 166

def delete_triggered_webhooks_by_pact_publication_ids pact_publication_ids
  triggered_webhook_ids = TriggeredWebhook.where(pact_publication_id: pact_publication_ids).select_for_subquery(:id)
  delete_triggered_webhooks_and_executions(triggered_webhook_ids)
  DeprecatedExecution.where(pact_publication_id: pact_publication_ids).delete
end

#delete_triggered_webhooks_by_pacticipant(pacticipant) ⇒ Object



133
134
135
136
# File 'lib/pact_broker/webhooks/repository.rb', line 133

def delete_triggered_webhooks_by_pacticipant pacticipant
  TriggeredWebhook.where(consumer: pacticipant).delete
  TriggeredWebhook.where(provider: pacticipant).delete
end

#delete_triggered_webhooks_by_verification_ids(verification_ids) ⇒ Object



162
163
164
# File 'lib/pact_broker/webhooks/repository.rb', line 162

def delete_triggered_webhooks_by_verification_ids verification_ids
  delete_triggered_webhooks_and_executions(TriggeredWebhook.where(verification_id: verification_ids).select_for_subquery(:id))
end

#delete_triggered_webhooks_by_version_id(version_id) ⇒ Object



157
158
159
160
# File 'lib/pact_broker/webhooks/repository.rb', line 157

def delete_triggered_webhooks_by_version_id version_id
  delete_triggered_webhooks_by_pact_publication_ids(PactBroker::Pacts::PactPublication.where(consumer_version_id: version_id).select_for_subquery(:id))
  delete_triggered_webhooks_by_verification_ids(PactBroker::Domain::Verification.where(provider_version_id: version_id).select_for_subquery(:id))
end

#delete_triggered_webhooks_by_webhook_uuid(uuid) ⇒ Object



151
152
153
154
155
# File 'lib/pact_broker/webhooks/repository.rb', line 151

def delete_triggered_webhooks_by_webhook_uuid uuid
  triggered_webhook_ids = TriggeredWebhook.where(webhook: Webhook.where(uuid: uuid)).select_for_subquery(:id)
  delete_triggered_webhooks_and_executions(triggered_webhook_ids)
  DeprecatedExecution.where(webhook_id: Webhook.where(uuid: uuid).select_for_subquery(:id)).delete
end

#fail_retrying_triggered_webhooksObject



203
204
205
# File 'lib/pact_broker/webhooks/repository.rb', line 203

def fail_retrying_triggered_webhooks
  TriggeredWebhook.retrying.update(status: TriggeredWebhook::STATUS_FAILURE)
end

#find_allObject



54
55
56
# File 'lib/pact_broker/webhooks/repository.rb', line 54

def find_all
  Webhook.all.collect(&:to_domain)
end

#find_by_consumer_and_or_provider(consumer, provider) ⇒ Object



62
63
64
65
66
67
# File 'lib/pact_broker/webhooks/repository.rb', line 62

def find_by_consumer_and_or_provider consumer, provider
  find_by_consumer_and_provider(consumer, provider) +
    find_by_consumer_and_provider(nil, provider) +
    find_by_consumer_and_provider(consumer, nil) +
    find_by_consumer_and_provider(nil, nil)
end

#find_by_consumer_and_or_provider_and_event_name(consumer, provider, event_name) ⇒ Object



81
82
83
84
85
86
# File 'lib/pact_broker/webhooks/repository.rb', line 81

def find_by_consumer_and_or_provider_and_event_name consumer, provider, event_name
  find_by_consumer_and_provider_and_event_name(consumer, provider, event_name) +
    find_by_consumer_and_provider_and_event_name(nil, provider, event_name) +
    find_by_consumer_and_provider_and_event_name(consumer, nil, event_name) +
    find_by_consumer_and_provider_and_event_name(nil, nil, event_name)
end

#find_by_consumer_and_provider(consumer, provider) ⇒ Object



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

def find_by_consumer_and_provider consumer, provider
  criteria = {
    consumer_id: (consumer ? consumer.id : nil),
    provider_id: (provider ? provider.id : nil)
  }
  Webhook.where(criteria).collect(&:to_domain)
end

#find_by_consumer_and_provider_and_event_name(consumer, provider, event_name) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/pact_broker/webhooks/repository.rb', line 88

def find_by_consumer_and_provider_and_event_name consumer, provider, event_name
  criteria = {
    consumer_id: (consumer ? consumer.id : nil),
    provider_id: (provider ? provider.id : nil)
  }
  Webhook
    .select_all_qualified
    .enabled
    .where(criteria)
    .join(:webhook_events, { webhook_id: :id })
    .where(Sequel[:webhook_events][:name] => event_name)
    .collect(&:to_domain)
end

#find_by_uuid(uuid) ⇒ Object



29
30
31
# File 'lib/pact_broker/webhooks/repository.rb', line 29

def find_by_uuid uuid
  Webhook.where(uuid: uuid).limit(1).collect(&:to_domain)[0]
end

#find_for_pact(pact) ⇒ Object



58
59
60
# File 'lib/pact_broker/webhooks/repository.rb', line 58

def find_for_pact pact
  find_by_consumer_and_or_provider(pact.consumer, pact.provider)
end

#find_latest_triggered_webhooks(consumer, provider) ⇒ Object



180
181
182
183
184
185
# File 'lib/pact_broker/webhooks/repository.rb', line 180

def find_latest_triggered_webhooks consumer, provider
  LatestTriggeredWebhook
    .where(consumer: consumer, provider: provider)
    .order(:id)
    .all
end

#find_latest_triggered_webhooks_for_pact(pact) ⇒ Object



172
173
174
175
176
177
178
# File 'lib/pact_broker/webhooks/repository.rb', line 172

def find_latest_triggered_webhooks_for_pact pact
  if pact
    find_latest_triggered_webhooks(pact.consumer, pact.provider)
  else
    []
  end
end

#find_triggered_webhooks_for_pact(pact) ⇒ Object



187
188
189
190
191
192
193
# File 'lib/pact_broker/webhooks/repository.rb', line 187

def find_triggered_webhooks_for_pact pact
  PactBroker::Webhooks::TriggeredWebhook
    .where(pact_publication_id: pact.pact_publication_id)
    .eager(:webhook)
    .eager(:webhook_executions)
    .reverse(:created_at, :id)
end

#find_triggered_webhooks_for_verification(verification) ⇒ Object



195
196
197
198
199
200
201
# File 'lib/pact_broker/webhooks/repository.rb', line 195

def find_triggered_webhooks_for_verification verification
  PactBroker::Webhooks::TriggeredWebhook
    .where(verification_id: verification.id)
    .eager(:webhook)
    .eager(:webhook_executions)
    .reverse(:created_at, :id)
end

#update_by_uuid(uuid, webhook) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
# File 'lib/pact_broker/webhooks/repository.rb', line 33

def update_by_uuid uuid, webhook
  existing_webhook = Webhook.find(uuid: uuid)
  existing_webhook.consumer_id = webhook.consumer ? pacticipant_repository.find_by_name(webhook.consumer.name).id : nil
  existing_webhook.provider_id = webhook.provider ? pacticipant_repository.find_by_name(webhook.provider.name).id : nil
  existing_webhook.update_from_domain(webhook).save
  existing_webhook.events.collect(&:delete)
  (webhook.events || []).each do | webhook_event |
    existing_webhook.add_event(webhook_event)
  end
  find_by_uuid uuid
end

#update_triggered_webhook_status(triggered_webhook, status) ⇒ Object



117
118
119
# File 'lib/pact_broker/webhooks/repository.rb', line 117

def update_triggered_webhook_status triggered_webhook, status
  triggered_webhook.update(status: status)
end