2017-09-05 05:30:16 -04:00
|
|
|
class GroupChildEntity < Grape::Entity
|
|
|
|
include ActionView::Helpers::NumberHelper
|
|
|
|
include RequestAwareEntity
|
|
|
|
|
2017-09-13 05:11:09 -04:00
|
|
|
expose :id, :name, :description, :visibility, :full_name, :relative_path,
|
2017-09-05 10:18:24 -04:00
|
|
|
:created_at, :updated_at, :can_edit, :type, :avatar_url, :permission, :edit_path
|
|
|
|
|
|
|
|
def project?
|
|
|
|
object.is_a?(Project)
|
|
|
|
end
|
2017-09-05 05:30:16 -04:00
|
|
|
|
|
|
|
def type
|
|
|
|
object.class.name.downcase
|
|
|
|
end
|
|
|
|
|
|
|
|
def can_edit
|
|
|
|
return false unless request.respond_to?(:current_user)
|
|
|
|
|
2017-09-05 10:18:24 -04:00
|
|
|
if project?
|
|
|
|
can?(request.current_user, :admin_project, object)
|
|
|
|
else
|
|
|
|
can?(request.current_user, :admin_group, object)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def edit_path
|
|
|
|
if project?
|
|
|
|
edit_project_path(object)
|
|
|
|
else
|
|
|
|
edit_group_path(object)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-09-13 05:11:09 -04:00
|
|
|
def relative_path
|
|
|
|
if project?
|
|
|
|
project_path(object)
|
|
|
|
else
|
|
|
|
group_path(object)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-09-05 10:18:24 -04:00
|
|
|
def permission
|
2017-10-05 04:38:05 -04:00
|
|
|
membership&.human_access
|
2017-09-05 10:18:24 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
# Project only attributes
|
|
|
|
expose :star_count,
|
|
|
|
if: lambda { |_instance, _options| project? }
|
|
|
|
|
|
|
|
# Group only attributes
|
|
|
|
expose :children_count, :leave_path, :parent_id, :number_projects_with_delimiter,
|
2017-09-12 04:51:34 -04:00
|
|
|
:number_users_with_delimiter, :project_count, :subgroup_count, :can_leave,
|
2017-09-05 10:18:24 -04:00
|
|
|
unless: lambda { |_instance, _options| project? }
|
|
|
|
|
|
|
|
def leave_path
|
2017-10-05 04:38:05 -04:00
|
|
|
leave_group_members_path(object)
|
2017-09-05 10:18:24 -04:00
|
|
|
end
|
|
|
|
|
2017-09-12 04:51:34 -04:00
|
|
|
def can_leave
|
2017-10-05 04:38:05 -04:00
|
|
|
if membership
|
2017-09-12 04:51:34 -04:00
|
|
|
can?(request.current_user, :destroy_group_member, membership)
|
|
|
|
else
|
|
|
|
false
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-09-05 10:18:24 -04:00
|
|
|
def number_projects_with_delimiter
|
2017-10-05 04:32:52 -04:00
|
|
|
number_with_delimiter(object.project_count)
|
2017-09-05 10:18:24 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def number_users_with_delimiter
|
2017-10-05 04:32:52 -04:00
|
|
|
number_with_delimiter(object.member_count)
|
2017-09-05 05:30:16 -04:00
|
|
|
end
|
2017-10-05 04:38:05 -04:00
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def membership
|
|
|
|
return unless request.current_user
|
|
|
|
|
|
|
|
@membership ||= request.current_user.membership_for_object(object)
|
|
|
|
end
|
2017-09-05 05:30:16 -04:00
|
|
|
end
|