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
56 57 58 59 60 |
# File 'app/models/decidim/elections/question.rb', line 56 def can_enable_voting? return false unless election.ongoing? !voting_enabled? end |
#max_votable_options ⇒ Object
30 31 32 33 34 |
# File 'app/models/decidim/elections/question.rb', line 30 def return .size if question_type == "multiple_option" 1 end |
#next_question ⇒ Object
40 41 42 |
# File 'app/models/decidim/elections/question.rb', line 40 def next_question sibling_questions.where("position > ?", position).first end |
#presenter ⇒ Object
48 49 50 |
# File 'app/models/decidim/elections/question.rb', line 48 def presenter Decidim::Elections::QuestionPresenter.new(self) end |
#previous_question ⇒ Object
44 45 46 |
# File 'app/models/decidim/elections/question.rb', line 44 def previous_question sibling_questions.where(position: ...position).last end |
#publishable_results? ⇒ Boolean
66 67 68 |
# File 'app/models/decidim/elections/question.rb', line 66 def publishable_results? !published_results? && election.per_question? && voting_enabled? end |
#published_results? ⇒ Boolean
62 63 64 |
# File 'app/models/decidim/elections/question.rb', line 62 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.
72 73 74 75 76 77 78 |
# File 'app/models/decidim/elections/question.rb', line 72 def safe_responses(response_ids) return [] if response_ids.blank? response_ids = Array(response_ids) .where(id: response_ids.take()) end |
#sibling_questions ⇒ Object
36 37 38 |
# File 'app/models/decidim/elections/question.rb', line 36 def sibling_questions @sibling_questions ||= election.per_question? ? election.questions.enabled.unpublished_results : election.questions end |
#total_votes ⇒ Object
80 81 82 |
# File 'app/models/decidim/elections/question.rb', line 80 def total_votes @total_votes ||= .sum(&:votes_count) end |
#voting_enabled? ⇒ Boolean
52 53 54 |
# File 'app/models/decidim/elections/question.rb', line 52 def voting_enabled? !published_results? && voting_enabled_at.present? end |