class Moodle2CC::CanvasCC::CartridgeCreator

Constants

COURSE_SETTINGS_DIR

Public Class Methods

new(course) click to toggle source
# File lib/moodle2cc/canvas_cc/cartridge_creator.rb, line 6
def initialize(course)
  @course = course
end

Public Instance Methods

create(out_dir) click to toggle source
# File lib/moodle2cc/canvas_cc/cartridge_creator.rb, line 10
def create(out_dir)
  out_file = File.join(out_dir, filename)
  Dir.mktmpdir do |dir|
    write_cartridge(dir)

    tmp_file = File.join(dir, filename)
    zip_dir(tmp_file, dir)
    FileUtils.mv(tmp_file, out_file)
  end
  out_file
end
filename() click to toggle source
# File lib/moodle2cc/canvas_cc/cartridge_creator.rb, line 22
def filename
  title = @course.title.gsub(/::/, '/').
    gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
    gsub(/([a-z\d])([A-Z])/, '\1_\2').
    gsub(/[\/|\.]/, '_').
    tr('- ', '_').downcase.
    gsub(/_{2,}/, '_')
  "#{title}.imscc"
end

Private Instance Methods

write_cartridge(dir) click to toggle source
# File lib/moodle2cc/canvas_cc/cartridge_creator.rb, line 34
def write_cartridge(dir)
  Dir.mkdir(File.join(dir, COURSE_SETTINGS_DIR))
  Moodle2CC::CanvasCC::CanvasExportWriter.new(dir).write
  Moodle2CC::CanvasCC::CourseSettingWriter.new(dir, @course).write
  Moodle2CC::CanvasCC::ModuleMetaWriter.new(dir, *@course.canvas_modules).write
  Moodle2CC::CanvasCC::ImsManifestGenerator.new(dir, @course).write
  Moodle2CC::CanvasCC::FileMetaWriter.new(dir, *@course.files).write
  Moodle2CC::CanvasCC::PageWriter.new(dir, *@course.pages).write
  Moodle2CC::CanvasCC::DiscussionWriter.new(dir, *@course.discussions).write
  Moodle2CC::CanvasCC::AssignmentWriter.new(dir, *@course.assignments).write
  Moodle2CC::CanvasCC::QuestionBankWriter.new(dir, *@course.question_banks).write
  Moodle2CC::CanvasCC::AssessmentWriter.new(dir, *@course.assessments).write
end
zip_dir(out_file, dir) click to toggle source
# File lib/moodle2cc/canvas_cc/cartridge_creator.rb, line 48
def zip_dir(out_file, dir)
  Zip::File.open(out_file, Zip::File::CREATE) do |zipfile|
    Dir["#{dir}/**/*"].each do |file|
      zipfile.add(file.sub(dir + '/', ''), file)
    end
  end
end