Sha256: 8b9772e6ea40c16e39b6d75f200cd81a9b2e324d75d6e2217f0f218514580243

Contents?: true

Size: 1.33 KB

Versions: 77

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

77 entries across 77 versions & 1 rubygems

Version Path
aws-sdk-core-3.201.1 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.201.0 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.200.0 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.199.0 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.198.0 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.197.2 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.197.1 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.197.0 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.194.1 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.194.0 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.193.0 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.192.1 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.192.0 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.191.6 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.191.5 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.191.4 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.191.3 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.191.2 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.191.1 lib/aws-sdk-core/endpoints/url.rb
aws-sdk-core-3.191.0 lib/aws-sdk-core/endpoints/url.rb