class Trenni::URI

def append(buffer)

def append(buffer)
	if @query_string
		buffer << escape_path(@path) << '?' << query_string
		buffer << '&' << query_parameters if @parameters
	else
		buffer << escape_path(@path)
		buffer << '?' << query_parameters if @parameters
	end
	
	if @fragment
		buffer << '#' << escape(@fragment)
	end
	
	return buffer
end

def escape(string)

Escapes a generic string, using percent encoding.
def escape(string)
	encoding = string.encoding
	string.b.gsub(/([^a-zA-Z0-9_.\-]+)/) do |m|
		'%' + m.unpack('H2' * m.bytesize).join('%').upcase
	end.force_encoding(encoding)
end

def escape_path(path)

def escape_path(path)
	encoding = path.encoding
	path.b.gsub(NON_PCHAR) do |m|
		'%' + m.unpack('H2' * m.bytesize).join('%').upcase
	end.tr(' ', '+').force_encoding(encoding)
end

def initialize(path, query_string, fragment, parameters)

def initialize(path, query_string, fragment, parameters)
	@path = path
	@query_string = query_string
	@fragment = fragment
	@parameters = parameters
end

def query_parameters

def query_parameters
	@parameters.map{|k,v| "#{escape(k.to_s)}=#{escape(v.to_s)}"}.join('&')
end

def to_str

def to_str
	append(String.new)
end