journalduhacker/app/controllers/users_controller.rb
2012-09-07 09:18:15 -05:00

37 lines
889 B
Ruby

class UsersController < ApplicationController
def show
@showing_user = User.find_by_username!(params[:id])
@title = "User #{@showing_user.username}"
end
def tree
@title = "Users"
parents = {}
karmas = {}
User.all.each do |u|
(parents[u.invited_by_user_id.to_i] ||= []).push u
end
Keystore.find(:all, :conditions => "`key` like 'user:%:karma'").each do |k|
karmas[k.key[/\d+/].to_i] = k.value
end
@tree = []
recursor = lambda{|user,level|
if user
@tree.push({ :level => level, :user_id => user.id,
:username => user.username, :karma => karmas[user.id].to_i })
end
# for each user that was invited by this one, recurse with it
(parents[user ? user.id : 0] || []).each do |child|
recursor.call(child, level + 1)
end
}
recursor.call(nil, 0)
@tree
end
end