Class: Decidim::Proposals::VoteProposal
- Inherits:
-
Command
- Object
- Command
- Decidim::Proposals::VoteProposal
- Defined in:
- app/commands/decidim/proposals/vote_proposal.rb
Overview
A command with all the business logic when a user votes a proposal.
Instance Attribute Summary collapse
-
#vote ⇒ Object
readonly
Returns the value of attribute vote.
Instance Method Summary collapse
-
#call ⇒ Object
Executes the command.
-
#initialize(proposal, current_user) ⇒ VoteProposal
constructor
Public: Initializes the command.
Constructor Details
#initialize(proposal, current_user) ⇒ VoteProposal
Public: Initializes the command.
proposal - A Decidim::Proposals::Proposal object. current_user - The current user.
11 12 13 14 |
# File 'app/commands/decidim/proposals/vote_proposal.rb', line 11 def initialize(proposal, current_user) @proposal = proposal @current_user = current_user end |
Instance Attribute Details
#vote ⇒ Object (readonly)
Returns the value of attribute vote.
40 41 42 |
# File 'app/commands/decidim/proposals/vote_proposal.rb', line 40 def vote @vote end |
Instance Method Details
#call ⇒ Object
Executes the command. Broadcasts these events:
-
:ok when everything is valid, together with the proposal vote.
-
:invalid if the form was not valid and we could not proceed.
Returns nothing.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'app/commands/decidim/proposals/vote_proposal.rb', line 22 def call return broadcast(:invalid) if @proposal.maximum_votes_reached? && !@proposal.can_accumulate_votes_beyond_threshold build_proposal_vote return broadcast(:invalid) unless vote.valid? ActiveRecord::Base.transaction do @proposal.with_lock do vote.save! update_temporary_votes end end Decidim::Gamification.increment_score(@current_user, :proposal_votes) broadcast(:ok, vote) end |