Sha256: 6e817b2c14092f8bf871d15a9f75dbae9eb63602c84887e058a2b107a6b8bd0c

Contents?: true

Size: 1.33 KB

Versions: 9

Compression:

Stored size: 1.33 KB

Contents

# frozen_string_literal: true

require 'ipaddr'

module Aws
  module Endpoints
    # @api private
    class URL
      def initialize(url)
        uri = URI(url)
        @scheme = uri.scheme
        # only support http and https schemes
        raise ArgumentError unless %w[https http].include?(@scheme)

        # do not support query
        raise ArgumentError if uri.query

        @authority = _authority(url, uri)
        @path = uri.path
        @normalized_path = uri.path + (uri.path[-1] == '/' ? '' : '/')
        @is_ip = _is_ip(uri.host)
      end

      attr_reader :scheme
      attr_reader :authority
      attr_reader :path
      attr_reader :normalized_path
      attr_reader :is_ip

      def as_json(_options = {})
        {
          'scheme' => scheme,
          'authority' => authority,
          'path' => path,
          'normalizedPath' => normalized_path,
          'isIp' => is_ip
        }
      end

      private

      def _authority(url, uri)
        # don't include port if it's default and not parsed originally
        if uri.default_port == uri.port && !url.include?(":#{uri.port}")
          uri.host
        else
          "#{uri.host}:#{uri.port}"
        end
      end

      def _is_ip(authority)
        IPAddr.new(authority)
        true
      rescue IPAddr::InvalidAddressError
        false
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
aws-sdk-core-3.168.4 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.168.3 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.168.2 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.168.1 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.168.0 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.167.0 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.166.0 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.165.1 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.165.0 lib/aws-sdk-core/endpoints/url.rb