diff options
author | TM Lee <tm89lee@gmail.com> | 2017-03-02 14:01:02 +0800 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2017-12-11 18:30:56 +0100 |
commit | 2cf3fc18a6e111a820f9842bb1d939790e8625eb (patch) | |
tree | 5ebad1908460ef6bbdbab371373bd0705372218e /app/presenters | |
parent | bd8b6518855bd9768ca5d245467b5ff0934e40b6 (diff) | |
download | gitlab-ce-2cf3fc18a6e111a820f9842bb1d939790e8625eb.tar.gz |
Refactor member view by using presenter
- Create MemberPresenter alongside with GroupMemberPresenter and ProjectMemberPresenter
- Make Member model Presentable
- Move action_member_permission from MembersHelper into the MemberPresenter
- Added rspec using double, separate specs for GroupMemberPresenter and ProjectMemberPresenter
Fixes #28004.
Signed-off-by: Rémy Coutable <remy@rymai.me>
Diffstat (limited to 'app/presenters')
-rw-r--r-- | app/presenters/group_member_presenter.rb | 15 | ||||
-rw-r--r-- | app/presenters/member_presenter.rb | 40 | ||||
-rw-r--r-- | app/presenters/project_member_presenter.rb | 15 |
3 files changed, 70 insertions, 0 deletions
diff --git a/app/presenters/group_member_presenter.rb b/app/presenters/group_member_presenter.rb new file mode 100644 index 00000000000..8f53dfa105e --- /dev/null +++ b/app/presenters/group_member_presenter.rb @@ -0,0 +1,15 @@ +class GroupMemberPresenter < MemberPresenter + private + + def admin_member_permission + :admin_group_member + end + + def update_member_permission + :update_group_member + end + + def destroy_member_permission + :destroy_group_member + end +end diff --git a/app/presenters/member_presenter.rb b/app/presenters/member_presenter.rb new file mode 100644 index 00000000000..a8732226018 --- /dev/null +++ b/app/presenters/member_presenter.rb @@ -0,0 +1,40 @@ +class MemberPresenter < Gitlab::View::Presenter::Delegated + include Gitlab::Allowable + + presents :member + + def can_resend_invite? + invite? && + can?(current_user, admin_member_permission, source) + end + + def can_update? + can?(current_user, update_member_permission, member) + end + + def cannot_update? + !can_update? + end + + def can_remove? + can?(current_user, destroy_member_permission, member) + end + + def can_approve? + request? && can_update? + end + + private + + def admin_member_permission + raise NotImplementedError + end + + def update_member_permission + raise NotImplementedError + end + + def destroy_member_permission + raise NotImplementedError + end +end diff --git a/app/presenters/project_member_presenter.rb b/app/presenters/project_member_presenter.rb new file mode 100644 index 00000000000..7f42d2b70df --- /dev/null +++ b/app/presenters/project_member_presenter.rb @@ -0,0 +1,15 @@ +class ProjectMemberPresenter < MemberPresenter + private + + def admin_member_permission + :admin_project_member + end + + def update_member_permission + :update_project_member + end + + def destroy_member_permission + :destroy_project_member + end +end |