class Moodle2CC::CanvasCC::Models::Assessment

Constants

ASSESSMENT_NON_CC_FOLDER
ASSESSMENT_TYPE
DATETIME_ATTRIBUTES
LAR_TYPE
META_ATTRIBUTES

Attributes

identifier[RW]
items[RW]
question_references[RW]
workflow_state[RW]

Public Class Methods

new() click to toggle source
# File lib/moodle2cc/canvas_cc/models/assessment.rb, line 13
def initialize
  @question_references = []
end

Public Instance Methods

canvas_assessment_resource() click to toggle source
# File lib/moodle2cc/canvas_cc/models/assessment.rb, line 30
def canvas_assessment_resource
  resource = Moodle2CC::CanvasCC::Models::Resource.new
  resource.identifier = "#{@identifier}_meta"
  resource.href = meta_file_path
  resource.type = LAR_TYPE
  resource.files = [meta_file_path, qti_file_path]
  resource
end
cc_assessment_resource() click to toggle source
# File lib/moodle2cc/canvas_cc/models/assessment.rb, line 21
def cc_assessment_resource
  resource = Moodle2CC::CanvasCC::Models::Resource.new
  resource.identifier = @identifier
  resource.type = ASSESSMENT_TYPE
  resource.dependencies = ["#{@identifier}_meta"]
  resource.files = [] # TODO: export cc qti file
  resource
end
meta_file_path() click to toggle source
# File lib/moodle2cc/canvas_cc/models/assessment.rb, line 39
def meta_file_path
  "#{@identifier}/assessment_meta.xml"
end
qti_file_path() click to toggle source
# File lib/moodle2cc/canvas_cc/models/assessment.rb, line 43
def qti_file_path
  "#{ASSESSMENT_NON_CC_FOLDER}/#{@identifier}.xml.qti"
end
resolve_question_references!(question_banks) click to toggle source
# File lib/moodle2cc/canvas_cc/models/assessment.rb, line 47
def resolve_question_references!(question_banks)
  @items ||= []

  # keep track of each time a bank is referenced through a random question reference
  random_bank_counts = {}

  @question_references.each do |ref|
    question = nil
    group = nil
    question_banks.each do |bank|
      break if (question = bank.questions.detect{|q| q.original_identifier.to_s == ref[:question]}) ||
        (group = bank.question_groups.detect{|g| g.identifier.to_s == ref[:question]})

      if bank.random_question_references.any?{|r| r.to_s == ref[:question]}
        random_bank_counts[bank] ||= 0
        random_bank_counts[bank] += 1
        break
      end
    end

    if question
      question.assessment_question_identifierref ||= "question_#{question.identifier}"
      copy = question.dup
      copy.identifier = "#{copy.identifier}_copy"
      copy.points_possible = ref[:grade] if ref[:grade]
      @items << copy
    elsif group
      copy = group.dup
      if ref[:grade] && copy.selection_number.to_i != 0
        copy.points_per_item = ref[:grade].to_f / copy.selection_number.to_i
      end
      @items << copy
    end
  end

  random_bank_counts.each do |bank, count|
    new_group = Moodle2CC::CanvasCC::Models::QuestionGroup.new
    new_group.identifier = "#{@identifier}#{bank.identifier}_random_group"
    new_group.selection_number = count

    new_group.questions = bank.questions.map(&:dup)
    child_banks = bank.find_children_banks(question_banks)
    child_banks.each do |child|
      new_group.questions += child.questions.map(&:dup)
    end

    @items << new_group
  end

  @items.select{|i| i.is_a?(Moodle2CC::CanvasCC::Models::QuestionGroup)}.each do |group|
    group.questions.each do |q|
      @items.delete_if{|i| i.respond_to?(:original_identifier) && i.original_identifier == q.original_identifier}
    end
  end
end
resources() click to toggle source
# File lib/moodle2cc/canvas_cc/models/assessment.rb, line 17
def resources
  [cc_assessment_resource, canvas_assessment_resource]
end