class Quby::Answers::Entities::Answer
Attributes
_id[RW]
@return [String]
aborted[RW]
actions[W]
active[RW]
@return [Boolean]
completed_at[RW]
@return [Time]
completion[W]
created_at[RW]
@return [Time]
dsl_last_update[RW]
@return [Time]
extra_failed_validations[RW]
extra_question_values[RW]
For setting raw content values and failed validations
flags[RW]
@return [Hash<String, Boolean>]
import_notes[RW]
For answers that are imported from external sources @return [Hash]
outcome[RW]
@return [Outcome]
outcome_generated_at[RW]
patient[RW]
@return [Hash]
patient_id[RW]
@return [String]
questionnaire_id[RW]
@return [String]
questionnaire_key[RW]
@return [String]
raw_params[RW]
The raw form data (for recovery purposes) @return [Hash]
scores[W]
started_at[RW]
@return [Time]
test[RW]
@return [Boolean]
textvars[RW]
@return [Hash<String, String>]
token[RW]
@return [String]
updated_at[RW]
@return [Time]
value[RW]
The filtered and transformed form data @return [Hash]
Public Class Methods
new(_id: nil, questionnaire_id: nil, questionnaire_key: nil, questionnaire: nil, raw_params: nil, value: nil, patient_id: nil, patient: nil, token: nil, active: true, test: false, created_at: nil, updated_at: nil, started_at: nil, completed_at: nil, outcome: nil, outcome_generated_at: nil, scores: nil, actions: nil, completion: nil, dsl_last_update: nil, import_notes: nil, flags: nil, textvars: nil)
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 85 def initialize(_id: nil, questionnaire_id: nil, questionnaire_key: nil, questionnaire: nil, raw_params: nil, value: nil, patient_id: nil, patient: nil, token: nil, active: true, test: false, created_at: nil, updated_at: nil, started_at: nil, completed_at: nil, outcome: nil, outcome_generated_at: nil, scores: nil, actions: nil, completion: nil, dsl_last_update: nil, import_notes: nil, flags: nil, textvars: nil) self._id = _id self.questionnaire_id = questionnaire_id self.questionnaire_key = questionnaire_key self.raw_params = raw_params || {} self.value = value || {} self.patient_id = patient_id self.patient = patient || {} self.token = token self.active = active self.test = test self.created_at = created_at self.updated_at = updated_at self.started_at = started_at self.completed_at = completed_at self.outcome_generated_at = outcome_generated_at self.scores = scores || {} self.actions = actions || {} self.completion = completion || {} self.dsl_last_update = dsl_last_update self.import_notes = import_notes || {} self.flags = flags self.textvars = textvars @questionnaire = questionnaire end
Public Instance Methods
_id=(value)
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 122 def _id=(value) @_id = value.to_s end
action()
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 290 def action outcome.action end
actions()
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 282 def actions outcome.actions end
all_blank?()
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 317 def all_blank? questionnaire.questions.reduce(true) do |all_blank, question| next all_blank unless question all_blank and send(question.key).blank? end end
as_json(options = {})
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 304 def as_json(options = {}) attributes.merge( id: id, value_by_values: value_by_values, scores: scores, is_completed: self.completed? ? true : false ) end
attributes()
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 130 def attributes HashWithIndifferentAccess.new({ _id: _id, questionnaire_id: questionnaire_id, questionnaire_key: questionnaire_key, raw_params: raw_params, value: value, patient_id: patient_id, patient: patient, token: token, active: active, test: test, created_at: created_at, updated_at: updated_at, started_at: started_at, completed_at: completed_at, outcome_generated_at: outcome_generated_at, scores: scores, actions: actions, completion: completion, dsl_last_update: dsl_last_update, import_notes: import_notes, flags: flags, textvars: textvars }) end
completed?()
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 313 def completed? !all_blank? && valid? end
completion()
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 286 def completion outcome.completion end
enhance_by_dsl()
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 177 def enhance_by_dsl DSL.enhance(self) end
errors()
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 157 def errors @errors ||= ActiveModel::Errors.new(self) end
flags=(value)
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 294 def flags=(value) return unless value @flags = value.symbolize_keys end
id()
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 118 def id _id end
mark_completed(start_time)
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 170 def mark_completed(start_time) if completed? || @aborted self.started_at = start_time if started_at.blank? self.completed_at = Time.now if completed_at.blank? end end
outcome=(outcome)
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 263 def outcome=(outcome) self.scores = outcome.scores self.actions = outcome.actions self.completion = outcome.completion self.outcome_generated_at = outcome.generated_at end
questionnaire()
click to toggle source
Faux belongs_to :questionnaire
# File lib/quby/answers/entities/answer.rb, line 166 def questionnaire @questionnaire ||= Quby.questionnaires.find(questionnaire_key) end
score_objects()
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 274 def score_objects scores.map do |score_key, score_hash| score = Score.new score_schema: questionnaire.score_schemas[score_key], score_hash: score_hash [score_key, score] end.to_h.with_indifferent_access end
scores()
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 270 def scores outcome.scores end
textvars=(value)
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 299 def textvars=(value) return unless value @textvars = value.symbolize_keys end
to_param()
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 126 def to_param id end
url_params(options = {})
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 324 def url_params(options = {}) timestamp = Time.now.getgm.strftime("%Y-%m-%dT%H:%M:%S+00:00") plain_token = [Quby::Settings.shared_secret, token, timestamp].join('|') # double slash removed from return_url (it's either this or removing the # final slash in Settings.application_url) options.merge( display_mode: options[:display_mode] || "paged", token: token, timestamp: timestamp, hmac: Digest::SHA1.hexdigest(plain_token) ) end
valid?()
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 161 def valid? errors.empty? end
value_by_regular_values()
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 232 def value_by_regular_values result = {} if value result = value.dup value.each do |key, answer| question = questionnaire.questions.find { |q| q&.key.to_s == key.to_s } next unless question if question.type == :radio || question.type == :scale || question.type == :select option = question.options.find { |o| o.key.to_s == value[key].to_s } result[key] = option.value if option elsif question.type == :integer result[key] = answer.to_i if answer elsif question.type == :float result[key] = answer.to_f if answer end end end result rescue Exception => e if defined? Roqua::Support::Errors Roqua::Support::Errors.report e, root_path: Rails.root.to_s end raise e if Rails.env.development? || Rails.env.test? Rails.logger.error "RESCUED #{e.message} \n #{e.backtrace.join('\n')}" {} end
value_by_values()
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 208 def value_by_values result = {} if value result = value.dup value.each_key do |key| question = questionnaire.questions.find { |q| q&.key.to_s == key.to_s } if question and (question.type == :radio || question.type == :scale || question.type == :select) option = question.options.find { |o| o.key.to_s == value[key].to_s } if option result[key] = option.value.to_s end end end end result rescue Exception => e if defined? Roqua::Support::Errors Roqua::Support::Errors.report e, root_path: Rails.root.to_s end raise e if Rails.env.development? || Rails.env.test? Rails.logger.error "RESCUED #{e.message} \n #{e.backtrace.join('\n')}" {} end
Protected Instance Methods
add_error(question, validationtype, message)
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 353 def add_error(question, validationtype, message) errors.add(question.key, {message: message, valtype: validationtype}) end
calc_answered(qkeys)
click to toggle source
# File lib/quby/answers/entities/answer.rb, line 340 def calc_answered(qkeys) answered = 0 qkeys.each do |qk| ans = send(qk) if ans.is_a? Hash # in case of check_box, only count checked check_boxes as answered answered += (ans.values.sum >= 1 ? 1 : 0) elsif send(qk).present? answered += 1 end end answered end