Class: Workarea::Recommendation::UserActivityBased

Inherits:
Object
  • Object
show all
Defined in:
app/queries/workarea/recommendation/user_activity_based.rb

Instance Method Summary collapse

Constructor Details

#initialize(user_activity) ⇒ UserActivityBased

Returns a new instance of UserActivityBased.



4
5
6
# File 'app/queries/workarea/recommendation/user_activity_based.rb', line 4

def initialize(user_activity)
  @user_activity = user_activity
end

Instance Method Details

#max_resultsObject



16
17
18
19
# File 'app/queries/workarea/recommendation/user_activity_based.rb', line 16

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


21
22
23
24
25
26
27
# File 'app/queries/workarea/recommendation/user_activity_based.rb', line 21

def popular_product_ids
  Insights::TopProducts
    .current
    .results
    .map { |r| r['product_id'] }
    .take(max_results)
end


29
30
31
32
33
34
35
36
37
# File 'app/queries/workarea/recommendation/user_activity_based.rb', line 29

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

  query.results.map { |r| r[:catalog_id] }
end

#resultsObject



8
9
10
11
12
13
14
# File 'app/queries/workarea/recommendation/user_activity_based.rb', line 8

def results
  if @user_activity.product_ids.blank? && @user_activity.category_ids.blank?
    popular_product_ids.take(max_results)
  else
    related_product_ids.take(max_results)
  end
end