module RSolr::Uri

def self.create url

def self.create url
  ::URI.parse url[-1] == ?/ ? url : "#{url}/"
end

def build_param(k,v)

Both key and value are escaped.
Returns a query string param pair as a string.
def build_param(k,v)
  "#{escape_query_value(k)}=#{escape_query_value(v)}"
end

def bytesize(string)

def bytesize(string)
  string.bytesize
end

def bytesize(string)

def bytesize(string)
  string.size
end

def escape_query_value(s)

(Stolen from Rack).
version since it's faster.
query strings faster. Use this rather than the cgi.rb
Performs URI escaping so that you can construct proper
def escape_query_value(s)
  s.to_s.gsub(/([^ a-zA-Z0-9_.-]+)/n) {
    #'%'+$1.unpack('H2'*$1.size).join('%').upcase
    '%'+$1.unpack('H2'*bytesize($1)).join('%').upcase
  }.tr(' ', '+')
end

def params_to_solr(params)

?q=query&fq=a&fq=b
is converted to:
params_to_solr(:q => 'query', :fq => ['a', 'b'])
Keys that have arrays values are set multiple times:
Creates a Solr based query string.
def params_to_solr(params)
  mapped = params.map do |k, v|
    next if v.to_s.empty?
    if v.class == Array
      params_to_solr(v.map { |x| [k, x] })
    else
      build_param k, v
    end
  end
  mapped.compact.join("&")
end