class Quby::Answers::Services::UpdatesAnswers
Attributes
answer[R]
Public Class Methods
new(answer)
click to toggle source
# File lib/quby/answers/services/updates_answers.rb, line 12 def initialize(answer) @answer = answer end
Public Instance Methods
on_failure(&block)
click to toggle source
# File lib/quby/answers/services/updates_answers.rb, line 48 def on_failure(&block) @failure_callback = block end
on_success(&block)
click to toggle source
# File lib/quby/answers/services/updates_answers.rb, line 44 def on_success(&block) @success_callback = block end
update(new_attributes = {})
click to toggle source
# File lib/quby/answers/services/updates_answers.rb, line 16 def update(new_attributes = {}) save_raw_params_on_error(new_attributes) do attribute_filter = FiltersAnswerValue.new(answer.questionnaire) attribute_filter.filter(new_attributes).each { |name, value| answer.send("#{name}=", value) } answer.extend AnswerValidations answer.cleanup_input answer.validate_answers if answer.errors.empty? if new_attributes["rendered_at"].present? started_at = Time.at(new_attributes["rendered_at"].to_i) else started_at = nil end answer.mark_completed(started_at) answer.outcome = OutcomeCalculation.new(answer).calculate Quby.answers.update!(answer) succeed! else if defined? ::Roqua::Support ::Roqua::Support::Errors.report(Quby::ValidationError.new(answer.errors.full_messages)) end fail! end end end
Protected Instance Methods
fail!()
click to toggle source
# File lib/quby/answers/services/updates_answers.rb, line 77 def fail! @failure_callback.call if @failure_callback end
save_raw_params_on_error(new_attributes) { || ... }
click to toggle source
# File lib/quby/answers/services/updates_answers.rb, line 54 def save_raw_params_on_error(new_attributes) if new_attributes.respond_to?(:to_unsafe_h) answer.raw_params = new_attributes.to_unsafe_h else answer.raw_params = new_attributes end backup_answer = answer.clone yield rescue # we dont save answer since it probably has a weird state now, instead we save the a clone of answer # that just has the raw_params set on it, so we can do data recovery with the raw_params backup_answer.raw_params['could_not_update_at'] = DateTime.now.to_i # to note this is was a failed update Quby.answers.update!(backup_answer) raise end
succeed!()
click to toggle source
# File lib/quby/answers/services/updates_answers.rb, line 73 def succeed! @success_callback.call if @success_callback end