module Chewy::Search::ClassMethods
Public Instance Methods
all()
click to toggle source
This is the entry point for the request composition, however, most of the {Chewy::Search::Request} methods are delegated directly as well.
This method also provides an ability to use names scopes.
@example
PlacesIndex.all.limit(10) # is basically the same as: PlacesIndex.limit(10)
@see Chewy::Search::Request
@see Chewy::Search::Scoping
@return [Chewy::Search::Request] request instance
# File lib/chewy/search.rb, line 42 def all search_class.scopes.last || search_class.new(self) end
method_missing(name, *args, &block)
click to toggle source
Delegates methods from the request class to the index class
@example
PlacesIndex.query(match: {name: 'Moscow'})
Calls superclass method
# File lib/chewy/search.rb, line 59 def method_missing(name, *args, &block) if search_class::DELEGATED_METHODS.include?(name) all.send(name, *args, &block) else super end end
respond_to_missing?(name, _)
click to toggle source
Calls superclass method
# File lib/chewy/search.rb, line 67 def respond_to_missing?(name, _) search_class::DELEGATED_METHODS.include?(name) || super end
search_string(query, options = {})
click to toggle source
A simple way to execute search string query.
@see www.elastic.co/guide/en/elasticsearch/reference/current/search-uri-request.html @return [Hash] the request result
# File lib/chewy/search.rb, line 50 def search_string(query, options = {}) options = options.merge(all.render.slice(:index).merge(q: query)) Chewy.client.search(options) end
Private Instance Methods
build_search_class(base)
click to toggle source
# File lib/chewy/search.rb, line 77 def build_search_class(base) search_class = Class.new(base) delegate_scoped self, search_class, scopes const_set('Query', search_class) end
delegate_scoped(source, destination, methods)
click to toggle source
# File lib/chewy/search.rb, line 84 def delegate_scoped(source, destination, methods) methods.each do |method| destination.class_eval do define_method method do |*args, &block| scoping { source.public_send(method, *args, &block) } end end end end
search_class()
click to toggle source
# File lib/chewy/search.rb, line 73 def search_class @search_class ||= build_search_class(Chewy.search_class) end