diff options
author | Bob Van Landuyt <bob@vanlanduyt.co> | 2017-10-11 15:39:23 +0300 |
---|---|---|
committer | Bob Van Landuyt <bob@vanlanduyt.co> | 2017-10-12 12:36:54 +0300 |
commit | 8cde1e3285c870c85bee3a9a9ff4b8e5f53cff86 (patch) | |
tree | 207a39cabbbf48f5cf9e9cb17a01e55c09a3eae1 /app/serializers/group_child_entity.rb | |
parent | bd8943f5adfc377491bedb2a794d8c39b2b4c45e (diff) |
Use polymorphism for common attributes in `GroupChildEntity`
Diffstat (limited to 'app/serializers/group_child_entity.rb')
-rw-r--r-- | app/serializers/group_child_entity.rb | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/app/serializers/group_child_entity.rb b/app/serializers/group_child_entity.rb index 5c1fa72b1ac..37240bfb0b1 100644 --- a/app/serializers/group_child_entity.rb +++ b/app/serializers/group_child_entity.rb @@ -6,33 +6,25 @@ class GroupChildEntity < Grape::Entity :created_at, :updated_at, :avatar_url expose :type do |instance| - instance.class.name.downcase + type end expose :can_edit do |instance| return false unless request.respond_to?(:current_user) - if project? - can?(request.current_user, :admin_project, instance) - else - can?(request.current_user, :admin_group, instance) - end + can?(request.current_user, "admin_#{type}", instance) end expose :edit_path do |instance| - if project? - edit_project_path(instance) - else - edit_group_path(instance) - end + # We know `type` will be one either `project` or `group`. + # The `edit_polymorphic_path` helper would try to call the path helper + # with a plural: `edit_groups_path(instance)` or `edit_projects_path(instance)` + # while our methods are `edit_group_path` or `edit_group_path` + public_send("edit_#{type}_path", instance) # rubocop:disable GitlabSecurity/PublicSend end expose :relative_path do |instance| - if project? - project_path(instance) - else - group_path(instance) - end + polymorphic_path(instance) end expose :permission do |instance| @@ -78,4 +70,8 @@ class GroupChildEntity < Grape::Entity def project? object.is_a?(Project) end + + def type + object.class.name.downcase + end end |