Class: Decidim::Elections::Question

Inherits:
ApplicationRecord show all
Includes:
Traceable, TranslatableResource
Defined in:
app/models/decidim/elections/question.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.question_typesObject



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

Returns:

  • (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_optionsObject



30
31
32
33
34
35
# File 'app/models/decidim/elections/question.rb', line 30

def max_votable_options
  return max_choices if max_choices.present? && question_type == "multiple_option"
  return response_options.size if question_type == "multiple_option"

  1
end

#next_questionObject



41
42
43
# File 'app/models/decidim/elections/question.rb', line 41

def next_question
  sibling_questions.where("position > ?", position).first
end

#presenterObject



49
50
51
# File 'app/models/decidim/elections/question.rb', line 49

def presenter
  Decidim::Elections::QuestionPresenter.new(self)
end

#previous_questionObject



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

Returns:

  • (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

Returns:

  • (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)

  response_options.where(id: response_ids.take(max_votable_options))
end

#sibling_questionsObject



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_votesObject



81
82
83
# File 'app/models/decidim/elections/question.rb', line 81

def total_votes
  @total_votes ||= response_options.sum(&:votes_count)
end

#voting_enabled?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'app/models/decidim/elections/question.rb', line 53

def voting_enabled?
  !published_results? && voting_enabled_at.present?
end