class Solr4R::Query
Constants
- LOCAL_PARAMS_KEY
Attributes
escape[W]
query[R]
Public Class Methods
convert_value(value, escape = true)
click to toggle source
# File lib/solr4r/query.rb 52 def convert_value(value, escape = true) 53 case value 54 when DateTime 55 convert_value(value.to_time, escape) 56 when Time 57 value.getutc.xmlschema.tap { |string| 58 string.gsub!(/:/, '\\\\\&') if escape } 59 when Range 60 '[' << [value.begin, value.end].map { |v| 61 convert_value(v, false) }.join(' TO ') << ']' 62 else 63 value.to_s 64 end 65 end
escape(string, escape = true)
click to toggle source
# File lib/solr4r/query.rb 44 def escape(string, escape = true) 45 escape ? string.gsub('&', '%26') : string 46 end
local_params_string(*args)
click to toggle source
# File lib/solr4r/query.rb 40 def local_params_string(*args) 41 new.local_params_string(*args) 42 end
new(query = '', escape = true)
click to toggle source
# File lib/solr4r/query.rb 69 def initialize(query = '', escape = true) 70 @query, @escape = query, escape 71 end
query_string(*args)
click to toggle source
# File lib/solr4r/query.rb 36 def query_string(*args) 37 new(*args).to_s 38 end
quote(string)
click to toggle source
# File lib/solr4r/query.rb 48 def quote(string) 49 string =~ /\s/ ? %Q{"#{string}"} : string 50 end
Public Instance Methods
convert_value(*args)
click to toggle source
# File lib/solr4r/query.rb 89 def convert_value(*args) 90 self.class.convert_value(*args) 91 end
escape(string, escape = escape?)
click to toggle source
# File lib/solr4r/query.rb 81 def escape(string, escape = escape?) 82 self.class.escape(string, escape) 83 end
escape?()
click to toggle source
# File lib/solr4r/query.rb 77 def escape? 78 @escape 79 end
local_params_string(local_params, hash = {}, escape = escape?)
click to toggle source
# File lib/solr4r/query.rb 119 def local_params_string(local_params, hash = {}, escape = escape?) 120 case local_params = expand_local_params(local_params, hash) 121 when nil 122 # ignore 123 when String 124 escape("{!#{local_params}}", escape) unless local_params.empty? 125 when Array 126 local_params_string(local_params.join(' '), {}, escape) 127 when Hash 128 local_params_string(local_params.map { |key, value| 129 "#{key}=#{quote(value)}" }, {}, escape) 130 else 131 type_error(local_params) 132 end 133 end
query_string(query = query(), escape = escape?)
click to toggle source
# File lib/solr4r/query.rb 97 def query_string(query = query(), escape = escape?) 98 case query 99 when nil 100 # ignore 101 when String 102 escape(query, escape) unless query.empty? 103 when Array 104 if query.last.is_a?(Hash) 105 query = query.dup 106 107 local_params, query_string = query_from_hash(query.pop, escape) 108 query << query_string if query_string 109 end 110 111 query_with_params(local_params, query_from_array(query, escape)) 112 when Hash 113 query_with_params(*query_from_hash(query, escape)) 114 else 115 type_error(query) 116 end 117 end
quote(string)
click to toggle source
# File lib/solr4r/query.rb 85 def quote(string) 86 self.class.quote(string) 87 end
to_s(escape = escape?)
click to toggle source
# File lib/solr4r/query.rb 93 def to_s(escape = escape?) 94 query_string(query, escape) 95 end
Private Instance Methods
expand_local_params(local_params, hash)
click to toggle source
# File lib/solr4r/query.rb 160 def expand_local_params(local_params, hash) 161 case type = hash[:type] 162 when nil 163 local_params 164 when String, Symbol 165 type_error(local_params) unless local_params.is_a?(Array) 166 167 hash = hash.dup 168 local_params.each { |param| hash[param] = "$#{type}.#{param}" } 169 hash 170 else 171 type_error(type) 172 end 173 end
query_from_array(query, escape)
click to toggle source
# File lib/solr4r/query.rb 137 def query_from_array(query, escape) 138 query_string(query.map { |value| convert_value(value) }.join(' '), escape) 139 end
query_from_hash(query, escape)
click to toggle source
# File lib/solr4r/query.rb 141 def query_from_hash(query, escape) 142 if query.key?(LOCAL_PARAMS_KEY) 143 query = query.dup 144 145 local_params = local_params_string( 146 query.delete(LOCAL_PARAMS_KEY), {}, escape) 147 end 148 149 query = query.flat_map { |key, values| 150 block = lambda { |value| "#{key}:#{convert_value(value)}" } 151 values.respond_to?(:to_ary) ? values.map(&block) : block[values] } 152 153 [local_params, query_string(query, escape)] 154 end
query_with_params(local_params, query_string)
click to toggle source
# File lib/solr4r/query.rb 156 def query_with_params(local_params, query_string) 157 local_params ? local_params + query_string : query_string 158 end
type_error(obj)
click to toggle source
# File lib/solr4r/query.rb 175 def type_error(obj) 176 raise TypeError, "unexpected type #{obj.class}", caller(1) 177 end