Class: Decidim::Elections::Question
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- Decidim::Elections::Question
- Includes:
- Traceable, TranslatableResource
- Defined in:
- decidim-elections/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
- #voting_enabled? ⇒ Boolean
Class Method Details
.question_types ⇒ Object
25 26 27 |
# File 'decidim-elections/app/models/decidim/elections/question.rb', line 25 def self.question_types %w(single_option multiple_option).freeze end |
Instance Method Details
#can_enable_voting? ⇒ Boolean
55 56 57 58 59 |
# File 'decidim-elections/app/models/decidim/elections/question.rb', line 55 def can_enable_voting? return false unless election.ongoing? !voting_enabled? end |
#max_votable_options ⇒ Object
29 30 31 32 33 |
# File 'decidim-elections/app/models/decidim/elections/question.rb', line 29 def return .size if question_type == "multiple_option" 1 end |
#next_question ⇒ Object
39 40 41 |
# File 'decidim-elections/app/models/decidim/elections/question.rb', line 39 def next_question sibling_questions.where("position > ?", position).first end |
#presenter ⇒ Object
47 48 49 |
# File 'decidim-elections/app/models/decidim/elections/question.rb', line 47 def presenter Decidim::Elections::QuestionPresenter.new(self) end |
#previous_question ⇒ Object
43 44 45 |
# File 'decidim-elections/app/models/decidim/elections/question.rb', line 43 def previous_question sibling_questions.where(position: ...position).last end |
#publishable_results? ⇒ Boolean
65 66 67 |
# File 'decidim-elections/app/models/decidim/elections/question.rb', line 65 def publishable_results? !published_results? && election.per_question? && voting_enabled? end |
#published_results? ⇒ Boolean
61 62 63 |
# File 'decidim-elections/app/models/decidim/elections/question.rb', line 61 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.
71 72 73 74 75 76 77 |
# File 'decidim-elections/app/models/decidim/elections/question.rb', line 71 def safe_responses(response_ids) return [] if response_ids.blank? response_ids = Array(response_ids) .where(id: response_ids.take()) end |
#sibling_questions ⇒ Object
35 36 37 |
# File 'decidim-elections/app/models/decidim/elections/question.rb', line 35 def sibling_questions @sibling_questions ||= election.per_question? ? election.questions.enabled.unpublished_results : election.questions end |
#voting_enabled? ⇒ Boolean
51 52 53 |
# File 'decidim-elections/app/models/decidim/elections/question.rb', line 51 def voting_enabled? !published_results? && voting_enabled_at.present? end |