summaryrefslogtreecommitdiff
path: root/app/controllers
diff options
context:
space:
mode:
authorThong Kuah <tkuah@gitlab.com>2018-11-01 13:39:01 +1300
committerThong Kuah <tkuah@gitlab.com>2018-11-01 19:37:33 +1300
commit1a1fdf8efe1923ba781e978e858c009264020e72 (patch)
treedf98af221d7a722e4c67db450b78a5488bff6a3c /app/controllers
parent28dabc67f4db8271ac20c0db458ae2c86a906eee (diff)
downloadgitlab-ce-1a1fdf8efe1923ba781e978e858c009264020e72.tar.gz
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
Diffstat (limited to 'app/controllers')
-rw-r--r--app/controllers/clusters/base_controller.rb32
-rw-r--r--app/controllers/clusters/clusters_controller.rb (renamed from app/controllers/clusters_controller.rb)22
-rw-r--r--app/controllers/projects/clusters/applications_controller.rb17
-rw-r--r--app/controllers/projects/clusters_controller.rb24
4 files changed, 55 insertions, 40 deletions
diff --git a/app/controllers/clusters/base_controller.rb b/app/controllers/clusters/base_controller.rb
index 3a8575769c4..ef42f7c4074 100644
--- a/app/controllers/clusters/base_controller.rb
+++ b/app/controllers/clusters/base_controller.rb
@@ -2,31 +2,25 @@
class Clusters::BaseController < ApplicationController
include RoutableActions
- include ProjectUnauthorized
skip_before_action :authenticate_user!
- before_action :require_project_id
- before_action :project, if: :project_type?
- before_action :repository, if: :project_type?
before_action :authorize_read_cluster!
- layout :determine_layout
-
helper_method :clusterable
private
- # We can extend to `#group_type?` in the future
- def require_project_id
- not_found unless project_type?
+ def cluster
+ @cluster ||= clusterable.clusters.find(params[:id])
+ .present(current_user: current_user)
end
- def project
- @project ||= find_routable!(Project, File.join(params[:namespace_id], params[:project_id]), not_found_or_authorized_proc: project_unauthorized_proc)
+ def authorize_update_cluster!
+ access_denied! unless can?(current_user, :update_cluster, cluster)
end
- def repository
- @repository ||= project.repository
+ def authorize_admin_cluster!
+ access_denied! unless can?(current_user, :admin_cluster, cluster)
end
def authorize_read_cluster!
@@ -37,17 +31,7 @@ class Clusters::BaseController < ApplicationController
access_denied! unless can?(current_user, :create_cluster, clusterable)
end
- def determine_layout
- if project_type?
- 'project'
- end
- end
-
def clusterable
- @clusterable ||= ClusterablePresenter.fabricate(project, current_user: current_user)
- end
-
- def project_type?
- params[:project_id].present?
+ raise NotImplementedError
end
end
diff --git a/app/controllers/clusters_controller.rb b/app/controllers/clusters/clusters_controller.rb
index 7aad70870ba..f6f2060ebb5 100644
--- a/app/controllers/clusters_controller.rb
+++ b/app/controllers/clusters/clusters_controller.rb
@@ -1,6 +1,8 @@
# frozen_string_literal: true
-class ClustersController < Clusters::BaseController
+class Clusters::ClustersController < Clusters::BaseController
+ include RoutableActions
+
before_action :cluster, except: [:index, :new, :create_gcp, :create_user]
before_action :generate_gcp_authorize_url, only: [:new]
before_action :validate_gcp_token, only: [:new]
@@ -9,7 +11,7 @@ class ClustersController < Clusters::BaseController
before_action :authorize_create_cluster!, only: [:new]
before_action :authorize_update_cluster!, only: [:update]
before_action :authorize_admin_cluster!, only: [:destroy]
- before_action :update_applications_status, only: [:status]
+ before_action :update_applications_status, only: [:cluster_status]
helper_method :token_in_session
@@ -23,7 +25,8 @@ class ClustersController < Clusters::BaseController
def new
end
- def status
+ # Overridding ActionController::Metal#status is NOT a good idea
+ def cluster_status
respond_to do |format|
format.json do
Gitlab::PollingInterval.set_header(response, interval: STATUS_POLLING_INTERVAL)
@@ -107,11 +110,6 @@ class ClustersController < Clusters::BaseController
private
- def cluster
- @cluster ||= clusterable.clusters.find(params[:id])
- .present(current_user: current_user)
- end
-
def update_params
if cluster.managed?
params.require(:cluster).permit(
@@ -214,14 +212,6 @@ class ClustersController < Clusters::BaseController
end
end
- def authorize_update_cluster!
- access_denied! unless can?(current_user, :update_cluster, cluster)
- end
-
- def authorize_admin_cluster!
- access_denied! unless can?(current_user, :admin_cluster, cluster)
- end
-
def update_applications_status
@cluster.applications.each(&:schedule_status_update)
end
diff --git a/app/controllers/projects/clusters/applications_controller.rb b/app/controllers/projects/clusters/applications_controller.rb
new file mode 100644
index 00000000000..c7b6218d007
--- /dev/null
+++ b/app/controllers/projects/clusters/applications_controller.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class Projects::Clusters::ApplicationsController < Clusters::ApplicationsController
+ include ProjectUnauthorized
+
+ prepend_before_action :project
+
+ private
+
+ def clusterable
+ @clusterable ||= ClusterablePresenter.fabricate(project, current_user: current_user)
+ end
+
+ def project
+ @project ||= find_routable!(Project, File.join(params[:namespace_id], params[:project_id]), not_found_or_authorized_proc: project_unauthorized_proc)
+ end
+end
diff --git a/app/controllers/projects/clusters_controller.rb b/app/controllers/projects/clusters_controller.rb
new file mode 100644
index 00000000000..feda6deeaa6
--- /dev/null
+++ b/app/controllers/projects/clusters_controller.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+class Projects::ClustersController < Clusters::ClustersController
+ include ProjectUnauthorized
+
+ prepend_before_action :project
+ before_action :repository
+
+ layout 'project'
+
+ private
+
+ def clusterable
+ @clusterable ||= ClusterablePresenter.fabricate(project, current_user: current_user)
+ end
+
+ def project
+ @project ||= find_routable!(Project, File.join(params[:namespace_id], params[:project_id]), not_found_or_authorized_proc: project_unauthorized_proc)
+ end
+
+ def repository
+ @repository ||= project.repository
+ end
+end