Class: Decidim::Elections::Question
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- Decidim::Elections::Question
- Includes:
- Traceable, TranslatableResource
- Defined in:
- app/models/decidim/elections/question.rb
Class Method Summary collapse
Instance Method Summary collapse
- #can_enable_voting? ⇒ Boolean
- #max_votable_options ⇒ Object
- #next_question ⇒ Object
- #presenter ⇒ Object
- #previous_question ⇒ Object
- #publishable_results? ⇒ Boolean
- #published_results? ⇒ Boolean
-
#safe_responses(response_ids) ⇒ Object
returns the selected responses for this question, ensuring that the responses are valid for the current election and question type.
- #sibling_questions ⇒ Object
- #total_votes ⇒ Object
- #voting_enabled? ⇒ Boolean
Class Method Details
.question_types ⇒ Object
26 27 28 |
# File 'app/models/decidim/elections/question.rb', line 26 def self.question_types %w(single_option multiple_option).freeze end |
Instance Method Details
#can_enable_voting? ⇒ Boolean
57 58 59 60 61 |
# File 'app/models/decidim/elections/question.rb', line 57 def can_enable_voting? return false unless election.ongoing? !voting_enabled? end |
#max_votable_options ⇒ Object
30 31 32 33 34 35 |
# File 'app/models/decidim/elections/question.rb', line 30 def return max_choices if max_choices.present? && question_type == "multiple_option" return .size if question_type == "multiple_option" 1 end |
#next_question ⇒ Object
41 42 43 |
# File 'app/models/decidim/elections/question.rb', line 41 def next_question sibling_questions.where("position > ?", position).first end |
#presenter ⇒ Object
49 50 51 |
# File 'app/models/decidim/elections/question.rb', line 49 def presenter Decidim::Elections::QuestionPresenter.new(self) end |
#previous_question ⇒ Object
45 46 47 |
# File 'app/models/decidim/elections/question.rb', line 45 def previous_question sibling_questions.where(position: ...position).last end |
#publishable_results? ⇒ Boolean
67 68 69 |
# File 'app/models/decidim/elections/question.rb', line 67 def publishable_results? !published_results? && election.per_question? && voting_enabled? end |
#published_results? ⇒ Boolean
63 64 65 |
# File 'app/models/decidim/elections/question.rb', line 63 def published_results? published_results_at.present? end |
#safe_responses(response_ids) ⇒ Object
returns the selected responses for this question, ensuring that the responses are valid for the current election and question type.
73 74 75 76 77 78 79 |
# File 'app/models/decidim/elections/question.rb', line 73 def safe_responses(response_ids) return [] if response_ids.blank? response_ids = Array(response_ids) .where(id: response_ids.take()) end |
#sibling_questions ⇒ Object
37 38 39 |
# File 'app/models/decidim/elections/question.rb', line 37 def sibling_questions @sibling_questions ||= election.per_question? ? election.questions.enabled.unpublished_results : election.questions end |
#total_votes ⇒ Object
81 82 83 |
# File 'app/models/decidim/elections/question.rb', line 81 def total_votes @total_votes ||= .sum(&:votes_count) end |
#voting_enabled? ⇒ Boolean
53 54 55 |
# File 'app/models/decidim/elections/question.rb', line 53 def voting_enabled? !published_results? && voting_enabled_at.present? end |