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