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