summaryrefslogtreecommitdiff
path: root/app/serializers/environment_status_entity.rb
diff options
context:
space:
mode:
authorAlessio Caiazza <acaiazza@gitlab.com>2018-10-09 18:17:40 +0200
committerAlessio Caiazza <acaiazza@gitlab.com>2018-10-18 16:12:16 +0200
commit4a9efc606f5cdd9cf3aa34991543eb2f77555914 (patch)
tree29bfd4a795c5a2f77f6b8d46804f2fc7e8a83bc6 /app/serializers/environment_status_entity.rb
parentc09de611ea9d8cbff7a1696ee63262ef65972daa (diff)
downloadgitlab-ce-4a9efc606f5cdd9cf3aa34991543eb2f77555914.tar.gz
Move ci_environments_status to a model
GET :namespace/merge_requests/:id/ci_environments_status complexity already reached a limit for a direct serialization from an hash computed at within the controller function. Here we introduce a virtual model EnvironmentStatus and its serializer.
Diffstat (limited to 'app/serializers/environment_status_entity.rb')
-rw-r--r--app/serializers/environment_status_entity.rb60
1 files changed, 60 insertions, 0 deletions
diff --git a/app/serializers/environment_status_entity.rb b/app/serializers/environment_status_entity.rb
new file mode 100644
index 00000000000..62152dd1d40
--- /dev/null
+++ b/app/serializers/environment_status_entity.rb
@@ -0,0 +1,60 @@
+# frozen_string_literal: true
+
+class EnvironmentStatusEntity < Grape::Entity
+ include RequestAwareEntity
+
+ expose :id
+ expose :name
+
+ expose :url do |es|
+ project_environment_path(es.project, es.environment)
+ end
+
+ expose :metrics_url, if: ->(*) { can_read_environment? && environment.has_metrics? } do |es|
+ metrics_project_environment_deployment_path(es.project, es.environment, es.deployment)
+ end
+
+ expose :metrics_monitoring_url, if: ->(*) { can_read_environment? } do |es|
+ environment_metrics_path(es.environment)
+ end
+
+ expose :stop_url, if: ->(*) { can_stop_environment? } do |es|
+ stop_project_environment_path(es.project, es.environment)
+ end
+
+ expose :external_url do |es|
+ es.environment.external_url
+ end
+
+ expose :external_url_formatted do |es|
+ es.environment.formatted_external_url
+ end
+
+ expose :deployed_at
+
+ expose :deployed_at_formatted do |es|
+ es.deployment.try(:formatted_deployment_time)
+ end
+
+ private
+
+ def environment
+ object.environment
+ end
+
+ def project
+ object.environment.project
+ end
+
+ def current_user
+ request.current_user
+ end
+
+ def can_read_environment?
+ can?(current_user, :read_environment, environment)
+ end
+
+ def can_stop_environment?
+ can?(current_user, :stop_environment, environment)
+ end
+end