lib/tanker.rb in tanker-1.1.4 vs lib/tanker.rb in tanker-1.1.5
- old
+ new
@@ -59,11 +59,11 @@
options
end
records.first.class.tanker_index.add_documents(data)
end
- def search(models, query, options = {})
+ def search_results(models, query, options = {})
ids = []
models = [models].flatten.uniq
index = models.first.tanker_index
query = query.join(' ') if Array === query
snippets = options.delete(:snippets)
@@ -109,10 +109,45 @@
search_on_fields = models.map{|model| model.tanker_config.indexes.map{|arr| arr[0]}.uniq}.flatten.uniq.join(":(#{query.to_s}) OR ")
query = "(#{search_on_fields}:(#{query.to_s}) OR __any:(#{query.to_s})) __type:(#{models.map(&:name).map {|name| "\"#{name.split('::').join(' ')}\"" }.join(' OR ')})"
options = { :start => paginate[:per_page] * (paginate[:page] - 1), :len => paginate[:per_page] }.merge(options) if paginate
results = index.search(query, options)
+ SearchState.new(results, fetch, snippets, paginate)
+ end
+
+ class SearchState
+ def initialize(results, fetch, snippets, paginate)
+ @results = results
+ @fetch = fetch
+ @snippets = snippets
+ @paginate = paginate
+ end
+ def results
+ @results
+ end
+ def fetch
+ @fetch
+ end
+ def snippets
+ @snippets
+ end
+ def paginate
+ @paginate
+ end
+ end
+
+ def search(models, query, options = {})
+ search_state = search_results(models, query, options)
+ instantiate(search_state)
+ end
+
+ def instantiate(search_state)
+ results = search_state.results
+ fetch = search_state.fetch
+ snippets = search_state.snippets
+ paginate = search_state.paginate
+
categories = results['facets'] if results.has_key?('facets')
instantiated_results = if (fetch || snippets)
instantiate_results_from_results(results, fetch, snippets)
else
@@ -193,10 +228,10 @@
constant
end
def extract_setup_paginate_options(options, defaults)
# extract
- paginate_options = if options[:paginate] or options[:paginate] === false
+ paginate_options = if options[:paginate]
options.delete(:paginate)
else
{ :page => options.delete(:page), :per_page => options.delete(:per_page) }
end
# setup defaults and ensure we got integer values