class Decidim::TimeTracker::TimeTrackerActivityQuestionnaireAnswersSerializer
This class serializes the answers given by a User for questionnaire so can be exported to CSV, JSON or other formats.
Public Class Methods
new(answers)
click to toggle source
Public: Initializes the serializer with a collection of Answers.
# File lib/decidim/time_tracker/time_tracker_activity_questionnaire_answers_serializer.rb, line 11 def initialize(answers) @answers = answers end
Public Instance Methods
serialize()
click to toggle source
Public: Exports a hash with the serialized data for the user answers.
# File lib/decidim/time_tracker/time_tracker_activity_questionnaire_answers_serializer.rb, line 16 def serialize @answers.each_with_index.inject({}) do |serialized, (answer, idx)| serialized.update( answer_translated_attribute_name(:id) => answer.id, answer_translated_attribute_name(:created_at) => answer.created_at.to_s(:db), answer_translated_attribute_name(:ip_hash) => answer.ip_hash, answer_translated_attribute_name(:user_status) => answer_translated_attribute_name(answer.decidim_user_id.present? ? "registered" : "unregistered"), answer_translated_attribute_name(:task_id) => task_for(answer).id, answer_translated_attribute_name(:task_name) => task_for(answer).name, answer_translated_attribute_name(:activity_id) => activity_for(answer).id, answer_translated_attribute_name(:activity_description) => activity_for(answer).description, "#{idx + 1}. #{translated_attribute(answer.question.body)}" => normalize_body(answer) ) end end
Private Instance Methods
activity_for(answer)
click to toggle source
# File lib/decidim/time_tracker/time_tracker_activity_questionnaire_answers_serializer.rb, line 69 def activity_for(answer) Activity.find(answer.session_token.split("-").last) end
answer_translated_attribute_name(attribute)
click to toggle source
# File lib/decidim/time_tracker/time_tracker_activity_questionnaire_answers_serializer.rb, line 61 def answer_translated_attribute_name(attribute) I18n.t(attribute.to_sym, scope: "decidim.time_tracker.time_tracker_activity_questionnaire_answers_serializer") end
normalize_body(answer)
click to toggle source
# File lib/decidim/time_tracker/time_tracker_activity_questionnaire_answers_serializer.rb, line 34 def normalize_body(answer) answer.body || normalize_choices(answer, answer.choices) end
normalize_choices(answer, choices)
click to toggle source
# File lib/decidim/time_tracker/time_tracker_activity_questionnaire_answers_serializer.rb, line 38 def normalize_choices(answer, choices) if answer.question.matrix? normalize_matrix_choices(answer, choices) else choices.map do |choice| choice.try(:custom_body) || choice.try(:body) end end end
normalize_matrix_choices(answer, choices)
click to toggle source
# File lib/decidim/time_tracker/time_tracker_activity_questionnaire_answers_serializer.rb, line 48 def normalize_matrix_choices(answer, choices) answer.question.matrix_rows.map do |matrix_row| row_body = translated_attribute(matrix_row.body) row_choices = answer.question.answer_options.map do |answer_option| choice = choices.find_by(matrix_row: matrix_row, answer_option: answer_option) choice.try(:custom_body) || choice.try(:body) end [row_body, row_choices] end.to_h end
task_for(answer)
click to toggle source
# File lib/decidim/time_tracker/time_tracker_activity_questionnaire_answers_serializer.rb, line 65 def task_for(answer) activity_for(answer).task end