# File lib/chef/solr_query/solr_http_request.rb, line 85 def self.escape(s) s.to_s.gsub(/([^ a-zA-Z0-9_.-]+)/) { '%'+$1.unpack('H2'*$1.size).join('%').upcase }.tr(' ', '+') end
# File lib/chef/solr_query/solr_http_request.rb, line 42 def self.http_client @http_client ||= begin uri = URI.parse(solr_url) http_client = Net::HTTP.new(uri.host, uri.port) http_client.use_ssl = true if uri.port == 443 http_client end end
# File lib/chef/solr_query/solr_http_request.rb, line 91 def initialize(method, url, headers=nil) args = headers ? [url, headers] : url @request = CLASS_FOR_METHOD[method].new(*args) yield @request if block_given? end
# File lib/chef/solr_query/solr_http_request.rb, line 62 def self.select(params={}) url = "#{url_prefix}/select?#{url_join(params)}" Chef::Log.debug("Sending #{url} to Solr") request = new(:GET, url) json_response = request.run("Search Query to Solr '#{solr_url}#{url}'") Chef::JSONCompat.from_json(json_response) end
# File lib/chef/solr_query/solr_http_request.rb, line 38 def self.solr_url @solr_url || Chef::Config[:solr_url] end
# File lib/chef/solr_query/solr_http_request.rb, line 32 def self.solr_url=(solr_url) @solr_url = solr_url @http_client = nil @url_prefix = nil end
# File lib/chef/solr_query/solr_http_request.rb, line 70 def self.update(doc) url = "#{url_prefix}/update" Chef::Log.debug("POSTing document to SOLR:\n#{doc}") request = new(:POST, url, TEXT_XML) { |req| req.body = doc.to_s } request.run("POST to Solr '#{solr_url}#{url}', data: #{doc}") end
# File lib/chef/solr_query/solr_http_request.rb, line 97 def http_client self.class.http_client end
# File lib/chef/solr_query/solr_http_request.rb, line 122 def request_failed!(response, description='HTTP call') Chef::Log.fatal("#{description} failed (#{response.class} #{response.code} #{response.message})") response.error! rescue Timeout::Error, Errno::EINVAL, EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError, Errno::ECONNREFUSED, Errno::ECONNRESET, Errno::ETIMEDOUT => e Chef::Log.debug(e.backtrace.join("\n")) raise Chef::Exceptions::SolrConnectionError, "#{e.class.name}: #{e.to_s}" end
# File lib/chef/solr_query/solr_http_request.rb, line 105 def run(description="HTTP Request to Solr") response = http_client.request(@request) request_failed!(response, description) unless response.kind_of?(Net::HTTPSuccess) response.body rescue NoMethodError => e # http://redmine.ruby-lang.org/issues/show/2708 # http://redmine.ruby-lang.org/issues/show/2758 if e.to_s =~ /#{Regexp.escape(%q|undefined method 'closed?' for nil:NilClass|)}/ Chef::Log.fatal("#{description} failed. Chef::Exceptions::SolrConnectionError exception: Errno::ECONNREFUSED (net/http undefined method closed?) attempting to contact #{solr_url}") Chef::Log.debug("Rescued error in http connect, treating it as Errno::ECONNREFUSED to hide bug in net/http") Chef::Log.debug(e.backtrace.join("\n")) raise Chef::Exceptions::SolrConnectionError, "Errno::ECONNREFUSED: Connection refused attempting to contact #{solr_url}" else raise end end
Generated with the Darkfish Rdoc Generator 2.