YaleSTC/shifts

View on GitHub
lib/tasks/repair_profiles.rake

Summary

Maintainability
Test Coverage
namespace :db do
  def make_empty_profile_entries(department_name)
    department = Department.where(name: department_name).first
    users = User.all.select{|u| u.departments.include?(department)}
    all_field_ids = UserProfileField.all.select{|upf| upf.department_id == department.id}.map{|upf| upf.id}
    users.each do |user|
      current_field_ids = user.user_profile.user_profile_entries.collect{|upe| upe.user_profile_field_id}
      missing_field_ids = all_field_ids.select{|upf_id| !current_field_ids.include?(upf_id)}
      missing_field_ids.each do |field_id|
        new_upe = UserProfileEntry.create(user_profile_id: user.user_profile.id, user_profile_field_id: field_id)
        new_upe.save
      end
      puts "#{user.name}, entries added: #{missing_field_ids.size}"
    end
  rescue
    puts "#{department_name} is not a valid department name. Please enter a valid name."
  end

  desc "Populates profiles with empty instances of all department profile fields"
  task :repair_profiles, [:department_name] => :environment do |t, args|
    department_name = args[:department_name]
    make_empty_profile_entries(department_name)
  end
end