Sha256: 90b3ae830b172f4e1c3c5155866b3c68104951423074b94461f0c91bc266e800

Contents?: true

Size: 1.5 KB

Versions: 1

Compression:

Stored size: 1.5 KB

Contents

# frozen_string_literal: true

module ActiveWebhook
  module Models
    module TopicAdditions
      extend ActiveSupport::Concern

      included do
        self.table_name = "active_webhook_topics"

        scope :enabled, -> { where(disabled_at: nil) }
        scope :with_key, lambda { |key:, version: nil|
          scope = where(key: key)
          scope = scope.where(version: version) if version.present?
          scope
        }

        def self.last_with_key(key)
          where(key: key).order(id: :desc).first
        end

        before_validation :set_valid_version
        validates :key, presence: true
        validates :version, presence: true, uniqueness: { scope: :key }
      end

      def disable(reason = nil)
        self.disabled_at = Time.current
        self.disabled_reason = reason
      end

      def disable!(reason = nil)
        disable reason
        save!
      end

      def enable
        self.disabled_at = nil
        self.disabled_reason = nil
      end

      def enable!
        enable
        save!
      end

      def disabled?
        !enabled?
      end

      def enabled?
        disabled_at.nil?
      end

      protected

      def set_valid_version
        return if version.present?

        last_with_key = self.class.last_with_key key
        versions = last_with_key&.version.to_s.split(".")
        versions = [0] if versions.empty?
        version = versions.pop
        versions << version.to_i + 1

        self.version = versions.join(".")
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
active_webhook-1.0.0 lib/active_webhook/models/topic_additions.rb