diff options
Diffstat (limited to 'app/serializers')
-rw-r--r-- | app/serializers/analytics_merge_request_entity.rb | 4 | ||||
-rw-r--r-- | app/serializers/deploy_key_entity.rb | 11 | ||||
-rw-r--r-- | app/serializers/deployment_entity.rb | 11 | ||||
-rw-r--r-- | app/serializers/diff_file_metadata_entity.rb | 3 | ||||
-rw-r--r-- | app/serializers/diffs_entity.rb | 4 | ||||
-rw-r--r-- | app/serializers/diffs_metadata_entity.rb | 2 | ||||
-rw-r--r-- | app/serializers/environment_entity.rb | 9 | ||||
-rw-r--r-- | app/serializers/environment_status_entity.rb | 4 | ||||
-rw-r--r-- | app/serializers/error_tracking/detailed_error_entity.rb | 1 | ||||
-rw-r--r-- | app/serializers/group_child_entity.rb | 2 | ||||
-rw-r--r-- | app/serializers/issue_entity.rb | 8 | ||||
-rw-r--r-- | app/serializers/merge_request_noteable_entity.rb | 12 | ||||
-rw-r--r-- | app/serializers/merge_request_poll_cached_widget_entity.rb | 13 | ||||
-rw-r--r-- | app/serializers/merge_request_poll_widget_entity.rb | 8 | ||||
-rw-r--r-- | app/serializers/merge_request_widget_entity.rb | 5 | ||||
-rw-r--r-- | app/serializers/pipeline_entity.rb | 4 |
16 files changed, 89 insertions, 12 deletions
diff --git a/app/serializers/analytics_merge_request_entity.rb b/app/serializers/analytics_merge_request_entity.rb index 21d7eeb81b0..4344de2b9b4 100644 --- a/app/serializers/analytics_merge_request_entity.rb +++ b/app/serializers/analytics_merge_request_entity.rb @@ -1,7 +1,9 @@ # frozen_string_literal: true class AnalyticsMergeRequestEntity < AnalyticsIssueEntity - expose :state + expose :state do |object| + MergeRequest.available_states.key(object[:state_id]) + end expose :url do |object| url_to(:namespace_project_merge_request, object) diff --git a/app/serializers/deploy_key_entity.rb b/app/serializers/deploy_key_entity.rb index 9a558d12bec..2682a47fbaa 100644 --- a/app/serializers/deploy_key_entity.rb +++ b/app/serializers/deploy_key_entity.rb @@ -11,8 +11,7 @@ class DeployKeyEntity < Grape::Entity expose :updated_at expose :deploy_keys_projects, using: DeployKeysProjectEntity do |deploy_key| deploy_key.deploy_keys_projects.select do |deploy_key_project| - !deploy_key_project.project&.pending_delete? && - Ability.allowed?(options[:user], :read_project, deploy_key_project.project) + !deploy_key_project.project&.pending_delete? && (allowed_to_read_project?(deploy_key_project.project) || options[:user].admin?) end end expose :can_edit @@ -23,4 +22,12 @@ class DeployKeyEntity < Grape::Entity Ability.allowed?(options[:user], :update_deploy_key, object) || Ability.allowed?(options[:user], :update_deploy_keys_project, object.deploy_keys_project_for(options[:project])) end + + def allowed_to_read_project?(project) + if options[:readable_project_ids] + options[:readable_project_ids].include?(project.id) + else + Ability.allowed?(options[:user], :read_project, project) + end + end end diff --git a/app/serializers/deployment_entity.rb b/app/serializers/deployment_entity.rb index e6421315b34..94773eeebd0 100644 --- a/app/serializers/deployment_entity.rb +++ b/app/serializers/deployment_entity.rb @@ -37,6 +37,9 @@ class DeploymentEntity < Grape::Entity expose :commit, using: CommitEntity, if: -> (*) { include_details? } expose :manual_actions, using: JobEntity, if: -> (*) { include_details? && can_create_deployment? } expose :scheduled_actions, using: JobEntity, if: -> (*) { include_details? && can_create_deployment? } + expose :playable_build, expose_nil: false, if: -> (*) { include_details? && can_create_deployment? } do |deployment, options| + JobEntity.represent(deployment.playable_build, options.merge(only: [:play_path, :retry_path])) + end expose :cluster, using: ClusterBasicEntity @@ -47,7 +50,7 @@ class DeploymentEntity < Grape::Entity end def can_create_deployment? - can?(request.current_user, :create_deployment, request.project) + can?(request.current_user, :create_deployment, project) end def can_read_deployables? @@ -56,6 +59,10 @@ class DeploymentEntity < Grape::Entity # because it triggers a policy evaluation that involves multiple # Gitaly calls that might not be cached. # - can?(request.current_user, :read_build, request.project) + can?(request.current_user, :read_build, project) + end + + def project + request.try(:project) || options[:project] end end diff --git a/app/serializers/diff_file_metadata_entity.rb b/app/serializers/diff_file_metadata_entity.rb index 500a844b170..05280518f39 100644 --- a/app/serializers/diff_file_metadata_entity.rb +++ b/app/serializers/diff_file_metadata_entity.rb @@ -7,4 +7,7 @@ class DiffFileMetadataEntity < Grape::Entity expose :old_path expose :new_file?, as: :new_file expose :deleted_file?, as: :deleted_file + expose :file_hash do |diff_file| + Digest::SHA1.hexdigest(diff_file.file_path) + end end diff --git a/app/serializers/diffs_entity.rb b/app/serializers/diffs_entity.rb index 19875a1287c..88e09ae8c0b 100644 --- a/app/serializers/diffs_entity.rb +++ b/app/serializers/diffs_entity.rb @@ -42,13 +42,13 @@ class DiffsEntity < Grape::Entity # rubocop: disable CodeReuse/ActiveRecord expose :added_lines do |diffs| - diffs.diff_files.sum(&:added_lines) + diffs.raw_diff_files.sum(&:added_lines) end # rubocop: enable CodeReuse/ActiveRecord # rubocop: disable CodeReuse/ActiveRecord expose :removed_lines do |diffs| - diffs.diff_files.sum(&:removed_lines) + diffs.raw_diff_files.sum(&:removed_lines) end # rubocop: enable CodeReuse/ActiveRecord diff --git a/app/serializers/diffs_metadata_entity.rb b/app/serializers/diffs_metadata_entity.rb index c82c686e8ef..b7024721ea9 100644 --- a/app/serializers/diffs_metadata_entity.rb +++ b/app/serializers/diffs_metadata_entity.rb @@ -2,5 +2,5 @@ class DiffsMetadataEntity < DiffsEntity unexpose :diff_files - expose :diff_files, using: DiffFileMetadataEntity + expose :raw_diff_files, as: :diff_files, using: DiffFileMetadataEntity end diff --git a/app/serializers/environment_entity.rb b/app/serializers/environment_entity.rb index bffd9de4978..74d6806e83f 100644 --- a/app/serializers/environment_entity.rb +++ b/app/serializers/environment_entity.rb @@ -24,6 +24,10 @@ class EnvironmentEntity < Grape::Entity stop_project_environment_path(environment.project, environment) end + expose :cancel_auto_stop_path, if: -> (*) { can_update_environment? } do |environment| + cancel_auto_stop_project_environment_path(environment.project, environment) + end + expose :cluster_type, if: ->(environment, _) { cluster_platform_kubernetes? } do |environment| cluster.cluster_type end @@ -37,6 +41,7 @@ class EnvironmentEntity < Grape::Entity end expose :created_at, :updated_at + expose :auto_stop_at, expose_nil: false expose :can_stop do |environment| environment.available? && can?(current_user, :stop_environment, environment) @@ -54,6 +59,10 @@ class EnvironmentEntity < Grape::Entity can?(request.current_user, :create_environment_terminal, environment) end + def can_update_environment? + can?(current_user, :update_environment, environment) + end + def cluster_platform_kubernetes? deployment_platform && deployment_platform.is_a?(Clusters::Platforms::Kubernetes) end diff --git a/app/serializers/environment_status_entity.rb b/app/serializers/environment_status_entity.rb index 811cc2ad5af..40db23c143e 100644 --- a/app/serializers/environment_status_entity.rb +++ b/app/serializers/environment_status_entity.rb @@ -37,6 +37,10 @@ class EnvironmentStatusEntity < Grape::Entity es.deployment.try(:formatted_deployment_time) end + expose :deployment, as: :details do |es, options| + DeploymentEntity.represent(es.deployment, options.merge(project: es.project, only: [:playable_build])) + end + expose :changes private diff --git a/app/serializers/error_tracking/detailed_error_entity.rb b/app/serializers/error_tracking/detailed_error_entity.rb index 8f08f84aa41..dd0cac8e4cd 100644 --- a/app/serializers/error_tracking/detailed_error_entity.rb +++ b/app/serializers/error_tracking/detailed_error_entity.rb @@ -10,6 +10,7 @@ module ErrorTracking :first_release_short_version, :first_seen, :frequency, + :gitlab_issue, :id, :last_release_last_commit, :last_release_short_version, diff --git a/app/serializers/group_child_entity.rb b/app/serializers/group_child_entity.rb index 20d7032c970..a7fe4d3f9b9 100644 --- a/app/serializers/group_child_entity.rb +++ b/app/serializers/group_child_entity.rb @@ -99,3 +99,5 @@ class GroupChildEntity < Grape::Entity end end end + +GroupChildEntity.prepend_if_ee('EE::GroupChildEntity') diff --git a/app/serializers/issue_entity.rb b/app/serializers/issue_entity.rb index a3d0298a495..98c0c703584 100644 --- a/app/serializers/issue_entity.rb +++ b/app/serializers/issue_entity.rb @@ -64,4 +64,12 @@ class IssueEntity < IssuableEntity expose :locked_discussion_docs_path, if: -> (issue) { issue.discussion_locked? } do |issue| help_page_path('user/discussions/index.md', anchor: 'lock-discussions') end + + expose :is_project_archived do |issue| + issue.project.archived? + end + + 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 end diff --git a/app/serializers/merge_request_noteable_entity.rb b/app/serializers/merge_request_noteable_entity.rb index 9504fdd8eac..8e7456ce059 100644 --- a/app/serializers/merge_request_noteable_entity.rb +++ b/app/serializers/merge_request_noteable_entity.rb @@ -42,6 +42,18 @@ class MergeRequestNoteableEntity < IssuableEntity end end + expose :locked_discussion_docs_path, if: -> (merge_request) { merge_request.discussion_locked? } do |merge_request| + help_page_path('user/discussions/index.md', anchor: 'lock-discussions') + end + + expose :is_project_archived do |merge_request| + merge_request.project.archived? + end + + expose :archived_project_docs_path, if: -> (merge_request) { merge_request.project.archived? } do |merge_request| + help_page_path('user/project/settings/index.md', anchor: 'archiving-a-project') + end + private delegate :current_user, to: :request diff --git a/app/serializers/merge_request_poll_cached_widget_entity.rb b/app/serializers/merge_request_poll_cached_widget_entity.rb index a3186ecbcdf..2f8eb6650e8 100644 --- a/app/serializers/merge_request_poll_cached_widget_entity.rb +++ b/app/serializers/merge_request_poll_cached_widget_entity.rb @@ -15,7 +15,7 @@ class MergeRequestPollCachedWidgetEntity < IssuableEntity expose :target_project_id expose :squash expose :rebase_in_progress?, as: :rebase_in_progress - expose :default_squash_commit_message + expose :default_squash_commit_message, if: -> (merge_request, _) { merge_request.mergeable? } expose :commits_count expose :merge_ongoing?, as: :merge_ongoing expose :work_in_progress?, as: :work_in_progress @@ -25,8 +25,9 @@ class MergeRequestPollCachedWidgetEntity < IssuableEntity expose :source_branch_exists?, as: :source_branch_exists expose :branch_missing?, as: :branch_missing - expose :commits_without_merge_commits, using: MergeRequestWidgetCommitEntity do |merge_request| - merge_request.commits.without_merge_commits + expose :commits_without_merge_commits, using: MergeRequestWidgetCommitEntity, + if: -> (merge_request, _) { merge_request.mergeable? } do |merge_request| + merge_request.recent_commits.without_merge_commits end expose :diff_head_sha do |merge_request| merge_request.diff_head_sha.presence @@ -69,6 +70,10 @@ class MergeRequestPollCachedWidgetEntity < IssuableEntity presenter(merge_request).source_branch_with_namespace_link end + expose :diffs_path do |merge_request| + diffs_project_merge_request_path(merge_request.project, merge_request) + end + private delegate :current_user, to: :request @@ -101,3 +106,5 @@ class MergeRequestPollCachedWidgetEntity < IssuableEntity merged_by: merge_event&.author) end end + +MergeRequestPollCachedWidgetEntity.prepend_if_ee('EE::MergeRequestPollCachedWidgetEntity') diff --git a/app/serializers/merge_request_poll_widget_entity.rb b/app/serializers/merge_request_poll_widget_entity.rb index 2a61187a856..a45026ea016 100644 --- a/app/serializers/merge_request_poll_widget_entity.rb +++ b/app/serializers/merge_request_poll_widget_entity.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true -class MergeRequestPollWidgetEntity < IssuableEntity +class MergeRequestPollWidgetEntity < Grape::Entity + include RequestAwareEntity + expose :auto_merge_strategy expose :available_auto_merge_strategies do |merge_request| AutoMergeService.new(merge_request.project, current_user).available_strategies(merge_request) # rubocop: disable CodeReuse/ServiceClass @@ -55,6 +57,10 @@ class MergeRequestPollWidgetEntity < IssuableEntity presenter(merge_request).ci_status end + expose :pipeline_coverage_delta do |merge_request| + presenter(merge_request).pipeline_coverage_delta + end + expose :cancel_auto_merge_path do |merge_request| presenter(merge_request).cancel_auto_merge_path end diff --git a/app/serializers/merge_request_widget_entity.rb b/app/serializers/merge_request_widget_entity.rb index eda7a36c2ee..2a81931c49f 100644 --- a/app/serializers/merge_request_widget_entity.rb +++ b/app/serializers/merge_request_widget_entity.rb @@ -3,6 +3,9 @@ class MergeRequestWidgetEntity < Grape::Entity include RequestAwareEntity + expose :id + expose :iid + expose :source_project_full_path do |merge_request| merge_request.source_project&.full_path end @@ -65,6 +68,8 @@ class MergeRequestWidgetEntity < Grape::Entity end def as_json(options = {}) + return super(options) if Feature.enabled?(:async_mr_widget) + super(options) .merge(MergeRequestPollCachedWidgetEntity.new(object, **@options.opts_hash).as_json(options)) .merge(MergeRequestPollWidgetEntity.new(object, **@options.opts_hash).as_json(options)) diff --git a/app/serializers/pipeline_entity.rb b/app/serializers/pipeline_entity.rb index 94e8b174f0f..cddb894fd64 100644 --- a/app/serializers/pipeline_entity.rb +++ b/app/serializers/pipeline_entity.rb @@ -77,6 +77,10 @@ class PipelineEntity < Grape::Entity cancel_project_pipeline_path(pipeline.project, pipeline) end + expose :failed_builds, if: -> (*) { can_retry? }, using: JobEntity do |pipeline| + pipeline.builds.failed + end + private alias_method :pipeline, :object |