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)
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