Class: Decidim::Forms::AnswerForm
Overview
This class holds a Form to save the questionnaire answers from Decidim’s public page
Constant Summary
AttributeObject::TypeMap::Boolean, AttributeObject::TypeMap::Decimal
Instance Attribute Summary collapse
#context
Instance Method Summary
collapse
empty_translatable, ensure_translatable, multi_translation, translated_in_current_locale?
#default_locale?
ensure_hash, from_model, from_params, hash_from, infer_model_name, mimic, mimicked_model_name, model_name, #persisted?, #to_key, #to_model, #to_param, #valid?, #with_context
#[], #[]=, #attributes, #attributes_with_values, #initialize, #to_h
Instance Attribute Details
#question ⇒ Object
30
31
32
|
# File 'decidim-forms/app/forms/decidim/forms/answer_form.rb', line 30
def question
@question ||= Decidim::Forms::Question.find(question_id)
end
|
Instance Method Details
#custom_choices ⇒ Object
57
58
59
|
# File 'decidim-forms/app/forms/decidim/forms/answer_form.rb', line 57
def custom_choices
choices.select(&:custom_body)
end
|
#display_conditions_fulfilled? ⇒ Boolean
61
62
63
64
65
|
# File 'decidim-forms/app/forms/decidim/forms/answer_form.rb', line 61
def display_conditions_fulfilled?
return optional_conditions_fulfilled? unless question.display_conditions.where(mandatory: true).any?
mandatory_conditions_fulfilled?
end
|
#has_attachments? ⇒ Boolean
83
84
85
|
# File 'decidim-forms/app/forms/decidim/forms/answer_form.rb', line 83
def has_attachments?
question.has_attachments? && errors[:add_documents].empty? && add_documents.present?
end
|
#has_error_in_attachments? ⇒ Boolean
87
88
89
|
# File 'decidim-forms/app/forms/decidim/forms/answer_form.rb', line 87
def has_error_in_attachments?
errors[:add_documents].present?
end
|
#label ⇒ Object
34
35
36
37
38
39
|
# File 'decidim-forms/app/forms/decidim/forms/answer_form.rb', line 34
def label
base = translated_attribute(question.body)
base += " #{mandatory_label}" if question.mandatory?
base += " (#{max_choices_label})" if question.max_choices
base
end
|
#mandatory_conditions_fulfilled? ⇒ Boolean
67
68
69
70
71
72
|
# File 'decidim-forms/app/forms/decidim/forms/answer_form.rb', line 67
def mandatory_conditions_fulfilled?
question.display_conditions.where(mandatory: true).all? do |condition|
answer = context.responses&.find { |r| r.question_id&.to_i == condition.condition_question.id }
condition.fulfilled?(answer)
end
end
|
#map_model(model) ⇒ Object
Public: Map the correct fields.
Returns nothing.
44
45
46
47
48
49
50
51
|
# File 'decidim-forms/app/forms/decidim/forms/answer_form.rb', line 44
def map_model(model)
self.question_id = model.decidim_question_id
self.question = model.question
self.choices = model.choices.map do |choice|
AnswerChoiceForm.from_model(choice)
end
end
|
#optional_conditions_fulfilled? ⇒ Boolean
74
75
76
77
78
79
80
81
|
# File 'decidim-forms/app/forms/decidim/forms/answer_form.rb', line 74
def optional_conditions_fulfilled?
return true unless question.display_conditions.where(mandatory: false).any?
question.display_conditions.where(mandatory: false).any? do |condition|
answer = context.responses&.find { |r| r.question_id&.to_i == condition.condition_question.id }
condition.fulfilled?(answer)
end
end
|
#selected_choices ⇒ Object
53
54
55
|
# File 'decidim-forms/app/forms/decidim/forms/answer_form.rb', line 53
def selected_choices
choices.select(&:body)
end
|
91
92
93
|
# File 'decidim-forms/app/forms/decidim/forms/answer_form.rb', line 91
def sorting?
question.question_type == "sorting"
end
|