Module: SimplySuggest::ControllerHelper

Extended by:
ActiveSupport::Concern
Defined in:
lib/simply_suggest/controller_helper.rb

Instance Method Summary collapse

Instance Method Details

returns trending data for the object type

klass : string options : hash [optional]



46
47
48
49
50
51
52
53
# File 'lib/simply_suggest/controller_helper.rb', line 46

def get_trending_objects klass, options = {}
  options = options.reverse_merge(default_options)

  data = request_object.object_type.trending.send(klass).page(page).limit(limit).get
  return [] if data["trending"].blank?
  return klass.classify.constantize.where(id: data["trending"].map { |d| d["external_id"] }) if options[:load]
  data["trending"].map { |d| { type: d["object_type"], id: d["external_id"] } }
end

#recommendations_for(item, options = {}) ⇒ Object

returns recommendations for the item

item : object options : hash [optional]



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/simply_suggest/controller_helper.rb', line 10

def recommendations_for item, options = {}
  options = options.reverse_merge(default_options)

  klass     = item.is_a?(Hash) ? item.delete(:class) : item.class.to_s.downcase
  object_id = item.is_a?(Hash) ? item.delete(:object_id) : item.id

  data = request_object.object_types.send(klass).object.recommendations.page(options[:page]).limit(options[:limit]).get(object_id)
  return [] if data["recommendations"].blank?
  ids = data["recommendations"].map { |d| d["recommendation_id"] }
  return item.class.where(id: ids) if options[:load]
  ids
end

#search_objects(query, klass, options = {}) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/simply_suggest/controller_helper.rb', line 55

def search_objects query, klass, options = {}
  options = options.reverse_merge(default_options)

  request = request_object.object_type.search.send(klass).page(options[:page]).limit(options[:limit]).add_params(query: query)
  request.add_param(:conditions, options[:conditions]) if options[:conditions].present?
  request.add_param(:facets, options[:facets]) if options[:facets].present?

  data = request.get
  return [] if data["objects"].blank?
  if options[:load]
    values = {}
    values[:results]    = data["objects"].map { |d| d["object_type"].classify.constantize.where(id: d["external_id"]).first }.reject(&:nil?)
    values[:facets]     = data["facets"]
    values[:conditions] = data["conditions"]

    return values
  end

  data
end

#user_recommendations(user_id, options = {}) ⇒ Object

returns recommendations for the user_id

user_id : integer options : hash [optional]



28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/simply_suggest/controller_helper.rb', line 28

def user_recommendations user_id, options = {}
  options = options.reverse_merge(default_options)

  if options[:object_type].present?
    data = request_object.user.send(options[:object_type]).recommendations.page(options[:page]).limit(options[:limit]).get(user_id)
  else
    data = request_object.user.recommendations.page(page).limit(limit).get(user_id)
  end
  return [] if data["recommendations"].blank?
  return data["recommendations"].map { |d| d["object_type"].classify.constantize.where(id: d["recommendation_id"]).first }.reject(&:nil?) if options[:load]
  data["recommendations"].map { |d| { type: d["object_type"], id: d["recommendation_id"] } }
end