module RSolr::Error::SolrContext

def parse_solr_error_response body

def parse_solr_error_response body
  begin
    if body =~ /<pre>/
      info = body.scan(/<pre>(.*)<\/pre>/mi)[0]
    elsif body =~ /'msg'=>/
      info = body.scan(/'msg'=>(.*)/)[0]
    end
    info = info.join if info.respond_to? :join
    info ||= body  # body might not contain <pre> or msg elements
    partial = info.to_s.split("\n")[0..10]
    partial.join("\n").gsub("&gt;", ">").gsub("&lt;", "<")
  rescue
    nil
  end
end

def to_s

def to_s
  m = "#{super.to_s}"
  if response
    m << " - #{response[:status]} #{Http::STATUS_CODES[response[:status].to_i]}"
    details = parse_solr_error_response response[:body]
    m << "\nError: #{details}\n" if details
  end
  p = "\nURI: #{request[:uri].to_s}"
  p << "\nRequest Headers: #{request[:headers].inspect}" if request[:headers]
  p << "\nRequest Data: #{request[:data].inspect}" if request[:data]
  p << "\n"
  p << "\nBacktrace: " + self.backtrace[0..10].join("\n")
  m << p
  m
end