Class: Decidim::Elections::Question

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

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.question_typesObject



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

Returns:

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



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

def max_votable_options
  return response_options.size if question_type == "multiple_option"

  1
end

#next_questionObject



39
40
41
# File 'decidim-elections/app/models/decidim/elections/question.rb', line 39

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

#presenterObject



47
48
49
# File 'decidim-elections/app/models/decidim/elections/question.rb', line 47

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

#previous_questionObject



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

Returns:

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

Returns:

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

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

#sibling_questionsObject



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

Returns:

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