Extract controllers to support investments
Since we're going to add an action to remove supports, having a separate controller makes things easier. Note there was a strange piece of code which assumed users were not verified if they couldn't vote investments. Now the code is also strange, since it assumes users are not verified if they can't create votes. We might need to revisit these conditions if our logic changes in the future.
This commit is contained in:
@@ -10,9 +10,9 @@ class Budgets::Investments::VotesComponent < ApplicationComponent
|
|||||||
def vote_path
|
def vote_path
|
||||||
case namespace
|
case namespace
|
||||||
when "management"
|
when "management"
|
||||||
vote_management_budget_investment_path(investment.budget, investment, value: "yes")
|
management_budget_investment_votes_path(investment.budget, investment)
|
||||||
else
|
else
|
||||||
vote_budget_investment_path(investment.budget, investment, value: "yes")
|
budget_investment_votes_path(investment.budget, investment)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
21
app/controllers/budgets/investments/votes_controller.rb
Normal file
21
app/controllers/budgets/investments/votes_controller.rb
Normal file
@@ -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
|
||||||
@@ -90,19 +90,6 @@ module Budgets
|
|||||||
redirect_to user_path(current_user, filter: "budget_investments"), notice: t("flash.actions.destroy.budget_investment")
|
redirect_to user_path(current_user, filter: "budget_investments"), notice: t("flash.actions.destroy.budget_investment")
|
||||||
end
|
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
|
def suggest
|
||||||
@resource_path_method = :namespaced_budget_investment_path
|
@resource_path_method = :namespaced_budget_investment_path
|
||||||
@resource_relation = resource_model.where(budget: @budget).apply_filters_and_search(@budget, params, @current_filter)
|
@resource_relation = resource_model.where(budget: @budget).apply_filters_and_search(@budget, params, @current_filter)
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -38,19 +38,6 @@ class Management::Budgets::InvestmentsController < Management::BaseController
|
|||||||
def show
|
def show
|
||||||
end
|
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
|
def print
|
||||||
@investments = @investments.apply_filters_and_search(@budget, params).order(cached_votes_up: :desc).for_render.limit(15)
|
@investments = @investments.apply_filters_and_search(@budget, params).order(cached_votes_up: :desc).for_render.limit(15)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -99,7 +99,10 @@ module Abilities
|
|||||||
can :update, Budget::Investment, budget: { phase: "accepting" }, author_id: user.id
|
can :update, Budget::Investment, budget: { phase: "accepting" }, author_id: user.id
|
||||||
can :suggest, Budget::Investment, budget: { phase: "accepting" }
|
can :suggest, Budget::Investment, budget: { phase: "accepting" }
|
||||||
can :destroy, Budget::Investment, budget: { phase: ["accepting", "reviewing"] }, author_id: user.id
|
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 [:show, :create], Budget::Ballot, budget: { phase: "balloting" }
|
||||||
can [:create, :destroy], Budget::Ballot::Line, budget: { phase: "balloting" }
|
can [:create, :destroy], Budget::Ballot::Line, budget: { phase: "balloting" }
|
||||||
|
|||||||
@@ -277,7 +277,7 @@ class Budget
|
|||||||
def permission_problem(user)
|
def permission_problem(user)
|
||||||
return :not_logged_in unless user
|
return :not_logged_in unless user
|
||||||
return :organization if user.organization?
|
return :organization if user.organization?
|
||||||
return :not_verified unless user.can?(:vote, Budget::Investment)
|
return :not_verified unless user.can?(:create, ActsAsVotable::Vote)
|
||||||
|
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -2,12 +2,13 @@ resources :budgets, only: [:show, :index] do
|
|||||||
resources :groups, controller: "budgets/groups", only: [:show]
|
resources :groups, controller: "budgets/groups", only: [:show]
|
||||||
resources :investments, controller: "budgets/investments" do
|
resources :investments, controller: "budgets/investments" do
|
||||||
member do
|
member do
|
||||||
post :vote
|
|
||||||
put :flag
|
put :flag
|
||||||
put :unflag
|
put :unflag
|
||||||
end
|
end
|
||||||
|
|
||||||
collection { get :suggest }
|
collection { get :suggest }
|
||||||
|
|
||||||
|
resources :votes, controller: "budgets/investments/votes", only: :create
|
||||||
end
|
end
|
||||||
|
|
||||||
resource :ballot, only: :show, controller: "budgets/ballots" do
|
resource :ballot, only: :show, controller: "budgets/ballots" do
|
||||||
|
|||||||
@@ -39,8 +39,9 @@ namespace :management do
|
|||||||
end
|
end
|
||||||
|
|
||||||
resources :investments, only: [:index, :new, :create, :show, :destroy], controller: "budgets/investments" do
|
resources :investments, only: [:index, :new, :create, :show, :destroy], controller: "budgets/investments" do
|
||||||
post :vote, on: :member
|
|
||||||
get :print, on: :collection
|
get :print, on: :collection
|
||||||
|
|
||||||
|
resources :votes, controller: "budgets/investments/votes", only: :create
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -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_selecting_budget) }
|
||||||
it { should_not be_able_to(:create, investment_in_balloting_budget) }
|
it { should_not be_able_to(:create, investment_in_balloting_budget) }
|
||||||
|
|
||||||
it { should be_able_to(:vote, investment_in_selecting_budget) }
|
it { should be_able_to(:create, user.votes.build(votable: investment_in_selecting_budget)) }
|
||||||
it { should_not be_able_to(:vote, investment_in_accepting_budget) }
|
it { should_not be_able_to(:create, user.votes.build(votable: investment_in_accepting_budget)) }
|
||||||
it { should_not be_able_to(:vote, investment_in_balloting_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_accepting_budget) }
|
||||||
it { should_not be_able_to(:destroy, investment_in_reviewing_budget) }
|
it { should_not be_able_to(:destroy, investment_in_reviewing_budget) }
|
||||||
|
|||||||
Reference in New Issue
Block a user