Class: Decidim::Forms::QuestionnaireForm
- Inherits:
-
Decidim::Form
- Object
- Decidim::Form
- Decidim::Forms::QuestionnaireForm
- Includes:
- ActiveModel::Validations::Callbacks
- Defined in:
- app/forms/decidim/forms/questionnaire_form.rb
Overview
This class holds a Form to answer a questionnaire from Decidim’s public page.
Instance Method Summary collapse
-
#before_validation ⇒ Object
Add other responses to the context so AnswerForm can validate conditional questions.
-
#map_model(model) ⇒ Object
Private: Create the responses from the questionnaire questions.
-
#responses_by_step ⇒ Object
Public: Splits responses by step, keeping the separator.
- #session_token_in_context ⇒ Object
- #total_steps ⇒ Object
Instance Method Details
#before_validation ⇒ Object
Add other responses to the context so AnswerForm can validate conditional questions
32 33 34 |
# File 'app/forms/decidim/forms/questionnaire_form.rb', line 32 def before_validation context.responses = attributes[:responses] end |
#map_model(model) ⇒ Object
Private: Create the responses from the questionnaire questions
Returns nothing.
25 26 27 28 29 |
# File 'app/forms/decidim/forms/questionnaire_form.rb', line 25 def map_model(model) self.responses = model.questions.map do |question| AnswerForm.from_model(Decidim::Forms::Answer.new(question:)) end end |
#responses_by_step ⇒ Object
Public: Splits responses by step, keeping the separator.
Returns an array of steps. Each step is a list of the questions in that step, including the separator.
40 41 42 43 44 45 46 47 48 49 50 |
# File 'app/forms/decidim/forms/questionnaire_form.rb', line 40 def responses_by_step @responses_by_step ||= begin steps = responses.chunk_while do |a, b| !a.question.separator? || b.question.separator? end.to_a steps = [[]] if steps == [] steps end end |
#session_token_in_context ⇒ Object
56 57 58 59 60 |
# File 'app/forms/decidim/forms/questionnaire_form.rb', line 56 def session_token_in_context return if context&.session_token errors.add(:tos_agreement, I18n.t("activemodel.errors.models.questionnaire.request_invalid")) end |
#total_steps ⇒ Object
52 53 54 |
# File 'app/forms/decidim/forms/questionnaire_form.rb', line 52 def total_steps responses_by_step.count end |