Sha256: 85d43764dd812b6e723e3310e583332a91ba339631c24b501ff8e169c970f6a4

Contents?: true

Size: 1.95 KB

Versions: 5

Compression:

Stored size: 1.95 KB

Contents

# typed: strict

module Kuby
  module Docker
    class DockerURI
      # extend T::Sig

      DEFAULT_REGISTRY_HOST = 'docker.io'.freeze
      DEFAULT_REGISTRY_INDEX_HOST = 'index.docker.io'.freeze
      DEFAULT_PORT = 443

      # T::Sig::WithoutRuntime.sig { params(url: String).returns(DockerURI) }
      def self.parse_uri(url)
        parse(
          url,
          default_host: DEFAULT_REGISTRY_HOST,
          default_port: DEFAULT_PORT
        )
      end

      # T::Sig::WithoutRuntime.sig { params(url: String).returns(DockerURI) }
      def self.parse_index_uri(url)
        parse(
          url,
          default_host: DEFAULT_REGISTRY_INDEX_HOST,
          default_port: DEFAULT_PORT
        )
      end

      # T::Sig::WithoutRuntime.sig {
      #   params(
      #     url: String,
      #     default_host: T.nilable(String),
      #     default_port: T.nilable(Integer)
      #   ).returns(DockerURI)
      # }
      def self.parse(url, default_host:, default_port:)
        if idx = url.index('://')
          url = url[(idx + 3)..-1] || ''
        end

        host_port, *path = url.split('/')
        host, port, *path = if host_port =~ /[.:]/
          hst, prt = host_port.split(':')
          [hst, prt || default_port, *path]
        else
          [default_host, default_port, host_port, *path]
        end

        new(host.to_s, port.to_i, (path || []).join('/'))
      end

      # T::Sig::WithoutRuntime.sig { returns(String) }
      attr_reader :host

      # T::Sig::WithoutRuntime.sig { returns(Integer) }
      attr_reader :port

      # T::Sig::WithoutRuntime.sig { returns(String) }
      attr_reader :path

      # T::Sig::WithoutRuntime.sig { params(host: String, port: Integer, path: String).void }
      def initialize(host, port, path)
        @host = host
        @port = port
        @path = path
      end

      # T::Sig::WithoutRuntime.sig { returns(T::Boolean) }
      def has_default_port?
        port == DEFAULT_PORT
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
kuby-core-0.20.2 lib/kuby/docker/docker_uri.rb
kuby-core-0.20.1 lib/kuby/docker/docker_uri.rb
kuby-core-0.20.0 lib/kuby/docker/docker_uri.rb
kuby-core-0.19.0 lib/kuby/docker/docker_uri.rb
kuby-core-0.18.0 lib/kuby/docker/docker_uri.rb