# frozen_string_literal: true class DetailedStatusEntity < Grape::Entity include RequestAwareEntity expose :icon, documentation: { type: 'string', example: 'status_success' } expose :text, documentation: { type: 'string', example: 'passed' } expose :label, documentation: { type: 'string', example: 'passed' } expose :group, documentation: { type: 'string', example: 'success' } expose :status_tooltip, as: :tooltip, documentation: { type: 'string', example: 'passed' } expose :has_details?, as: :has_details, documentation: { type: 'boolean', example: true } expose :details_path, documentation: { type: 'string', example: '/test-group/test-project/-/pipelines/287' } expose :illustration, documentation: { type: 'object', example: <<~JSON { "image": "illustrations/job_not_triggered.svg", "size": "svg-306", "title": "This job has not been triggered yet", "content": "This job depends on upstream jobs that need to succeed in order for this job to be triggered" } JSON } do |status| illustration = { image: ActionController::Base.helpers.image_path(status.illustration[:image]) } illustration = status.illustration.merge(illustration) illustration rescue NotImplementedError # ignored end expose :favicon, documentation: { type: 'string', example: '/assets/ci_favicons/favicon_status_success.png' } do |status| Gitlab::Favicon.status_overlay(status.favicon) end expose :action, if: -> (status, _) { status.has_action? } do expose :action_icon, as: :icon, documentation: { type: 'string', example: 'cancel' } expose :action_title, as: :title, documentation: { type: 'string', example: 'Cancel' } expose :action_path, as: :path, documentation: { type: 'string', example: '/namespace1/project1/-/jobs/2/cancel' } expose :action_method, as: :method, documentation: { type: 'string', example: 'post' } expose :action_button_title, as: :button_title, documentation: { type: 'string', example: 'Cancel this job' } end end