Sha256: b6df9b57be75d3d91e31a8358d8c2aa4f3967f5407d9770756d6f7412bcb5f70

Contents?: true

Size: 1.88 KB

Versions: 3

Compression:

Stored size: 1.88 KB

Contents

# frozen_string_literal: true

require 'socket'
require 'uri'
require 'cgi'

module Mnemosyne
  class Configuration
    attr_reader :application
    attr_reader :hostname
    attr_reader :platform
    attr_reader :amqp
    attr_reader :exchange
    attr_reader :server

    def initialize(config)
      @platform    = config.fetch('platform', 'default').to_s.strip.freeze
      @application = config.fetch('application', nil).to_s.strip.freeze
      @enabled     = config.fetch('enabled', true)
      @exchange    = config.fetch('exchange', 'mnemosyne').to_s.freeze

      hostname  = config.fetch('hostname') { default_hostname }
      @hostname = hostname.to_s.strip.freeze

      server       = config.fetch('server', 'amqp://localhost')
      @amqp        = AMQ::Settings.configure(server).freeze
      @server      = make_amqp_uri(@amqp).to_s.freeze

      raise ArgumentError.new 'Platform is required' if platform.blank?

      if @platform =~ /[^a-zA-Z0-9\-]/
        raise ArgumentError.new \
          'Platform may only contain alphanumeric characters'
      end

      unless @platform =~ /\A[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\z/
        raise ArgumentError.new \
          'Platform must start and end with a alphanumeric characters'
      end

      raise ArgumentError.new('Application is required') if application.blank?
      raise ArgumentError.new('Hostname is required') if hostname.blank?
    end

    def enabled?
      @enabled
    end

    private

    def default_hostname
      Socket.gethostname
    end

    DEFAULT_PORTS = {
      'amqp' => 5672,
      'amqps' => 5671
    }.freeze

    def make_amqp_uri(amqp)
      uri = URI('')

      uri.scheme = amqp[:scheme]
      uri.user = amqp[:user]
      uri.host = amqp[:host]
      uri.port = amqp[:port] if amqp[:port] != DEFAULT_PORTS[uri.scheme]
      uri.path = "/#{::CGI.escape(amqp[:vhost])}" if amqp[:vhost] != '/'

      uri
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mnemosyne-ruby-1.13.0 lib/mnemosyne/configuration.rb
mnemosyne-ruby-1.12.1 lib/mnemosyne/configuration.rb
mnemosyne-ruby-1.12.0 lib/mnemosyne/configuration.rb