Sha256: 350f4f215cac50ba0450858efb7d472e4c93ba8151c648d3dbc143c7ea3692b2

Contents?: true

Size: 1.13 KB

Versions: 62

Compression:

Stored size: 1.13 KB

Contents

module Workarea
  module Recommendation
    class OrderBased
      def initialize(order)
        @order = order
      end

      def results
        @results ||=
          begin
            result = prediction_product_ids
            return result if result.size == max_results
            (result + related_product_ids).uniq.take(max_results)
          end
      end

      def related_product_ids
        query = Workarea::Search::RelatedProducts.new(
          product_ids: order_product_ids,
          category_ids: order_category_ids,
          exclude_product_ids: order_product_ids
        )

        query.results.map { |r| r[:catalog_id] }.first(max_results)
      end

      def prediction_product_ids
        ProductPredictor.new.predictions_for(
          item_set: order_product_ids,
          limit: max_results
        )
      end

      def order_product_ids
        @order.items.map(&:product_id)
      end

      def order_category_ids
        @order.items.map(&:category_ids).flatten
      end

      def max_results
        # accommodate some missing or undisplayable products
        Workarea.config.per_page
      end
    end
  end
end

Version data entries

62 entries across 62 versions & 1 rubygems

Version Path
workarea-core-3.4.13 app/queries/workarea/recommendation/order_based.rb
workarea-core-3.4.12 app/queries/workarea/recommendation/order_based.rb