diff options
author | Robert Speicher <rspeicher@gmail.com> | 2021-01-20 22:34:23 +0300 |
---|---|---|
committer | Robert Speicher <rspeicher@gmail.com> | 2021-01-20 22:34:23 +0300 |
commit | 6438df3a1e0fb944485cebf07976160184697d72 (patch) | |
tree | 00b09bfd170e77ae9391b1a2f5a93ef6839f2597 /app/serializers | |
parent | 42bcd54d971da7ef2854b896a7b34f4ef8601067 (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.rb | 2 | ||||
-rw-r--r-- | app/serializers/diffs_metadata_entity.rb | 22 | ||||
-rw-r--r-- | app/serializers/environment_entity.rb | 5 | ||||
-rw-r--r-- | app/serializers/group_analytics_stage_entity.rb | 16 | ||||
-rw-r--r-- | app/serializers/group_analytics_stage_serializer.rb | 5 | ||||
-rw-r--r-- | app/serializers/issuable_sidebar_basic_entity.rb | 4 | ||||
-rw-r--r-- | app/serializers/issue_entity.rb | 4 | ||||
-rw-r--r-- | app/serializers/member_entity.rb | 54 | ||||
-rw-r--r-- | app/serializers/member_serializer.rb | 5 | ||||
-rw-r--r-- | app/serializers/member_user_entity.rb | 28 | ||||
-rw-r--r-- | app/serializers/merge_request_poll_cached_widget_entity.rb | 10 | ||||
-rw-r--r-- | app/serializers/merge_request_poll_widget_entity.rb | 6 | ||||
-rw-r--r-- | app/serializers/merge_request_widget_entity.rb | 10 | ||||
-rw-r--r-- | app/serializers/merge_requests/pipeline_entity.rb | 10 | ||||
-rw-r--r-- | app/serializers/pipeline_details_entity.rb | 4 |
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 |