Sha256: bbe2e66316f863588254ff37475c8f53eef112b870c0c0b2d25a980a0de0a744
Contents?: true
Size: 1.89 KB
Versions: 1
Compression:
Stored size: 1.89 KB
Contents
module Rapidfire class AttemptBuilder < Rapidfire::BaseService attr_accessor :user, :survey, :questions, :answers, :params, :attempt_id def initialize(params = {}) super(params) build_attempt(params[:attempt_id]) end def to_model @attempt end def save!(options = {}) params.each do |question_id, answer_attributes| answer = @attempt.answers.find { |a| a.question_id.to_s == question_id.to_s } next unless answer text = answer_attributes[:answer_text] # in case of checkboxes, values are submitted as an array of # strings. we will store answers as one big string separated # by delimiter. text = text.values if text.is_a?(ActionController::Parameters) answer.answer_text = if text.is_a?(Array) strip_checkbox_answers(text).join(Rapidfire.answers_delimiter) else text end end @attempt.save!(options) end def save(options = {}) save!(options) rescue ActiveRecord::ActiveRecordError => e # repopulate answers here in case of failure as they are not getting updated @answers = @survey.questions.collect do |question| @attempt.answers.find { |a| a.question_id == question.id } end false end private def build_attempt(attempt_id) if attempt_id.present? @attempt = Attempt.find(attempt_id) self.answers = @attempt.answers self.user = @attempt.user self.survey = @attempt.survey self.questions = @survey.questions else @attempt = Attempt.new(user: user, survey: survey) @answers = @survey.questions.collect do |question| @attempt.answers.build(question_id: question.id) end end end def strip_checkbox_answers(answers) answers.reject(&:blank?).reject { |t| t == "0" } end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rapidfire-4.0.0 | app/services/rapidfire/attempt_builder.rb |