Module: Co2Filter

Defined in:
lib/co2_filter.rb,
lib/co2_filter/version.rb

Defined Under Namespace

Modules: Collaborative, ContentBased Classes: HashWrapper, RatingSet, Results

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.content_boosted_collaborative_filter(current_user: nil, other_users: nil, items: nil) ⇒ Object

Raises:

  • (ArgumentError)


23
24
25
26
27
28
29
30
31
# File 'lib/co2_filter.rb', line 23

def self.content_boosted_collaborative_filter(current_user: nil, other_users: nil, items: nil)
  raise ArgumentError.new("A 'current_user' argument must be provided.") unless current_user
  raise ArgumentError.new("An 'other_users' argument must be provided.") unless other_users
  raise ArgumentError.new("An 'items' argument must be provided.") unless items

  content_boosted_users = ContentBased.boost_ratings(users: other_users, items: items)
  results = Collaborative.filter(current_user: current_user, other_users: content_boosted_users)
  Results.new(results)
end

.filter(current_user: nil, other_users: nil, items: nil, user_profile: nil, content_based_results: nil) ⇒ Object

Raises:

  • (ArgumentError)


2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/co2_filter.rb', line 2

def self.filter(current_user: nil, other_users: nil, items: nil, user_profile: nil, content_based_results: nil)
  raise ArgumentError.new("A 'current_user' argument must be provided.") unless current_user
  raise ArgumentError.new("An 'other_users' argument must be provided.") unless other_users
  raise ArgumentError.new("An 'items' or 'content_based_results' argument must be provided.") unless items || content_based_results

  collab = Collaborative.filter(current_user: current_user, other_users: other_users)
  
  if content_based_results && content_based_results.is_a?(Results)
    content = content_based_results
  elsif .is_a? ContentBased::UserProfile
    content = ContentBased.filter(user: , items: items)
  else
    content = ContentBased.filter(user: current_user, items: items)
  end

  hybrid = collab.merge(content) do |k, val1, val2|
    (val1 + val2) / 2.0
  end
  Results.new(hybrid)
end