summaryrefslogtreecommitdiff
path: root/app/serializers
diff options
context:
space:
mode:
authorBob Van Landuyt <bob@vanlanduyt.co>2017-10-11 14:39:23 +0200
committerBob Van Landuyt <bob@vanlanduyt.co>2017-10-12 11:36:54 +0200
commit8cde1e3285c870c85bee3a9a9ff4b8e5f53cff86 (patch)
tree207a39cabbbf48f5cf9e9cb17a01e55c09a3eae1 /app/serializers
parentbd8943f5adfc377491bedb2a794d8c39b2b4c45e (diff)
downloadgitlab-ce-8cde1e3285c870c85bee3a9a9ff4b8e5f53cff86.tar.gz
Use polymorphism for common attributes in `GroupChildEntity`
Diffstat (limited to 'app/serializers')
-rw-r--r--app/serializers/group_child_entity.rb28
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