Sha256: 65dc03c6ce2ba76c1148e2913f691b5f9036a67a00eefc546a8b153c18ce0fbf

Contents?: true

Size: 1.34 KB

Versions: 62

Compression:

Stored size: 1.34 KB

Contents

module Workarea
  module Search
    class StorefrontSearch
      class ProductMultipass
        include Middleware

        def last_pass?
          params[:pass] == ProductSearch::PASSES.last
        end

        def next_pass
          if params[:pass].blank?
            ProductSearch::PASSES.second
          else
            ProductSearch::PASSES.last
          end
        end

        def call(response, &traverse_chain)
          current_pass = response.query.response

          if sufficient_results?(current_pass)
            yield
          else
            pass_params = params.merge(pass: next_pass)
            new_pass = self.class.new(pass_params, customization)

            response.reset!(pass_params, by: self)
            new_pass.call(response, &traverse_chain)
          end
        end

        private

        def sufficient_results?(current_pass)
          valid_suggestion_from?(current_pass) ||
            last_pass? ||
              current_pass['hits']['total'] >=
                Workarea.config.search_sufficient_results
        end

        def valid_suggestion_from?(product_response)
          product_response['suggest'].present? &&
            product_response['suggest']['spelling_correction'].present? &&
            product_response['suggest']['spelling_correction'].first['options'].any?
        end
      end
    end
  end
end

Version data entries

62 entries across 62 versions & 1 rubygems

Version Path
workarea-core-3.5.27 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.5.26 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.45 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.5.25 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.5.23 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.44 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.5.22 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.43 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.5.21 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.42 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.5.20 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.41 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.5.19 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.40 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.5.18 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.39 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.5.17 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.38 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.5.16 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.37 app/queries/workarea/search/storefront_search/product_multipass.rb