# File lib/tire/suggest.rb, line 9 def initialize(indices=nil, options={}, &block) if indices.is_a?(Hash) @indices = indices.keys else @indices = Array(indices) end #TODO no options for now @options = options @path = ['/', @indices.join(','), '_suggest'].compact.join('/').squeeze('/') block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given? end
# File lib/tire/suggest.rb, line 42 def json @json || (perform; @json) end
# File lib/tire/suggest.rb, line 84 def logged(endpoint='_search') if Configuration.logger Configuration.logger.log_request endpoint, indices, to_curl took = @json['took'] rescue nil code = @response.code rescue nil if Configuration.logger.level.to_s == 'debug' body = if @json MultiJson.encode( @json, :pretty => Configuration.pretty) else MultiJson.encode( MultiJson.load(@response.body), :pretty => Configuration.pretty) rescue '' end else body = '' end Configuration.logger.log_response code || 'N/A', took || 'N/A', body || 'N/A' end end
# File lib/tire/suggest.rb, line 29 def multi(&block) @suggestion = MultiSuggestion.new(&block) self end
# File lib/tire/suggest.rb, line 50 def params options = @options.except(:wrapper, :payload, :load) options.empty? ? '' : '?' + options.to_param end
# File lib/tire/suggest.rb, line 55 def perform @response = Configuration.client.get(self.url + self.params, self.to_json) if @response.failure? STDERR.puts "[REQUEST FAILED] #{self.to_curl}\n" raise Tire::Search::SearchRequestFailed, @response.to_s end @json = MultiJson.decode(@response.body) @results = Results::Suggestions.new(@json, @options) return self ensure logged end
# File lib/tire/suggest.rb, line 38 def response @response || (perform; @response) end
# File lib/tire/suggest.rb, line 34 def results @results || (perform; @results) end
# File lib/tire/suggest.rb, line 68 def to_curl to_json_escaped = to_json.gsub("'",'\u0027') %Qcurl -X GET '#{url}#{params.empty? ? '?' : params.to_s + '&'}pretty' -d '#{to_json_escaped}'| end
# File lib/tire/suggest.rb, line 73 def to_hash request = {} request.update( @suggestion.to_hash ) request end
# File lib/tire/suggest.rb, line 79 def to_json(options={}) payload = to_hash MultiJson.encode(payload, :pretty => Configuration.pretty) end
# File lib/tire/suggest.rb, line 46 def url Configuration.url + @path end