class Samer::Engine

Attributes

users[R]

Public Class Methods

new(users) click to toggle source
# File lib/samer/engine.rb, line 6
def initialize users
  @users = users
end

Public Instance Methods

find_for(name) click to toggle source
# File lib/samer/engine.rb, line 10
def find_for name
  @name = name
  @similars = {}

  return "User @#{name} is not present in example users list. See it in lib/data/users.yml" unless current_user

  @users.each do |user|
    next if user.name == current_user.name
    @similars[user.name] = distance(current_user, user)
  end

  @similars
  # similar
end

Private Instance Methods

current_user() click to toggle source
# File lib/samer/engine.rb, line 39
def current_user
  @current_user ||= @users.find{ |user| user.name == @name }
end
distance(current_user, user) click to toggle source
# File lib/samer/engine.rb, line 28
def distance current_user, user
  distances = []

  current_user.genres.keys.each do |genre|
    next unless user.genres[genre]
    distances.push (current_user.genres[genre] - user.genres[genre]) ** 2
  end

  1.fdiv 1 + Math.sqrt(distances.inject(0){ |sum, score| sum + score })
end
similar() click to toggle source
# File lib/samer/engine.rb, line 43
def similar
  @similars.max_by{ |_, score| score }
end