Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Speicher <rspeicher@gmail.com>2021-01-20 22:34:23 +0300
committerRobert Speicher <rspeicher@gmail.com>2021-01-20 22:34:23 +0300
commit6438df3a1e0fb944485cebf07976160184697d72 (patch)
tree00b09bfd170e77ae9391b1a2f5a93ef6839f2597 /app/serializers
parent42bcd54d971da7ef2854b896a7b34f4ef8601067 (diff)
Add latest changes from gitlab-org/gitlab@13-8-stable-eev13.8.0-rc42
Diffstat (limited to 'app/serializers')
-rw-r--r--app/serializers/build_details_entity.rb2
-rw-r--r--app/serializers/diffs_metadata_entity.rb22
-rw-r--r--app/serializers/environment_entity.rb5
-rw-r--r--app/serializers/group_analytics_stage_entity.rb16
-rw-r--r--app/serializers/group_analytics_stage_serializer.rb5
-rw-r--r--app/serializers/issuable_sidebar_basic_entity.rb4
-rw-r--r--app/serializers/issue_entity.rb4
-rw-r--r--app/serializers/member_entity.rb54
-rw-r--r--app/serializers/member_serializer.rb5
-rw-r--r--app/serializers/member_user_entity.rb28
-rw-r--r--app/serializers/merge_request_poll_cached_widget_entity.rb10
-rw-r--r--app/serializers/merge_request_poll_widget_entity.rb6
-rw-r--r--app/serializers/merge_request_widget_entity.rb10
-rw-r--r--app/serializers/merge_requests/pipeline_entity.rb10
-rw-r--r--app/serializers/pipeline_details_entity.rb4
15 files changed, 153 insertions, 32 deletions
diff --git a/app/serializers/build_details_entity.rb b/app/serializers/build_details_entity.rb
index 917c416ce33..2432a6a0e4d 100644
--- a/app/serializers/build_details_entity.rb
+++ b/app/serializers/build_details_entity.rb
@@ -26,7 +26,7 @@ class BuildDetailsEntity < JobEntity
DeploymentClusterEntity.represent(build.deployment, options)
end
- expose :artifact, if: -> (*) { can?(current_user, :read_build, build) } do
+ expose :artifact, if: -> (*) { can?(current_user, :read_job_artifacts, build) } do
expose :download_path, if: -> (*) { build.locked_artifacts? || build.artifacts? } do |build|
download_project_job_artifacts_path(project, build)
end
diff --git a/app/serializers/diffs_metadata_entity.rb b/app/serializers/diffs_metadata_entity.rb
index 7b0de3bce4e..681e629244f 100644
--- a/app/serializers/diffs_metadata_entity.rb
+++ b/app/serializers/diffs_metadata_entity.rb
@@ -18,8 +18,30 @@ class DiffsMetadataEntity < DiffsEntity
options[:merge_request].can_be_merged_by?(request.current_user)
end
+ expose :project_path
+ expose :project_name
+
+ expose :username
+ expose :user_full_name
+
private
+ def project_path
+ request.project&.full_path
+ end
+
+ def project_name
+ request.project&.name
+ end
+
+ def username
+ request.current_user&.username
+ end
+
+ def user_full_name
+ request.current_user&.name
+ end
+
def presenter(merge_request)
@presenters ||= {}
@presenters[merge_request] ||= MergeRequestPresenter.new(merge_request, current_user: request.current_user) # rubocop: disable CodeReuse/Presenter
diff --git a/app/serializers/environment_entity.rb b/app/serializers/environment_entity.rb
index 8c6ad010d69..66ca2382901 100644
--- a/app/serializers/environment_entity.rb
+++ b/app/serializers/environment_entity.rb
@@ -19,6 +19,7 @@ class EnvironmentEntity < Grape::Entity
expose :name_without_type
expose :last_deployment, using: DeploymentEntity
expose :stop_action_available?, as: :has_stop_action
+ expose :rollout_status, if: -> (*) { can_read_deploy_board? }, using: RolloutStatusEntity
expose :upcoming_deployment, expose_nil: false do |environment, ops|
DeploymentEntity.represent(environment.upcoming_deployment,
@@ -104,6 +105,10 @@ class EnvironmentEntity < Grape::Entity
can?(current_user, :read_pod_logs, environment.project)
end
+ def can_read_deploy_board?
+ can?(current_user, :read_deploy_board, environment.project)
+ end
+
def cluster_platform_kubernetes?
deployment_platform && deployment_platform.is_a?(Clusters::Platforms::Kubernetes)
end
diff --git a/app/serializers/group_analytics_stage_entity.rb b/app/serializers/group_analytics_stage_entity.rb
deleted file mode 100644
index 81be20e7dd8..00000000000
--- a/app/serializers/group_analytics_stage_entity.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-# frozen_string_literal: true
-
-class GroupAnalyticsStageEntity < Grape::Entity
- include EntityDateHelper
-
- expose :title
- expose :name
- expose :legend
- expose :description
-
- expose :group_median, as: :value do |stage|
- # group_median returns a BatchLoader instance which we first have to unwrap by using to_f
- # we use to_f to make sure results below 1 are presented to the end-user
- stage.group_median.to_f.nonzero? ? distance_of_time_in_words(stage.group_median) : nil
- end
-end
diff --git a/app/serializers/group_analytics_stage_serializer.rb b/app/serializers/group_analytics_stage_serializer.rb
deleted file mode 100644
index ec448dea602..00000000000
--- a/app/serializers/group_analytics_stage_serializer.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-# frozen_string_literal: true
-
-class GroupAnalyticsStageSerializer < BaseSerializer
- entity GroupAnalyticsStageEntity
-end
diff --git a/app/serializers/issuable_sidebar_basic_entity.rb b/app/serializers/issuable_sidebar_basic_entity.rb
index 53c123c06fd..4b3d6f21d6d 100644
--- a/app/serializers/issuable_sidebar_basic_entity.rb
+++ b/app/serializers/issuable_sidebar_basic_entity.rb
@@ -103,6 +103,10 @@ class IssuableSidebarBasicEntity < Grape::Entity
issuable.project.emails_disabled?
end
+ expose :create_note_email do |issuable|
+ issuable.creatable_note_email_address(current_user)
+ end
+
expose :supports_time_tracking?, as: :supports_time_tracking
expose :supports_milestone?, as: :supports_milestone
expose :supports_severity?, as: :supports_severity
diff --git a/app/serializers/issue_entity.rb b/app/serializers/issue_entity.rb
index 7c12e0956f3..647a73495f8 100644
--- a/app/serializers/issue_entity.rb
+++ b/app/serializers/issue_entity.rb
@@ -71,6 +71,10 @@ class IssueEntity < IssuableEntity
expose :archived_project_docs_path, if: -> (issue) { issue.project.archived? } do |issue|
help_page_path('user/project/settings/index.md', anchor: 'archiving-a-project')
end
+
+ expose :issue_email_participants do |issue|
+ issue.issue_email_participants.map { |x| { email: x.email } }
+ end
end
IssueEntity.prepend_if_ee('::EE::IssueEntity')
diff --git a/app/serializers/member_entity.rb b/app/serializers/member_entity.rb
new file mode 100644
index 00000000000..584ba4c62de
--- /dev/null
+++ b/app/serializers/member_entity.rb
@@ -0,0 +1,54 @@
+# frozen_string_literal: true
+
+class MemberEntity < Grape::Entity
+ include RequestAwareEntity
+ include AvatarsHelper
+
+ expose :id
+ expose :created_at
+ expose :expires_at do |member|
+ member.expires_at&.to_time
+ end
+ expose :requested_at
+
+ expose :created_by, if: -> (member) { member.created_by.present? } do |member|
+ UserEntity.represent(member.created_by, only: [:name, :web_url])
+ end
+
+ expose :can_update do |member|
+ member.can_update?
+ end
+
+ expose :can_remove do |member|
+ member.can_remove?
+ end
+
+ expose :access_level do
+ expose :human_access, as: :string_value
+ expose :access_level, as: :integer_value
+ end
+
+ expose :source do |member|
+ GroupEntity.represent(member.source, only: [:id, :full_name, :web_url])
+ end
+
+ expose :valid_level_roles, as: :valid_roles
+
+ expose :user, if: -> (member) { member.user.present? }, using: MemberUserEntity
+
+ expose :invite, if: -> (member) { member.invite? } do
+ expose :email do |member|
+ member.invite_email
+ end
+
+ expose :avatar_url do |member|
+ avatar_icon_for_email(member.invite_email, Member::AVATAR_SIZE)
+ end
+
+ expose :can_resend do |member|
+ member.can_resend_invite?
+ end
+ end
+end
+
+MemberEntity.prepend_if_ee('EE::MemberEntity')
diff --git a/app/serializers/member_serializer.rb b/app/serializers/member_serializer.rb
new file mode 100644
index 00000000000..b34d7f30a58
--- /dev/null
+++ b/app/serializers/member_serializer.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+class MemberSerializer < BaseSerializer
+ entity MemberEntity
+end
diff --git a/app/serializers/member_user_entity.rb b/app/serializers/member_user_entity.rb
new file mode 100644
index 00000000000..a022966c041
--- /dev/null
+++ b/app/serializers/member_user_entity.rb
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+
+class MemberUserEntity < UserEntity
+ unexpose :show_status
+ unexpose :path
+ unexpose :state
+ unexpose :status_tooltip_html
+
+ expose :avatar_url do |user|
+ user.avatar_url(size: Member::AVATAR_SIZE, only_path: false)
+ end
+
+ expose :blocked do |user|
+ user.blocked?
+ end
+
+ expose :two_factor_enabled do |user|
+ user.two_factor_enabled?
+ end
+
+ expose :status, if: -> (user) { user.status.present? } do
+ expose :emoji do |user|
+ user.status.emoji
+ end
+ end
+end
+
+MemberUserEntity.prepend_if_ee('EE::MemberUserEntity')
diff --git a/app/serializers/merge_request_poll_cached_widget_entity.rb b/app/serializers/merge_request_poll_cached_widget_entity.rb
index 080b6554de1..1db4ec37d4a 100644
--- a/app/serializers/merge_request_poll_cached_widget_entity.rb
+++ b/app/serializers/merge_request_poll_cached_widget_entity.rb
@@ -104,6 +104,16 @@ class MergeRequestPollCachedWidgetEntity < IssuableEntity
presenter(merge_request).api_unapprove_path
end
+ expose :blob_path do
+ expose :head_path, if: -> (mr, _) { mr.source_branch_sha } do |merge_request|
+ project_blob_path(merge_request.project, merge_request.source_branch_sha)
+ end
+
+ expose :base_path, if: -> (mr, _) { mr.diff_base_sha } do |merge_request|
+ project_blob_path(merge_request.project, merge_request.diff_base_sha)
+ end
+ end
+
private
delegate :current_user, to: :request
diff --git a/app/serializers/merge_request_poll_widget_entity.rb b/app/serializers/merge_request_poll_widget_entity.rb
index 9609a894e6d..4c34da3fc88 100644
--- a/app/serializers/merge_request_poll_widget_entity.rb
+++ b/app/serializers/merge_request_poll_widget_entity.rb
@@ -85,6 +85,12 @@ class MergeRequestPollWidgetEntity < Grape::Entity
end
end
+ expose :codequality_reports_path do |merge_request|
+ if merge_request.has_codequality_reports?
+ codequality_reports_project_merge_request_path(merge_request.project, merge_request, format: :json)
+ end
+ end
+
expose :terraform_reports_path do |merge_request|
if merge_request.has_terraform_reports?
terraform_reports_project_merge_request_path(merge_request.project, merge_request, format: :json)
diff --git a/app/serializers/merge_request_widget_entity.rb b/app/serializers/merge_request_widget_entity.rb
index afd4d5b9a2b..ca4e16bc5ff 100644
--- a/app/serializers/merge_request_widget_entity.rb
+++ b/app/serializers/merge_request_widget_entity.rb
@@ -115,16 +115,6 @@ class MergeRequestWidgetEntity < Grape::Entity
end
end
- expose :blob_path do
- expose :head_path, if: -> (mr, _) { mr.source_branch_sha } do |merge_request|
- project_blob_path(merge_request.project, merge_request.source_branch_sha)
- end
-
- expose :base_path, if: -> (mr, _) { mr.diff_base_sha } do |merge_request|
- project_blob_path(merge_request.project, merge_request.diff_base_sha)
- end
- end
-
expose :codeclimate, if: -> (mr, _) { head_pipeline_downloadable_path_for_report_type(:codequality) } do
expose :head_path do |merge_request|
head_pipeline_downloadable_path_for_report_type(:codequality)
diff --git a/app/serializers/merge_requests/pipeline_entity.rb b/app/serializers/merge_requests/pipeline_entity.rb
index 97d7620154e..8b684d4641b 100644
--- a/app/serializers/merge_requests/pipeline_entity.rb
+++ b/app/serializers/merge_requests/pipeline_entity.rb
@@ -21,6 +21,16 @@ class MergeRequests::PipelineEntity < Grape::Entity
pipeline.present.name
end
+ expose :artifacts do |pipeline, options|
+ rel = pipeline.downloadable_artifacts
+
+ if Feature.enabled?(:non_public_artifacts, type: :development)
+ rel = rel.select { |artifact| can?(request.current_user, :read_job_artifacts, artifact.job) }
+ end
+
+ BuildArtifactEntity.represent(rel, options)
+ end
+
expose :detailed_status, as: :status, with: DetailedStatusEntity do |pipeline|
pipeline.detailed_status(request.current_user)
end
diff --git a/app/serializers/pipeline_details_entity.rb b/app/serializers/pipeline_details_entity.rb
index 50efa9ea15d..e53fa7873ac 100644
--- a/app/serializers/pipeline_details_entity.rb
+++ b/app/serializers/pipeline_details_entity.rb
@@ -11,6 +11,10 @@ class PipelineDetailsEntity < PipelineEntity
expose :artifacts do |pipeline, options|
rel = pipeline.downloadable_artifacts
+ if Feature.enabled?(:non_public_artifacts, type: :development)
+ rel = rel.select { |artifact| can?(request.current_user, :read_job_artifacts, artifact.job) }
+ end
+
BuildArtifactEntity.represent(rel, options)
end
expose :manual_actions, using: BuildActionEntity