Sha256: 7b53f304ad756d6652a95e69855942d37dfc2b06e30631b29784a202a9cde71d

Contents?: true

Size: 1.95 KB

Versions: 3

Compression:

Stored size: 1.95 KB

Contents

module Outboxable
  class << self
    attr_accessor :configuration
  end

  def self.configure
    self.configuration ||= Configuration.new
    yield(configuration)
  end

  class Configuration
    ALLOWED_MESSAGE_BROKERS = %i[rabbitmq].freeze
    ALLOWED_ORMS = %i[activerecord].freeze

    attr_accessor :rabbitmq_host, 
                  :rabbitmq_port,
                  :rabbitmq_user,
                  :rabbitmq_password,
                  :rabbitmq_vhost,
                  :rabbitmq_event_bus_exchange,
                  :message_broker,
                  :orm

    def initialize
      raise Error, 'Sidekiq is not available. Unfortunately, sidekiq must be available for Outboxable to work' unless Object.const_defined?('Sidekiq')
      raise Error, 'Outboxable Gem only supports Rails but you application does not seem to be a Rails app' unless Object.const_defined?('Rails')
      raise Error, 'Outboxable Gem only support Rails version 7 and newer' if Rails::VERSION::MAJOR < 7
      raise Error, 'Outboxable Gem uses the sidekiq-cron Gem. Make sure you add it to your project' unless Object.const_defined?('Sidekiq::Cron')

      # In accordance to sidekiq-cron README: https://github.com/sidekiq-cron/sidekiq-cron#under-the-hood
      Sidekiq::Options[:cron_poll_interval] = 5

      # Create the cron job for the polling publisher
      Sidekiq::Cron::Job.create(name: 'OutboxablePollingPublisher', cron: '*/5 * * * * *', class: 'Outboxable::PollingPublisherWorker') 
    end

    def message_broker=(message_broker)
      raise ArgumentError, "Message broker must be one of #{ALLOWED_MESSAGE_BROKERS}" unless ALLOWED_MESSAGE_BROKERS.include?(message_broker)

      @message_broker = message_broker
    end

    def message_broker
      @message_broker || :rabbitmq
    end

    def orm=(orm)
      raise ArgumentError, "ORM must be one of #{ALLOWED_ORMS}" unless ALLOWED_ORMS.include?(orm)

      @orm = orm
    end

    def orm
      @orm || :activerecord
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
outboxable-0.1.2 lib/outboxable/configuration.rb
outboxable-0.1.1 lib/outboxable/configuration.rb
outboxable-0.1.0 lib/outboxable/configuration.rb