diff --git a/app/components/budgets/investments/votes_component.rb b/app/components/budgets/investments/votes_component.rb index e7e601c18..1ab12de59 100644 --- a/app/components/budgets/investments/votes_component.rb +++ b/app/components/budgets/investments/votes_component.rb @@ -10,9 +10,9 @@ class Budgets::Investments::VotesComponent < ApplicationComponent def vote_path case namespace when "management" - vote_management_budget_investment_path(investment.budget, investment, value: "yes") + management_budget_investment_votes_path(investment.budget, investment) else - vote_budget_investment_path(investment.budget, investment, value: "yes") + budget_investment_votes_path(investment.budget, investment) end end diff --git a/app/controllers/budgets/investments/votes_controller.rb b/app/controllers/budgets/investments/votes_controller.rb new file mode 100644 index 000000000..26921d437 --- /dev/null +++ b/app/controllers/budgets/investments/votes_controller.rb @@ -0,0 +1,21 @@ +module Budgets + module Investments + class VotesController < ApplicationController + load_and_authorize_resource :budget + load_and_authorize_resource :investment, through: :budget, class: "Budget::Investment" + + def create + @investment.register_selection(current_user) + + respond_to do |format| + format.html do + redirect_to budget_investments_path(heading_id: @investment.heading.id), + notice: t("flash.actions.create.support") + end + + format.js + end + end + end + end +end diff --git a/app/controllers/budgets/investments_controller.rb b/app/controllers/budgets/investments_controller.rb index b07d25b24..6286fe13b 100644 --- a/app/controllers/budgets/investments_controller.rb +++ b/app/controllers/budgets/investments_controller.rb @@ -90,19 +90,6 @@ module Budgets redirect_to user_path(current_user, filter: "budget_investments"), notice: t("flash.actions.destroy.budget_investment") end - def vote - @investment.register_selection(current_user) - - respond_to do |format| - format.html do - redirect_to budget_investments_path(heading_id: @investment.heading.id), - notice: t("flash.actions.create.support") - end - - format.js - end - end - def suggest @resource_path_method = :namespaced_budget_investment_path @resource_relation = resource_model.where(budget: @budget).apply_filters_and_search(@budget, params, @current_filter) diff --git a/app/controllers/management/budgets/investments/votes_controller.rb b/app/controllers/management/budgets/investments/votes_controller.rb new file mode 100644 index 000000000..f96ec1ed6 --- /dev/null +++ b/app/controllers/management/budgets/investments/votes_controller.rb @@ -0,0 +1,17 @@ +class Management::Budgets::Investments::VotesController < Management::BaseController + load_resource :budget, find_by: :slug_or_id + load_resource :investment, through: :budget, class: "Budget::Investment" + + def create + @investment.register_selection(managed_user) + + respond_to do |format| + format.html do + redirect_to management_budget_investments_path(heading_id: @investment.heading.id), + notice: t("flash.actions.create.support") + end + + format.js + end + end +end diff --git a/app/controllers/management/budgets/investments_controller.rb b/app/controllers/management/budgets/investments_controller.rb index 68abcbb84..627964a69 100644 --- a/app/controllers/management/budgets/investments_controller.rb +++ b/app/controllers/management/budgets/investments_controller.rb @@ -38,19 +38,6 @@ class Management::Budgets::InvestmentsController < Management::BaseController def show end - def vote - @investment.register_selection(managed_user) - - respond_to do |format| - format.html do - redirect_to management_budget_investments_path(heading_id: @investment.heading.id), - notice: t("flash.actions.create.support") - end - - format.js - end - end - def print @investments = @investments.apply_filters_and_search(@budget, params).order(cached_votes_up: :desc).for_render.limit(15) end diff --git a/app/models/abilities/common.rb b/app/models/abilities/common.rb index dc2563492..24f86638f 100644 --- a/app/models/abilities/common.rb +++ b/app/models/abilities/common.rb @@ -99,7 +99,10 @@ module Abilities can :update, Budget::Investment, budget: { phase: "accepting" }, author_id: user.id can :suggest, Budget::Investment, budget: { phase: "accepting" } can :destroy, Budget::Investment, budget: { phase: ["accepting", "reviewing"] }, author_id: user.id - can :vote, Budget::Investment, budget: { phase: "selecting" } + can :create, ActsAsVotable::Vote, + voter_id: user.id, + votable_type: "Budget::Investment", + votable: { budget: { phase: "selecting" }} can [:show, :create], Budget::Ballot, budget: { phase: "balloting" } can [:create, :destroy], Budget::Ballot::Line, budget: { phase: "balloting" } diff --git a/app/models/budget/investment.rb b/app/models/budget/investment.rb index 75e83f5ff..79f0e6cde 100644 --- a/app/models/budget/investment.rb +++ b/app/models/budget/investment.rb @@ -277,7 +277,7 @@ class Budget def permission_problem(user) return :not_logged_in unless user return :organization if user.organization? - return :not_verified unless user.can?(:vote, Budget::Investment) + return :not_verified unless user.can?(:create, ActsAsVotable::Vote) nil end diff --git a/app/views/budgets/investments/vote.js.erb b/app/views/budgets/investments/votes/create.js.erb similarity index 100% rename from app/views/budgets/investments/vote.js.erb rename to app/views/budgets/investments/votes/create.js.erb diff --git a/app/views/management/budgets/investments/vote.js.erb b/app/views/management/budgets/investments/votes/create.js.erb similarity index 100% rename from app/views/management/budgets/investments/vote.js.erb rename to app/views/management/budgets/investments/votes/create.js.erb diff --git a/config/routes/budget.rb b/config/routes/budget.rb index bed9b7324..82794855f 100644 --- a/config/routes/budget.rb +++ b/config/routes/budget.rb @@ -2,12 +2,13 @@ resources :budgets, only: [:show, :index] do resources :groups, controller: "budgets/groups", only: [:show] resources :investments, controller: "budgets/investments" do member do - post :vote put :flag put :unflag end collection { get :suggest } + + resources :votes, controller: "budgets/investments/votes", only: :create end resource :ballot, only: :show, controller: "budgets/ballots" do diff --git a/config/routes/management.rb b/config/routes/management.rb index 7b35850b9..77afca888 100644 --- a/config/routes/management.rb +++ b/config/routes/management.rb @@ -39,8 +39,9 @@ namespace :management do end resources :investments, only: [:index, :new, :create, :show, :destroy], controller: "budgets/investments" do - post :vote, on: :member get :print, on: :collection + + resources :votes, controller: "budgets/investments/votes", only: :create end end end diff --git a/spec/models/abilities/common_spec.rb b/spec/models/abilities/common_spec.rb index 2cd3815f4..fc1bd62eb 100644 --- a/spec/models/abilities/common_spec.rb +++ b/spec/models/abilities/common_spec.rb @@ -248,9 +248,9 @@ describe Abilities::Common do it { should_not be_able_to(:create, investment_in_selecting_budget) } it { should_not be_able_to(:create, investment_in_balloting_budget) } - it { should be_able_to(:vote, investment_in_selecting_budget) } - it { should_not be_able_to(:vote, investment_in_accepting_budget) } - it { should_not be_able_to(:vote, investment_in_balloting_budget) } + it { should be_able_to(:create, user.votes.build(votable: investment_in_selecting_budget)) } + it { should_not be_able_to(:create, user.votes.build(votable: investment_in_accepting_budget)) } + it { should_not be_able_to(:create, user.votes.build(votable: investment_in_balloting_budget)) } it { should_not be_able_to(:destroy, investment_in_accepting_budget) } it { should_not be_able_to(:destroy, investment_in_reviewing_budget) }