class Quby::Answers::Services::BuildAnswer

Attributes

given_attributes[R]
questionnaire[R]

Public Class Methods

new(questionnaire, given_attributes) click to toggle source
# File lib/quby/answers/services/build_answer.rb, line 10
def initialize(questionnaire, given_attributes)
  @questionnaire = questionnaire
  @given_attributes = given_attributes.with_indifferent_access
end

Public Instance Methods

build() click to toggle source
# File lib/quby/answers/services/build_answer.rb, line 15
def build
  Quby::Answers::Entities::Answer.new(**attributes)
end

Private Instance Methods

attributes() click to toggle source
# File lib/quby/answers/services/build_answer.rb, line 21
def attributes
  {
    questionnaire_key:    questionnaire.key,
    token:                SecureRandom.hex(8),
    dsl_last_update:      questionnaire.last_update,
    raw_params:           given_attributes.fetch(:raw_params,           {}),
    import_notes:         given_attributes.fetch(:import_notes,         {}),
    patient:              given_attributes.fetch(:patient,              {}),
    test:                 given_attributes.fetch(:test,                 false),
    outcome_generated_at: given_attributes.fetch(:outcome_generated_at, nil),
    scores:               given_attributes.fetch(:scores,               {}),
    actions:              given_attributes.fetch(:actions,              {}),
    completion:           given_attributes.fetch(:completion,           {}),
    started_at:           given_attributes.fetch(:started_at, nil),
    completed_at:         given_attributes.fetch(:completed_at,         nil),
    flags:                calculate_flags,
    textvars:             calculate_textvars,
    value:                calculate_value
  }
end
calculate_flags() click to toggle source
# File lib/quby/answers/services/build_answer.rb, line 49
def calculate_flags
  flags = given_attributes.fetch(:flags, {})
  questionnaire.filter_flags(flags)
end
calculate_textvars() click to toggle source
# File lib/quby/answers/services/build_answer.rb, line 54
def calculate_textvars
  given    = questionnaire.filter_textvars(given_attributes.fetch(:textvars, {}))
  defaults = questionnaire.default_textvars
  textvars = defaults.merge(given)

  textvars
end
calculate_value() click to toggle source
# File lib/quby/answers/services/build_answer.rb, line 42
def calculate_value
  quest_value = questionnaire.default_answer_value || {}
  given_value = given_attributes[:value] || {}

  quest_value.merge(given_value).stringify_keys
end