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