Sha256: d1e6372bfc8a1b7fb267db15aeb6a05fee61de21eb09add0faa156ab5cf3031b

Contents?: true

Size: 1.22 KB

Versions: 1

Compression:

Stored size: 1.22 KB

Contents

class PopulateRoles < ActiveRecord::Migration
  def up
    developer_ids = User.where(role: "Developer").pluck(:id)
    tester_ids = User.where(role: "Tester").pluck(:id)
    participant_ids = developer_ids + tester_ids
    
    Project.find_each do |project|
      maintainer_ids = users_that_maintain(project)
      follower_ids = users_that_follow(project)
      
      maintainer_ids.each do |user_id|
        project.add_teammate user_id, "Maintainer"
      end
      
      (developer_ids - maintainer_ids).each do |user_id|
        project.add_teammate user_id, "Contributor"
      end
      
      tester_ids.each do |user_id|
        project.add_teammate user_id, "Tester"
      end
      
      (follower_ids - participant_ids).each do |user_id|
        project.add_teammate user_id, "Follower"
      end
    end
  end
  
  def down
    Role.delete_all
  end
  
  def users_that_follow(project)
    sql = "SELECT DISTINCT user_id FROM user_notifications WHERE project_id=#{project.id}"
    User.connection.select_values(sql).map(&:to_i)
  end
  
  def users_that_maintain(project)
    sql = "SELECT DISTINCT user_id FROM projects_maintainers WHERE project_id=#{project.id}"
    User.connection.select_values(sql).map(&:to_i)
  end
  
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
houston-core-0.5.0.beta1 db/migrate/20130407200624_populate_roles.rb