Class: AtomicAssessmentsImport::CSV::Questions::Question

Inherits:
Object
  • Object
show all
Defined in:
lib/atomic_assessments_import/csv/questions/question.rb

Direct Known Subclasses

MultipleChoice

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(row) ⇒ Question

Returns a new instance of Question.



7
8
9
10
11
# File 'lib/atomic_assessments_import/csv/questions/question.rb', line 7

def initialize(row)
  @row = row
  # @question_reference = Digest::UUID.uuid_v5(Digest::UUID::URL_NAMESPACE, "#{@item_url}/question")
  @reference = SecureRandom.uuid
end

Instance Attribute Details

#referenceObject (readonly)

Returns the value of attribute reference.



22
23
24
# File 'lib/atomic_assessments_import/csv/questions/question.rb', line 22

def reference
  @reference
end

Class Method Details

.load(row) ⇒ Object



13
14
15
16
17
18
19
20
# File 'lib/atomic_assessments_import/csv/questions/question.rb', line 13

def self.load(row)
  case row["question type"]
  when nil, "", /multiple choice/i, /mcq/i
    MultipleChoice.new(row)
  else
    raise NotImplementedError, "Unknown question type"
  end
end

Instance Method Details

#metadataObject



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/atomic_assessments_import/csv/questions/question.rb', line 40

def 
  {
    distractor_rationale: @row["distractor rationale"],
    sample_answer: @row["sample answer"],
    acknowledgements: @row["acknowledgements"],
    general_feedback: @row["general feedback"],
    correct_feedback: @row["correct feedback"],
    partially_correct_feedback: @row["partially correct feedback"],
    incorrect_feedback: @row["incorrect feedback"],
  }.compact
end

#pointsObject



65
66
67
68
69
70
71
72
73
# File 'lib/atomic_assessments_import/csv/questions/question.rb', line 65

def points
  if @row["points"].blank?
    1
  else
    Float(@row["points"])
  end
rescue ArgumentError
  1
end

#question_dataObject



28
29
30
31
32
33
34
35
36
37
38
# File 'lib/atomic_assessments_import/csv/questions/question.rb', line 28

def question_data
  {
    stimulus: @row["question text"],
    type: question_type,
    metadata: ,
    **{
      stimulus_review: @row["stimulus review"],
      instructor_stimulus: @row["instructor stimulus"],
    }.compact,
  }
end

#question_typeObject

Raises:

  • (NotImplementedError)


24
25
26
# File 'lib/atomic_assessments_import/csv/questions/question.rb', line 24

def question_type
  raise NotImplementedError
end

#scoring_typeObject



52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/atomic_assessments_import/csv/questions/question.rb', line 52

def scoring_type
  case @row["scoring type"]
  when nil, "", /Partial Match Per Response/i
    "partialMatchV2"
  when /Partial Match/i
    "partialMatch"
  when /Exact Match/i
    "exactMatch"
  else
    raise NotImplementedError, "Unknown scoring type"
  end
end

#to_learnosityObject



75
76
77
78
79
80
81
82
# File 'lib/atomic_assessments_import/csv/questions/question.rb', line 75

def to_learnosity
  {
    type: question_type,
    widget_type: "response",
    reference: @reference,
    data: question_data,
  }
end