Class: RailsWebhookOutbox::Subscription
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- RailsWebhookOutbox::Subscription
- Defined in:
- app/models/rails_webhook_outbox/subscription.rb
Constant Summary collapse
- URL_FORMAT =
/\Ahttps?:\/\/.+/i
Instance Method Summary collapse
- #previous_secret_active? ⇒ Boolean
- #record_delivery_failure!(threshold: RailsWebhookOutbox.config.circuit_breaker_threshold) ⇒ Object
- #record_delivery_success! ⇒ Object
- #rotate_secret!(grace_period: RailsWebhookOutbox.config.secret_rotation_grace_period, force: false) ⇒ Object
- #signing_secrets ⇒ Object
- #subscribes_to?(event) ⇒ Boolean
Instance Method Details
#previous_secret_active? ⇒ Boolean
32 33 34 |
# File 'app/models/rails_webhook_outbox/subscription.rb', line 32 def previous_secret_active? previous_secret.present? && previous_secret_expires_at.present? && previous_secret_expires_at.future? end |
#record_delivery_failure!(threshold: RailsWebhookOutbox.config.circuit_breaker_threshold) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 |
# File 'app/models/rails_webhook_outbox/subscription.rb', line 44 def record_delivery_failure!(threshold: RailsWebhookOutbox.config.circuit_breaker_threshold) with_lock do next false unless active? increment!(:consecutive_failures) next false unless threshold&.positive? && consecutive_failures >= threshold update!(active: false) true end end |
#record_delivery_success! ⇒ Object
40 41 42 |
# File 'app/models/rails_webhook_outbox/subscription.rb', line 40 def record_delivery_success! update!(consecutive_failures: 0) if consecutive_failures != 0 end |
#rotate_secret!(grace_period: RailsWebhookOutbox.config.secret_rotation_grace_period, force: false) ⇒ Object
22 23 24 25 26 27 28 29 30 |
# File 'app/models/rails_webhook_outbox/subscription.rb', line 22 def rotate_secret!(grace_period: RailsWebhookOutbox.config.secret_rotation_grace_period, force: false) raise SecretRotationError if previous_secret_active? && !force update!( previous_secret: secret, previous_secret_expires_at: Time.current + grace_period, secret: generate_secret_value ) end |
#signing_secrets ⇒ Object
36 37 38 |
# File 'app/models/rails_webhook_outbox/subscription.rb', line 36 def signing_secrets previous_secret_active? ? [secret, previous_secret] : [secret] end |
#subscribes_to?(event) ⇒ Boolean
18 19 20 |
# File 'app/models/rails_webhook_outbox/subscription.rb', line 18 def subscribes_to?(event) events.include?(event.to_s) end |