Skip to content

Instantly share code, notes, and snippets.

@jniechcial
Last active April 4, 2017 06:43
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save jniechcial/3995cb8584502f580ae41be556e0932c to your computer and use it in GitHub Desktop.
require 'csv'
class SaveToCsv
def initialize filename
@filename = filename
end
def call
save_to_file
end
private
def save_to_file
CSV.open(@filename, "wb") do |csv|
csv << ["user_id", "user_name"] + write_skills
User.all.technical.active.each do |user|
puts "Processing #{user.first_name} #{user.last_name}..."
columns = [user.id, "#{user.first_name} #{user.last_name}"]
rates = skill_rates(user)
skills.each do |skill|
skill_rate = rates.select { |skill_rate| skill_rate[:skill_id] == skill.id }
.map { |skill_rate| skill_rate[:content] ? skill_rate[:content].rate : 0 }
if skill_rate.length
columns << (skill_rate.first == 1 ? 0 : skill_rate.first)
else
columns << "0"
end
end
columns << '\n'
csv << columns
end
end
end
def write_skills
skills.map { |skill| skill.name }
end
def skill_rates(user)
UserSkillRate.where(user: user).includes(:contents).map do |skill_rate|
{ skill_id: skill_rate.skill_id, content: skill_rate.contents.last }
end
end
def skills
@skills ||= Skill.where(rate_type: 'range').to_a
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment