Files
fizzy/app/models/webhook.rb
T
2025-09-16 20:03:57 +02:00

55 lines
1.2 KiB
Ruby

class Webhook < ApplicationRecord
include Triggerable
PERMITTED_SCHEMES = %w[ http https ].freeze
PERMITTED_ACTIONS = %w[
card_assigned
card_boosted
card_closed
card_collection_changed
card_created
card_popped
card_published
card_reopened
card_staged
card_title_changed
card_unassigned
card_unstaged
comment_created
].freeze
encrypts :signing_secret
has_secure_token :signing_secret
has_many :deliveries, dependent: :delete_all
serialize :subscribed_actions, type: Array, coder: JSON
scope :ordered, -> { order(name: :asc, id: :desc) }
scope :active, -> { where(active: true) }
normalizes :subscribed_actions, with: ->(value) { Array.wrap(value).map { |e| e.to_s.strip.presence }.uniq & PERMITTED_ACTIONS }
validates :name, presence: true
validate :validate_url
def activate
update_columns active: true
end
def deactivate
update_columns active: false
end
private
def validate_url
uri = URI.parse(url.presence)
if PERMITTED_SCHEMES.exclude?(uri.scheme)
errors.add :url, "must use #{PERMITTED_SCHEMES.to_choice_sentence}"
end
rescue URI::InvalidURIError
errors.add :url, "not a URL"
end
end