From 7731c0e59a7aa66c4b21cb3a58453fd52c59688c Mon Sep 17 00:00:00 2001 From: ricola Date: Sun, 6 Apr 2025 17:04:31 -0600 Subject: [PATCH] Factorize require_organizer and require_{draft,open,closed}_vote --- vote.rb | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/vote.rb b/vote.rb index 4c18d24..ddffd1d 100644 --- a/vote.rb +++ b/vote.rb @@ -146,7 +146,8 @@ end post '/votes/:id/edit' do require_login find_vote - redirect '/votes/' + @vote.secure_id unless @vote.state == 'draft' and @vote.users.exists?(current_user.id) + require_organizer + require_draft_vote @vote.title = params[:title] @vote.description = params[:description] @vote.save @@ -156,7 +157,8 @@ end post '/votes/:id/candidates' do require_login find_vote - redirect '/votes/' + @vote.secure_id unless @vote.state == 'draft' and @vote.users.exists?(current_user.id) + require_organizer + require_draft_vote @candidate = Candidate.new(name: params[:name], description: params[:description]) @candidate.vote = @vote @@ -167,7 +169,8 @@ end post '/votes/:id/candidates/:cid/delete' do require_login find_vote - redirect '/votes/' + @vote.secure_id unless @vote.state == 'draft' and @vote.users.exists?(current_user.id) + require_organizer + require_draft_vote @candidate = Candidate.find(params[:cid]) @candidate.destroy redirect '/votes/' + @vote.secure_id @@ -176,7 +179,8 @@ end post '/votes/:id/open' do require_login find_vote - redirect '/votes/' + @vote.secure_id unless @vote.state == 'draft' and @vote.users.exists?(current_user.id) + require_organizer + require_draft_vote @vote.state = 'open' @vote.save redirect '/votes/' + @vote.secure_id @@ -185,7 +189,8 @@ end post '/votes/:id/draft' do require_login find_vote - redirect '/votes/' + @vote.secure_id unless @vote.state == 'open' and @vote.users.exists?(current_user.id) + require_organizer + require_open_vote @vote.ratings.each {|r| r.destroy} @vote.state = 'draft' @vote.save @@ -195,7 +200,8 @@ end post '/votes/:id/close' do require_login find_vote - redirect '/votes/' + @vote.secure_id unless @vote.state == 'open' and @vote.users.exists?(current_user.id) + require_organizer + require_open_vote @vote.state = 'closed' @vote.save redirect '/votes/' + @vote.secure_id @@ -204,7 +210,8 @@ end post '/votes/:id/reopen' do require_login find_vote - redirect '/votes/' + @vote.secure_id unless @vote.state == 'closed' and @vote.users.exists?(current_user.id) + require_organizer + require_closed_vote @vote.state = 'open' @vote.save redirect '/votes/' + @vote.secure_id @@ -224,7 +231,7 @@ end post '/votes/:id/organizers' do require_login find_vote - redirect '/votes/' + @vote.secure_id unless @vote.users.exists?(current_user.id) + require_organizer user = User.find_by(email: params[:email]) @vote.users << user redirect '/votes/' + @vote.secure_id @@ -233,7 +240,7 @@ end post '/votes/:id/delete' do require_login find_vote - redirect '/votes/' + @vote.secure_id unless @vote.users.exists?(current_user.id) + require_organizer @vote.destroy redirect '/' end @@ -254,4 +261,20 @@ helpers do def find_vote(params) @vote = Vote.find_by(secure_id: params[:id]) end + + def require_organizer + redirect '/votes/' + @vote.secure_id unless @vote.users.exists?(current_user.id) + end + + def require_draft_vote + redirect '/votes/' + @vote.secure_id unless @vote.state == 'draft' + end + + def require_open_vote + redirect '/votes/' + @vote.secure_id unless @vote.state == 'open' + end + + def require_closed_vote + redirect '/votes/' + @vote.secure_id unless @vote.state == 'closed' + end end