From 6d1c566ec9f8506500f997c5ab33915e98826f3f Mon Sep 17 00:00:00 2001 From: Andrey Kumanyaev Date: Sat, 19 Jan 2013 22:52:55 +0400 Subject: Rename Team class to ProjectTeam --- app/models/project.rb | 2 +- app/models/project_team.rb | 122 +++++++++++++++++++++++++++++++++++++++++++++ app/models/team.rb | 122 --------------------------------------------- 3 files changed, 123 insertions(+), 123 deletions(-) create mode 100644 app/models/project_team.rb delete mode 100644 app/models/team.rb (limited to 'app') diff --git a/app/models/project.rb b/app/models/project.rb index fa314d9c5f0..a21cc3f6f40 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -127,7 +127,7 @@ class Project < ActiveRecord::Base end def team - @team ||= Team.new(self) + @team ||= ProjectTeam.new(self) end def repository diff --git a/app/models/project_team.rb b/app/models/project_team.rb new file mode 100644 index 00000000000..2cc76974987 --- /dev/null +++ b/app/models/project_team.rb @@ -0,0 +1,122 @@ +class ProjectTeam + attr_accessor :project + + def initialize(project) + @project = project + end + + # Shortcut to add users + # + # Use: + # @team << [@user, :master] + # @team << [@users, :master] + # + def << args + users = args.first + + if users.respond_to?(:each) + add_users(users, args.second) + else + add_user(users, args.second) + end + end + + def get_tm user_id + project.users_projects.find_by_user_id(user_id) + end + + def add_user(user, access) + add_users_ids([user.id], access) + end + + def add_users(users, access) + add_users_ids(users.map(&:id), access) + end + + def add_users_ids(user_ids, access) + UsersProject.add_users_into_projects( + [project.id], + user_ids, + access + ) + end + + # Remove all users from project team + def truncate + UsersProject.truncate_team(project) + end + + def members + project.users_projects + end + + def guests + members.guests.map(&:user) + end + + def reporters + members.reporters.map(&:user) + end + + def developers + members.developers.map(&:user) + end + + def masters + members.masters.map(&:user) + end + + def repository_readers + repository_members[UsersProject::REPORTER] + end + + def repository_writers + repository_members[UsersProject::DEVELOPER] + end + + def repository_masters + repository_members[UsersProject::MASTER] + end + + def repository_members + keys = Hash.new {|h,k| h[k] = [] } + UsersProject.select("keys.identifier, project_access"). + joins(user: :keys).where(project_id: project.id). + each {|row| keys[row.project_access] << [row.identifier] } + + keys[UsersProject::REPORTER] += project.deploy_keys.pluck(:identifier) + keys + end + + def import(source_project) + target_project = project + + source_team = source_project.users_projects.all + target_team = target_project.users_projects.all + target_user_ids = target_team.map(&:user_id) + + source_team.reject! do |tm| + # Skip if user already present in team + target_user_ids.include?(tm.user_id) + end + + source_team.map! do |tm| + new_tm = tm.dup + new_tm.id = nil + new_tm.project_id = target_project.id + new_tm.skip_git = true + new_tm + end + + UsersProject.transaction do + source_team.each do |tm| + tm.save + end + target_project.update_repository + end + + true + rescue + false + end +end diff --git a/app/models/team.rb b/app/models/team.rb deleted file mode 100644 index 51f4ff68d7b..00000000000 --- a/app/models/team.rb +++ /dev/null @@ -1,122 +0,0 @@ -class Team - attr_accessor :project - - def initialize(project) - @project = project - end - - # Shortcut to add users - # - # Use: - # @team << [@user, :master] - # @team << [@users, :master] - # - def << args - users = args.first - - if users.respond_to?(:each) - add_users(users, args.second) - else - add_user(users, args.second) - end - end - - def get_tm user_id - project.users_projects.find_by_user_id(user_id) - end - - def add_user(user, access) - add_users_ids([user.id], access) - end - - def add_users(users, access) - add_users_ids(users.map(&:id), access) - end - - def add_users_ids(user_ids, access) - UsersProject.add_users_into_projects( - [project.id], - user_ids, - access - ) - end - - # Remove all users from project team - def truncate - UsersProject.truncate_team(project) - end - - def members - project.users_projects - end - - def guests - members.guests.map(&:user) - end - - def reporters - members.reporters.map(&:user) - end - - def developers - members.developers.map(&:user) - end - - def masters - members.masters.map(&:user) - end - - def repository_readers - repository_members[UsersProject::REPORTER] - end - - def repository_writers - repository_members[UsersProject::DEVELOPER] - end - - def repository_masters - repository_members[UsersProject::MASTER] - end - - def repository_members - keys = Hash.new {|h,k| h[k] = [] } - UsersProject.select("keys.identifier, project_access"). - joins(user: :keys).where(project_id: project.id). - each {|row| keys[row.project_access] << [row.identifier] } - - keys[UsersProject::REPORTER] += project.deploy_keys.pluck(:identifier) - keys - end - - def import(source_project) - target_project = project - - source_team = source_project.users_projects.all - target_team = target_project.users_projects.all - target_user_ids = target_team.map(&:user_id) - - source_team.reject! do |tm| - # Skip if user already present in team - target_user_ids.include?(tm.user_id) - end - - source_team.map! do |tm| - new_tm = tm.dup - new_tm.id = nil - new_tm.project_id = target_project.id - new_tm.skip_git = true - new_tm - end - - UsersProject.transaction do - source_team.each do |tm| - tm.save - end - target_project.update_repository - end - - true - rescue - false - end -end -- cgit v1.2.3