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.4.27 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.5.4 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.26 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.5.3 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.25 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.5.2 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.24 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.5.1 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.23 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.22 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.5.0 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.21 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.5.0.beta.1 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.20 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.19 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.18 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.17 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.16 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.15 app/queries/workarea/search/storefront_search/product_multipass.rb
workarea-core-3.4.14 app/queries/workarea/search/storefront_search/product_multipass.rb