Sha256: 0c34d406be7d5d899506e634ef44ce4f5c2c7ff64826ec0fcd65e127f785e674

Contents?: true

Size: 987 Bytes

Versions: 3

Compression:

Stored size: 987 Bytes

Contents

# frozen_string_literal: true

module Aitch
  class URI
    extend Forwardable

    def_delegators :@uri, :host, :port, :scheme

    def initialize(url, data = {}, request_has_body = false) # rubocop:disable Style/OptionalBooleanParameter
      @url = url
      @data = data
      @request_has_body = request_has_body

      begin
        @uri = ::URI.parse(url)
      rescue ::URI::InvalidURIError => error
        raise InvalidURIError, error
      end
    end

    def request_has_body?
      @request_has_body
    end

    def path
      File.join("/", @uri.path)
    end

    def request_uri
      [path, query, fragment].compact.join
    end

    def fragment
      "##{@uri.fragment}" if @uri.fragment
    end

    def query
      query = [@uri.query]
      if !request_has_body? && @data.respond_to?(:to_a)
        query << ::URI.encode_www_form(@data.to_a)
      end
      query = query.compact.reject(&:empty?).join("&")

      "?#{query}" unless query == ""
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
aitch-2.0.0 lib/aitch/uri.rb
aitch-1.2.2 lib/aitch/uri.rb
aitch-1.2.1 lib/aitch/uri.rb