Sha256: 20c9a348900321807c69b1a06271ff95722d11d19344b6bf16fdf185963438a6

Contents?: true

Size: 1.77 KB

Versions: 7

Compression:

Stored size: 1.77 KB

Contents

# frozen_string_literal: true

module Orchestration
  module Services
    module ConfigurationBase
      attr_reader :service_name, :env, :error

      def self.included(base)
        base.extend(ClassMethods)
      end

      module ClassMethods
        def service_name=(val)
          @service_name = val
        end

        def service_name
          return @service_name unless @service_name.nil?

          raise ArgumentError,
                "Must call `self.name=` on #{self.class.service_name}"
        end
      end

      def initialize(env, service_name = nil, options = {})
        @env = env
        @options = options
        @service_name = service_name || self.class.service_name
      end

      def host
        return '127.0.0.1' if %w[test development].include?(@env.environment)

        @service_name
      end

      def configured?
        port
        true
      rescue KeyError => e
        @error = e
        false
      end

      def port
        return @env.app_port if @service_name == 'app'

        service = @env.docker_compose_config
                      .fetch('services')
                      .fetch(@service_name)

        local, remote = parse_port(service)
        (@env.environment == 'production' ? remote : local).to_i
      end

      def parse_port(service)
        # Remove our sidecar variable for easier parsing
        # '{sidecar-27018:}27017' => '27018:27017'
        local, _, remote = service.fetch('ports')
                                  .first
                                  .sub(/\${sidecar-(\d+):}/, '\1:')
                                  .partition(':')
        [local, remote]
      end

      def yaml(content)
        # Whitelist `Symbol` and permit aliases:
        YAML.safe_load(content, [Symbol], [], true)
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
orchestration-0.4.20 lib/orchestration/services/mixins/configuration_base.rb
orchestration-0.4.19 lib/orchestration/services/mixins/configuration_base.rb
orchestration-0.4.18 lib/orchestration/services/mixins/configuration_base.rb
orchestration-0.4.17 lib/orchestration/services/mixins/configuration_base.rb
orchestration-0.4.16 lib/orchestration/services/mixins/configuration_base.rb
orchestration-0.4.15 lib/orchestration/services/mixins/configuration_base.rb
orchestration-0.4.14 lib/orchestration/services/mixins/configuration_base.rb