def to_s
      str = ''
      if @scheme
        str << @scheme
        str << ':'.freeze
      end

      if @opaque
        str << @opaque
      else
        if @host
          str << '//'.freeze
        end
        if self.userinfo
          str << self.userinfo
          str << '@'.freeze
        end
        if @host
          str << @host
        end
        if @port && @port != self.default_port
          str << ':'.freeze
          str << @port.to_s
        end
        str << @path
        if query
          str << '?'.freeze
          str << query
        end
      end
      if @fragment
        str << '#'.freeze
        str << @fragment
      end
      str
    end
def to_s
      str = ''
      if @scheme
        str << @scheme
        str << ':'.freeze
      end

      if @opaque
        str << @opaque
      else
        if @host
          str << '//'.freeze
        end
        if self.userinfo
          str << self.userinfo
          str << '@'.freeze
        end
        if @host
          str << @host
        end
        if @port && @port != self.default_port
          str << ':'.freeze
          str << @port.to_s
        end
        str << @path
        if query
          str << '?'.freeze
          str << query
        end
      end
      if @fragment
        str << '#'.freeze
        str << @fragment
      end
      str
    end
Constructs String from URI

 @note
   This is the `URI::Generic#to_s` method from Ruby 2.2.0, with the minor
   modification of calling the `query` method overrode by
   {URI::QueryParams::Mixin}, instead of `@query`.

 @see https://github.com/ruby/ruby/blob/v2_2_0/lib/uri/generic.rb#L1338-L1376