class PactBroker::Webhooks::Repository
Public Instance Methods
any_webhooks_configured_for_pact?(pact)
click to toggle source
needs to know if there are any at all, regardless of whether or not user can edit them
# File lib/pact_broker/webhooks/repository.rb, line 70 def any_webhooks_configured_for_pact?(pact) deliberately_unscoped(Webhook).find_by_consumer_and_or_provider(pact.consumer, pact.provider).any? end
create(uuid, webhook, consumer, provider)
click to toggle source
# File lib/pact_broker/webhooks/repository.rb, line 18 def create uuid, webhook, consumer, provider consumer = find_pacticipant_by_name(webhook.consumer) || consumer provider = find_pacticipant_by_name(webhook.provider) || 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)
click to toggle source
# File lib/pact_broker/webhooks/repository.rb, line 125 def create_execution triggered_webhook, webhook_execution_result # TriggeredWebhook may have been deleted since the webhook execution started if deliberately_unscoped(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(uuid, webhook, pact, verification, trigger_type, event_name, event_context)
click to toggle source
rubocop: disable Metrics/ParameterLists
# File lib/pact_broker/webhooks/repository.rb, line 99 def create_triggered_webhook uuid, webhook, pact, verification, trigger_type, event_name, event_context db_webhook = deliberately_unscoped(Webhook).where(uuid: webhook.uuid).single_record # trigger_uuid was meant to be one per *event*, not one per triggered webhook, but its intent got lost over time. # Retiring it now in favour of uuid, but can't leave it empty because # it has a not-null and unique webhook_uuid/trigger_uuid constraint on it. TriggeredWebhook.create( uuid: uuid, status: TriggeredWebhook::STATUS_NOT_RUN, pact_publication_id: pact.id, verification: verification, webhook: db_webhook, webhook_uuid: db_webhook.uuid, trigger_uuid: uuid, trigger_type: trigger_type, consumer: pact.consumer, provider: pact.provider, event_name: event_name, event_context: event_context ) end
delete_by_consumer_and_provider(consumer, provider)
click to toggle source
deleting a particular integration do delete triggered webhooks only delete stuff matching both, as other integrations may still be present
# File lib/pact_broker/webhooks/repository.rb, line 81 def delete_by_consumer_and_provider consumer, provider webhooks_to_delete = deliberately_unscoped(Webhook).where(consumer: consumer, provider: provider) TriggeredWebhook.where(webhook: webhooks_to_delete).delete # Delete the orphaned triggerred webhooks TriggeredWebhook.where(consumer: consumer, provider: provider).delete webhooks_to_delete.delete end
delete_by_pacticipant(pacticipant)
click to toggle source
policy applied at resource level for pacticipant If we’re deleting the pacticipant, then we actually do want to delete the triggered webhooks
# File lib/pact_broker/webhooks/repository.rb, line 55 def delete_by_pacticipant pacticipant deliberately_unscoped(TriggeredWebhook).where(consumer_id: pacticipant.id).delete deliberately_unscoped(TriggeredWebhook).where(provider_id: pacticipant.id).delete deliberately_unscoped(TriggeredWebhook).where(webhook: deliberately_unscoped(Webhook).where(consumer_id: pacticipant.id)).delete deliberately_unscoped(TriggeredWebhook).where(webhook: deliberately_unscoped(Webhook).where(provider_id: pacticipant.id)).delete deliberately_unscoped(Webhook).where(consumer_id: pacticipant.id).delete deliberately_unscoped(Webhook).where(provider_id: pacticipant.id).delete end
delete_by_uuid(uuid)
click to toggle source
policy applied at resource level
# File lib/pact_broker/webhooks/repository.rb, line 49 def delete_by_uuid uuid deliberately_unscoped(Webhook).where(uuid: uuid).destroy end
delete_triggered_webhooks_by_pact_publication_ids(pact_publication_ids)
click to toggle source
# File lib/pact_broker/webhooks/repository.rb, line 146 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) end
delete_triggered_webhooks_by_verification_ids(verification_ids)
click to toggle source
# File lib/pact_broker/webhooks/repository.rb, line 142 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)
click to toggle source
# File lib/pact_broker/webhooks/repository.rb, line 137 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
fail_retrying_triggered_webhooks()
click to toggle source
# File lib/pact_broker/webhooks/repository.rb, line 183 def fail_retrying_triggered_webhooks deliberately_unscoped(TriggeredWebhook).retrying.update(status: TriggeredWebhook::STATUS_FAILURE) end
find_all()
click to toggle source
this needs the scope!
# File lib/pact_broker/webhooks/repository.rb, line 65 def find_all scope_for(Webhook).all.collect(&:to_domain) end
find_by_consumer_and_provider(consumer, provider)
click to toggle source
# File lib/pact_broker/webhooks/repository.rb, line 74 def find_by_consumer_and_provider consumer, provider scope_for(Webhook).find_by_consumer_and_provider(consumer, provider).collect(&:to_domain) end
find_by_uuid(uuid)
click to toggle source
policy applied at resource level
# File lib/pact_broker/webhooks/repository.rb, line 31 def find_by_uuid uuid deliberately_unscoped(Webhook).where(uuid: uuid).limit(1).collect(&:to_domain)[0] end
find_latest_triggered_webhooks(consumer, provider)
click to toggle source
# File lib/pact_broker/webhooks/repository.rb, line 159 def find_latest_triggered_webhooks consumer, provider # policy already applied to pact scope_for(TriggeredWebhook) .where(consumer: consumer, provider: provider) .latest_triggered_webhooks .all end
find_latest_triggered_webhooks_for_pact(pact)
click to toggle source
# File lib/pact_broker/webhooks/repository.rb, line 151 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)
click to toggle source
# File lib/pact_broker/webhooks/repository.rb, line 167 def find_triggered_webhooks_for_pact pact scope_for(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)
click to toggle source
# File lib/pact_broker/webhooks/repository.rb, line 175 def find_triggered_webhooks_for_verification verification scope_for(PactBroker::Webhooks::TriggeredWebhook) .where(verification_id: verification.id) .eager(:webhook) .eager(:webhook_executions) .reverse(:created_at, :id) end
find_webhooks_to_trigger(consumer: , provider: , event_name: deliberately_unscoped(Webhook) .select_all_qualified .enabled .for_event_name(event_name) .find_by_consumer_and_or_provider(consumer, provider) .collect(&:to_domain))
click to toggle source
# File lib/pact_broker/webhooks/repository.rb, line 89 def find_webhooks_to_trigger consumer: , provider: , event_name: deliberately_unscoped(Webhook) .select_all_qualified .enabled .for_event_name(event_name) .find_by_consumer_and_or_provider(consumer, provider) .collect(&:to_domain) end
update_by_uuid(uuid, webhook)
click to toggle source
policy applied at resource level
# File lib/pact_broker/webhooks/repository.rb, line 36 def update_by_uuid uuid, webhook existing_webhook = deliberately_unscoped(Webhook).find(uuid: uuid) existing_webhook.consumer_id = find_pacticipant_by_name(webhook.consumer)&.id existing_webhook.provider_id = find_pacticipant_by_name(webhook.provider)&.id 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)
click to toggle source
rubocop: enable Metrics/ParameterLists
# File lib/pact_broker/webhooks/repository.rb, line 121 def update_triggered_webhook_status triggered_webhook, status triggered_webhook.update(status: status) end
Private Instance Methods
delete_triggered_webhooks_and_executions(triggered_webhook_ids)
click to toggle source
# File lib/pact_broker/webhooks/repository.rb, line 207 def delete_triggered_webhooks_and_executions triggered_webhook_ids Execution.where(triggered_webhook_id: triggered_webhook_ids).delete TriggeredWebhook.where(id: triggered_webhook_ids).delete end
deliberately_unscoped(scope)
click to toggle source
# File lib/pact_broker/webhooks/repository.rb, line 195 def deliberately_unscoped(scope) scope end
find_pacticipant_by_name(pacticipant)
click to toggle source
# File lib/pact_broker/webhooks/repository.rb, line 189 def find_pacticipant_by_name(pacticipant) return unless pacticipant&.name pacticipant_repository.find_by_name(pacticipant.name) end
scope_for(scope)
click to toggle source
# File lib/pact_broker/webhooks/repository.rb, line 199 def scope_for(scope) if @no_policy scope else PactBroker.policy_scope!(scope) end end