class Moodle2CC::Canvas::Assessment

Constants

META_ATTRIBUTES

Attributes

non_cc_assessments_identifier[RW]
questions[RW]

Public Class Methods

new(mod, position=0) click to toggle source
Calls superclass method Moodle2CC::CC::Assessment::new
# File lib/moodle2cc/canvas/assessment.rb, line 9
def initialize(mod, position=0)
  super
  description = [mod.intro, mod.content, mod.text, mod.summary].compact.reject { |d| d.length == 0 }.first || ''
  @description = convert_file_path_tokens(description)
  if mod.time_close.to_i > 0
    @lock_at = ims_datetime(Time.at(mod.time_close))
  end
  if mod.time_open.to_i > 0
    @unlock_at = ims_datetime(Time.at(mod.time_open))
  end
  @time_limit = mod.time_limit
  @allowed_attempts = mod.attempts_number
  @scoring_policy = mod.grade_method == 4 ? 'keep_latest' : 'keep_highest'
  @access_code = mod.password
  @ip_filter = mod.subnet
  @shuffle_answers = mod.shuffle_answers
  @quiz_type = 'survey' unless mod.mod_type == 'quiz'
  @non_cc_assessments_identifier = create_key(@id, 'non_cc_assessments_')
  @questions = []
  mod.questions.each do |question|
    if question.type == 'random'
      question_bank = QuestionBank.new question.question_category
      last = @questions.last
      if last && last.is_a?(QuestionGroup) && last.points_per_item == question.grade && last.sourcebank_ref == question_bank.identifier
        last.increment_selection_number
      else
        group = @questions.select { |q| q.is_a?(QuestionGroup) }.last
        id = group ? group.id + 1 : 1
        @questions << QuestionGroup.new(:id => id, :question_bank => question_bank, :points_per_item => question.grade)
      end
    else
      @questions << Question.new(question, self)
    end
  end
end

Public Instance Methods

create_assessment_meta_xml(export_dir) click to toggle source
# File lib/moodle2cc/canvas/assessment.rb, line 68
def create_assessment_meta_xml(export_dir)
  path = File.join(export_dir, identifier, ASSESSMENT_META)
  FileUtils.mkdir_p(File.dirname(path))
  File.open(path, 'w') do |file|
    node = Builder::XmlMarkup.new(:target => file, :indent => 2)
    node.instruct!
    node.quiz(
      :identifier => identifier,
      'xsi:schemaLocation' => "http://canvas.instructure.com/xsd/cccv1p0 http://canvas.instructure.com/xsd/cccv1p0.xsd",
      'xmlns:xsi' => "http://www.w3.org/2001/XMLSchema-instance",
      'xmlns' => "http://canvas.instructure.com/xsd/cccv1p0"
    ) do |quiz_node|
      META_ATTRIBUTES.each do |attr|
        quiz_node.tag!(attr, send(attr)) unless send(attr).nil?
      end
    end
  end
end
create_files(export_dir) click to toggle source
# File lib/moodle2cc/canvas/assessment.rb, line 63
def create_files(export_dir)
  create_assessment_meta_xml(export_dir)
  create_non_cc_qti_xml(export_dir)
end
create_module_meta_item_elements(item_node) click to toggle source
# File lib/moodle2cc/canvas/assessment.rb, line 119
def create_module_meta_item_elements(item_node)
  item_node.content_type 'Quiz'
  item_node.identifierref @identifier
end
create_non_cc_qti_xml(export_dir) click to toggle source
# File lib/moodle2cc/canvas/assessment.rb, line 87
def create_non_cc_qti_xml(export_dir)
  path = File.join(export_dir, ASSESSMENT_NON_CC_FOLDER, "#{identifier}.xml.qti")
  FileUtils.mkdir_p(File.dirname(path))
  File.open(path, 'w') do |file|
    node = Builder::XmlMarkup.new(:target => file, :indent => 2)
    node.instruct!
    node.questestinterop(
      'xsi:schemaLocation' => "http://www.imsglobal.org/xsd/ims_qtiasiv1p2 http://www.imsglobal.org/xsd/ims_qtiasiv1p2p1.xsd",
      'xmlns:xsi' => "http://www.w3.org/2001/XMLSchema-instance",
      'xmlns' => "http://www.imsglobal.org/xsd/ims_qtiasiv1p2"
    ) do |root_node|
      root_node.assessment(:title => title, :ident => identifier) do |assessment_node|
        assessment_node.qtimetadata do |qtimetadata_node|
          qtimetadata_node.qtimetadatafield do |qtimetadatafield_node|
            qtimetadatafield_node.fieldlabel "qmd_timelimit"
            qtimetadatafield_node.fieldentry time_limit
          end
          qtimetadata_node.qtimetadatafield do |qtimetadatafield_node|
            qtimetadatafield_node.fieldlabel "cc_maxattempts"
            qtimetadatafield_node.fieldentry allowed_attempts
          end
        end
        assessment_node.section(:ident => 'root_section') do |section_node|
          @questions.each do |question|
            question.create_item_xml(section_node)
          end
        end
      end
    end
  end
end
create_resource_node(resources_node) click to toggle source
# File lib/moodle2cc/canvas/assessment.rb, line 45
def create_resource_node(resources_node)
  super

  href = File.join(identifier, ASSESSMENT_META)
  resources_node.resource(
    :href => href,
    :type => LOR,
    :identifier => non_cc_assessments_identifier
  ) do |resource_node|
    resource_node.file(:href => href)
    resource_node.file(:href => File.join(ASSESSMENT_NON_CC_FOLDER, "#{identifier}.xml.qti"))
  end
end
create_resource_sub_nodes(resource_node) click to toggle source
# File lib/moodle2cc/canvas/assessment.rb, line 59
def create_resource_sub_nodes(resource_node)
  resource_node.dependency :identifierref => non_cc_assessments_identifier
end