From f082ff745e806585eeb92025b4f2cb8b8b4e4bd7 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Sat, 1 Aug 2015 20:09:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5members?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/member.rb | 1 + app/models/member_role.rb | 3 +++ app/models/role.rb | 21 +++++++++++++++ lib/trustie/gitlab/manage_member.rb | 42 +++++++++++++++++++++++++++++ 4 files changed, 67 insertions(+) create mode 100644 lib/trustie/gitlab/manage_member.rb diff --git a/app/models/member.rb b/app/models/member.rb index 292dd2034..c2bf4e7d5 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -31,6 +31,7 @@ class Member < ActiveRecord::Base before_destroy :set_issue_category_nil + def role end diff --git a/app/models/member_role.rb b/app/models/member_role.rb index 67122a636..4d493cb27 100644 --- a/app/models/member_role.rb +++ b/app/models/member_role.rb @@ -35,8 +35,11 @@ class MemberRole < ActiveRecord::Base !inherited_from.nil? end + include Trustie::Gitlab::ManageMember + private + def remove_member_if_empty if member.roles.empty? member.destroy diff --git a/app/models/role.rb b/app/models/role.rb index f363b52bf..8bf5ebc05 100644 --- a/app/models/role.rb +++ b/app/models/role.rb @@ -77,6 +77,27 @@ class Role < ActiveRecord::Base self.givable[3..5] end + GUEST = 10 + REPORTER = 20 + DEVELOPER = 30 + MASTER = 40 + OWNER = 50 + def to_gitlab_role + case self.position + when 1,2 + GUEST + when 5 + REPORTER + when 4 + DEVELOPER + when 3 + MASTER + else + GUEST + end + end + + # Copies attributes from another role, arg can be an id or a Role def copy_from(arg, options={}) return unless arg.present? diff --git a/lib/trustie/gitlab/manage_member.rb b/lib/trustie/gitlab/manage_member.rb new file mode 100644 index 000000000..8201d1759 --- /dev/null +++ b/lib/trustie/gitlab/manage_member.rb @@ -0,0 +1,42 @@ +#coding=utf-8 +# +# +module Trustie + module Gitlab + + module ManageMember + def self.included(base) + base.class_eval { + before_create :add_gitlab_member + before_destroy :delete_gitlab_member + after_save :change_gitlab_member + } + end + + def change_gitlab_member + if self.member.project_id == 2 + @g ||= ::Gitlab.client + @g.edit_team_member(11, self.member.user.gid, self.role.to_gitlab_role ) + end + end + + def add_gitlab_member + if self.member.project_id == 2 + @g ||= ::Gitlab.client + @g.add_team_member(11, self.member.user.gid, self.role.to_gitlab_role ) + end + end + + def delete_gitlab_member + if member.roles.count <=1 + if self.member.project_id == 2 + @g ||= ::Gitlab.client + @g.remove_team_member(11, self.member.user.gid) + end + end + end + end + + end +end +