Module: RSolr::Connection::Utils
Overview
Helpful utility methods for building queries to a Solr server
Instance Method Summary collapse
-
#build_param(k, v) ⇒ Object
converts a key value pair to an escaped string: Example: build_param(:id, 1) == “id=1”.
-
#build_url(url = '', params = {}, string_query = '') ⇒ Object
creates and returns a url as a string “url” is the base url “params” is an optional hash of GET style query params “string_query” is an extra query string that will be appended to the result of “url” and “params”.
- #bytesize(string) ⇒ Object
-
#escape(s) ⇒ Object
Performs URI escaping so that you can construct proper query strings faster.
-
#hash_to_query(params) ⇒ Object
converts hash into URL query string, keys get an alpha sort if a value is an array, the array values get mapped to the same key: hash_to_query(:q=>‘blah’, :fq=>[‘blah’, ‘blah’], :facet=>‘format_facet’]) returns: ?q=blah&fq=blah&fq=blah&facet.field=location_facet&facet.field=format.facet.
Instance Method Details
#build_param(k, v) ⇒ Object
converts a key value pair to an escaped string: Example: build_param(:id, 1) == “id=1”
46 47 48 |
# File 'lib/rsolr/connection.rb', line 46 def build_param(k,v) "#{escape(k)}=#{escape(v)}" end |
#build_url(url = '', params = {}, string_query = '') ⇒ Object
creates and returns a url as a string “url” is the base url “params” is an optional hash of GET style query params “string_query” is an extra query string that will be appended to the result of “url” and “params”.
36 37 38 39 40 41 |
# File 'lib/rsolr/connection.rb', line 36 def build_url url='', params={}, string_query='' queries = [string_query, hash_to_query(params)] queries.delete_if{|i| i.to_s.empty?} url += "?#{queries.join('&')}" unless queries.empty? url end |
#bytesize(string) ⇒ Object
22 23 24 |
# File 'lib/rsolr/connection.rb', line 22 def bytesize(string) string.bytesize end |
#escape(s) ⇒ Object
Performs URI escaping so that you can construct proper query strings faster. Use this rather than the cgi.rb version since it’s faster. (Stolen from Rack).
12 13 14 15 16 17 |
# File 'lib/rsolr/connection.rb', line 12 def escape(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 |
#hash_to_query(params) ⇒ Object
converts hash into URL query string, keys get an alpha sort if a value is an array, the array values get mapped to the same key:
hash_to_query(:q=>'blah', :fq=>['blah', 'blah'], :facet=>{:field=>['location_facet', 'format_facet']})
returns:
?q=blah&fq=blah&fq=blah&facet.field=location_facet&facet.field=format.facet
if a value is empty/nil etc., it is not added
58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/rsolr/connection.rb', line 58 def hash_to_query(params) mapped = params.map do |k, v| next if v.to_s.empty? if v.class == Array hash_to_query(v.map { |x| [k, x] }) else build_param k, v end end mapped.compact.join("&") end |