diff options
author | Rémy Coutable <remy@rymai.me> | 2016-06-17 15:06:55 +0300 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2016-06-18 06:46:45 +0300 |
commit | 4652489f40a4ff2b749f9ad495986a7a17448243 (patch) | |
tree | 90a373da8bdbaf66bc0228abf8465d9d928c9f2e /app/services/members | |
parent | 00906b5bb6cde8cb60281109060a519a54000c61 (diff) |
New Members::DestroyService
This is to ensure we don't send unwanted notifications when deleting a
project. In other words, stop abusing AR callbacks and use services.
Signed-off-by: Rémy Coutable <remy@rymai.me>
Diffstat (limited to 'app/services/members')
-rw-r--r-- | app/services/members/destroy_service.rb | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/app/services/members/destroy_service.rb b/app/services/members/destroy_service.rb new file mode 100644 index 00000000000..e32eb47b846 --- /dev/null +++ b/app/services/members/destroy_service.rb @@ -0,0 +1,33 @@ +module Members + class DestroyService < BaseService + attr_accessor :member, :current_user + + def initialize(member, user) + @member, @current_user = member, user + end + + def execute + if can?(current_user, "destroy_#{member.type.underscore}".to_sym, member) + member.destroy + + notification_service.decline_access_request(member) if member.request? + end + + member + end + + private + + def abilities + Ability.abilities + end + + def can?(object, action, subject) + abilities.allowed?(object, action, subject) + end + + def notification_service + NotificationService.new + end + end +end |