export_ranking.rb 1.39 KB
# encoding: UTF-8

require 'csv'
CSV.open( "ranking_gamification.csv", 'w' ) do |csv|
  categories = [:article_author, :comment_author, :comment_article_author, :vote_voteable_author, :vote_voter]
  categories_labels = ['autor do artigo', 'autor do comentário', 'comentário recebido no meu artigo', 'voto em meu conteúdo', 'voto realizado']
  quantities_labels = ['quantidade de votos realizados', 'quantidade de amigos', 'votos positivos recebidos', 'votos negativos recebidos', 'quantidade de artigos', 'quantidade de comentários realizados', 'quantidade de comentários recebidos']

  csv << ['identifier', 'name', 'score'] + categories_labels + quantities_labels
  Person.find_each do |person|
    categories_values = categories.map {|c| person.score_points(category: c).sum(:num_points)}
    person_articles = Article.where(:author_id => person.id)

    quantities_values = [
      Vote.for_voter(person).count,
      person.friends.count,
      person.comments.joins(:votes).where('vote > 0').count + person_articles.joins(:votes).where('vote > 0').count,
      person.comments.joins(:votes).where('vote < 0').count + person_articles.joins(:votes).where('vote < 0').count,
      person_articles.text_articles.count,
      person.comments.count,
      Comment.where(:source_id => person_articles).count
    ]
    csv << [person.identifier, person.name, person.points] + categories_values + quantities_values
  end
end