Created ProtectedRefsController to reduce Tags/Branches duplication

Fixes ProtectedBranches#create flash errors bug due to
typo in 'flash[:alert] = @protected_branches.errors'
This commit is contained in:
James Edwards-Jones 2017-04-03 21:00:51 +01:00
parent 9f4b8dba80
commit 3c91841d03
3 changed files with 86 additions and 82 deletions

View file

@ -1,58 +1,36 @@
class Projects::ProtectedBranchesController < Projects::ApplicationController
include RepositorySettingsRedirect
# Authorize
before_action :require_non_empty_project
before_action :authorize_admin_project!
before_action :load_protected_branch, only: [:show, :update, :destroy]
class Projects::ProtectedBranchesController < Projects::ProtectedRefsController
layout "project_settings"
protected
def index
redirect_to_repository_settings(@project)
def protected_ref
@protected_branch
end
def create
@protected_branch = ::ProtectedBranches::CreateService.new(@project, current_user, protected_branch_params).execute
unless @protected_branch.persisted?
flash[:alert] = @protected_branches.errors.full_messages.join(', ').html_safe
end
redirect_to_repository_settings(@project)
def protected_ref=(val)
@protected_branch = val
end
def show
@matching_branches = @protected_branch.matching(@project.repository.branches)
def matching_refs=(val)
@matching_branches = val
end
def update
@protected_branch = ::ProtectedBranches::UpdateService.new(@project, current_user, protected_branch_params).execute(@protected_branch)
if @protected_branch.valid?
respond_to do |format|
format.json { render json: @protected_branch, status: :ok }
end
else
respond_to do |format|
format.json { render json: @protected_branch.errors, status: :unprocessable_entity }
end
end
def project_refs
@project.repository.branches
end
def destroy
@protected_branch.destroy
respond_to do |format|
format.html { redirect_to_repository_settings(@project) }
format.js { head :ok }
end
def create_service
::ProtectedBranches::CreateService
end
private
def load_protected_branch
@protected_branch = @project.protected_branches.find(params[:id])
def update_service
::ProtectedBranches::UpdateService
end
def protected_branch_params
def load_protected_ref
self.protected_ref = @project.protected_branches.find(params[:id])
end
def protected_ref_params
params.require(:protected_branch).permit(:name,
merge_access_levels_attributes: [:access_level, :id],
push_access_levels_attributes: [:access_level, :id])

View file

@ -0,0 +1,48 @@
class Projects::ProtectedRefsController < Projects::ApplicationController
include RepositorySettingsRedirect
# Authorize
before_action :require_non_empty_project
before_action :authorize_admin_project!
before_action :load_protected_ref, only: [:show, :update, :destroy]
layout "project_settings"
def index
redirect_to_repository_settings(@project)
end
def create
self.protected_ref = create_service.new(@project, current_user, protected_ref_params).execute
unless protected_ref.persisted?
flash[:alert] = protected_ref.errors.full_messages.join(', ').html_safe
end
redirect_to_repository_settings(@project)
end
def show
self.matching_refs = protected_ref.matching(project_refs)
end
def update
self.protected_ref = update_service.new(@project, current_user, protected_ref_params).execute(protected_ref)
if protected_ref.valid?
respond_to do |format|
format.json { render json: protected_ref, status: :ok }
end
else
respond_to do |format|
format.json { render json: protected_ref.errors, status: :unprocessable_entity }
end
end
end
def destroy
protected_ref.destroy
respond_to do |format|
format.html { redirect_to_repository_settings(@project) }
format.js { head :ok }
end
end
end

View file

@ -1,58 +1,36 @@
class Projects::ProtectedTagsController < Projects::ApplicationController
include RepositorySettingsRedirect
# Authorize
before_action :require_non_empty_project
before_action :authorize_admin_project!
before_action :load_protected_tag, only: [:show, :update, :destroy]
class Projects::ProtectedTagsController < Projects::ProtectedRefsController
layout "project_settings"
protected
def index
redirect_to_repository_settings(@project)
def protected_ref
@protected_tag
end
def create
@protected_tag = ::ProtectedTags::CreateService.new(@project, current_user, protected_tag_params).execute
unless @protected_tag.persisted?
flash[:alert] = @protected_tags.errors.full_messages.join(', ').html_safe
end
redirect_to_repository_settings(@project)
def protected_ref=(val)
@protected_tag = val
end
def show
@matching_tags = @protected_tag.matching(@project.repository.tags)
def matching_refs=(val)
@matching_tags = val
end
def update
@protected_tag = ::ProtectedTags::UpdateService.new(@project, current_user, protected_tag_params).execute(@protected_tag)
if @protected_tag.valid?
respond_to do |format|
format.json { render json: @protected_tag, status: :ok }
end
else
respond_to do |format|
format.json { render json: @protected_tag.errors, status: :unprocessable_entity }
end
end
def project_refs
@project.repository.tags
end
def destroy
@protected_tag.destroy
respond_to do |format|
format.html { redirect_to_repository_settings(@project) }
format.js { head :ok }
end
def create_service
::ProtectedTags::CreateService
end
private
def load_protected_tag
@protected_tag = @project.protected_tags.find(params[:id])
def update_service
::ProtectedTags::UpdateService
end
def protected_tag_params
def load_protected_ref
self.protected_ref = @project.protected_tags.find(params[:id])
end
def protected_ref_params
params.require(:protected_tag).permit(:name, push_access_levels_attributes: [:access_level, :id])
end
end