From 5b3c096c9e0c9e8e7e1cb35c1b9e347995b948f5 Mon Sep 17 00:00:00 2001 From: Thong Kuah Date: Mon, 15 Oct 2018 16:37:51 +1300 Subject: Convert clusters to use a top-level controller In preparation so that we can create both cluster attached to project and cluster attached to group. - Move ClustersController to top level - Move Clusters::ApplicationsController to top-level too - Creates a Clusters::BaseController to share common functions - Do not rely on @project ivar. Anything could set the ivar. - Fix Vue page components due to new data-page value Because of the controller change we have gone from `projects:clusters:new` to `clusters:new`, so we need to update the file location of the page components. There is somewhere a function that will convert data-page to a file location. On that note, projects/clusters/gcp/new/, translate to Projects::Clusters::Gcp#new doesn't exist so replace that with clusters/create_gcp/ and clusters/create_user/ --- app/helpers/clusters_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/helpers/clusters_helper.rb') diff --git a/app/helpers/clusters_helper.rb b/app/helpers/clusters_helper.rb index 19eb763e1de..21ee95a6f20 100644 --- a/app/helpers/clusters_helper.rb +++ b/app/helpers/clusters_helper.rb @@ -10,7 +10,7 @@ module ClustersHelper return unless show_gcp_signup_offer? content_tag :section, class: 'no-animate expanded' do - render 'projects/clusters/gcp_signup_offer_banner' + render 'clusters/gcp_signup_offer_banner' end end end -- cgit v1.2.1 From 88800abcd8741b07114c2850e00b74fbecfbf90e Mon Sep 17 00:00:00 2001 From: Thong Kuah Date: Fri, 19 Oct 2018 14:42:30 +1300 Subject: Abstract out project out of ClustersController To the extent possible swap out `project` with `clusterable` - Abstract paths for showing cluster or clusters. This will allow us to swap in alternative paths for group level cluster - Push :project_id and :namespace_id params from the URL to the POST body. - Create a nice helper for to generate links for the destroy action For some reason, spec :project_id and :namespace_id param are not going through `to_param` for a JSON format. Manually call `to_param` to fix specs. - Move :layout to BaseController --- app/helpers/clusters_helper.rb | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'app/helpers/clusters_helper.rb') diff --git a/app/helpers/clusters_helper.rb b/app/helpers/clusters_helper.rb index 21ee95a6f20..4b4945adc4b 100644 --- a/app/helpers/clusters_helper.rb +++ b/app/helpers/clusters_helper.rb @@ -1,10 +1,19 @@ # frozen_string_literal: true module ClustersHelper - def has_multiple_clusters?(project) + # EE overrides this + def has_multiple_clusters? false end + def clusterable + @project + end + + def can_create_cluster? + can?(current_user, :create_cluster, clusterable) + end + def render_gcp_signup_offer return if Gitlab::CurrentSettings.current_application_settings.hide_third_party_offers? return unless show_gcp_signup_offer? @@ -13,4 +22,19 @@ module ClustersHelper render 'clusters/gcp_signup_offer_banner' end end + + def hidden_clusterable_fields + clusterable_params.map do |key, value| + hidden_field_tag(key, value) + end.reduce(&:safe_concat) + end + + def clusterable_params + case clusterable + when Project + { project_id: clusterable.to_param, namespace_id: clusterable.namespace.to_param } + else + {} + end + end end -- cgit v1.2.1 From 1163b235391668d53ae0cea80bc22d40b365e0a7 Mon Sep 17 00:00:00 2001 From: Thong Kuah Date: Tue, 30 Oct 2018 23:33:43 +1300 Subject: Move view and path concerns to presenters - Move show path for cluster to ClusterPresenter - Create ClusterablePresenter to encapsulate logic. Consolidates scattered methods from BaseController and ClustersHelper into an object. --- app/helpers/clusters_helper.rb | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) (limited to 'app/helpers/clusters_helper.rb') diff --git a/app/helpers/clusters_helper.rb b/app/helpers/clusters_helper.rb index 4b4945adc4b..360885fe179 100644 --- a/app/helpers/clusters_helper.rb +++ b/app/helpers/clusters_helper.rb @@ -6,14 +6,6 @@ module ClustersHelper false end - def clusterable - @project - end - - def can_create_cluster? - can?(current_user, :create_cluster, clusterable) - end - def render_gcp_signup_offer return if Gitlab::CurrentSettings.current_application_settings.hide_third_party_offers? return unless show_gcp_signup_offer? @@ -24,17 +16,8 @@ module ClustersHelper end def hidden_clusterable_fields - clusterable_params.map do |key, value| + clusterable.clusterable_params.map do |key, value| hidden_field_tag(key, value) end.reduce(&:safe_concat) end - - def clusterable_params - case clusterable - when Project - { project_id: clusterable.to_param, namespace_id: clusterable.namespace.to_param } - else - {} - end - end end -- cgit v1.2.1 From 1a1fdf8efe1923ba781e978e858c009264020e72 Mon Sep 17 00:00:00 2001 From: Thong Kuah Date: Thu, 1 Nov 2018 13:39:01 +1300 Subject: Resolve controller sharing concern Use ClustersController as base while having Projects::ClustersController to inform what `clusterable` is. Thanks @ayufan for the great suggestion ! - View changes to work with new approach - Fix javascript for new approach - Fix feature specs for new approach - Fix QA --- app/helpers/clusters_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/helpers/clusters_helper.rb') diff --git a/app/helpers/clusters_helper.rb b/app/helpers/clusters_helper.rb index 360885fe179..94042a2f560 100644 --- a/app/helpers/clusters_helper.rb +++ b/app/helpers/clusters_helper.rb @@ -11,7 +11,7 @@ module ClustersHelper return unless show_gcp_signup_offer? content_tag :section, class: 'no-animate expanded' do - render 'clusters/gcp_signup_offer_banner' + render 'clusters/clusters/gcp_signup_offer_banner' end end -- cgit v1.2.1 From 2c6a3f6a1a90fb4eb780e081a6673fd2e90c7dc1 Mon Sep 17 00:00:00 2001 From: Thong Kuah Date: Fri, 2 Nov 2018 10:38:17 +1300 Subject: Remove method as using nested resource routes We introduced hidden_clusterable_fields in this MR but it is no longer needed as we have gone back to nested resource routes which should provide the params such as `project_id`. --- app/helpers/clusters_helper.rb | 6 ------ 1 file changed, 6 deletions(-) (limited to 'app/helpers/clusters_helper.rb') diff --git a/app/helpers/clusters_helper.rb b/app/helpers/clusters_helper.rb index 94042a2f560..916dcb1a308 100644 --- a/app/helpers/clusters_helper.rb +++ b/app/helpers/clusters_helper.rb @@ -14,10 +14,4 @@ module ClustersHelper render 'clusters/clusters/gcp_signup_offer_banner' end end - - def hidden_clusterable_fields - clusterable.clusterable_params.map do |key, value| - hidden_field_tag(key, value) - end.reduce(&:safe_concat) - end end -- cgit v1.2.1