class Moodle2CC::CanvasCC::DiscussionWriter

Public Class Methods

new(work_dir, *canvas_discussions) click to toggle source
# File lib/moodle2cc/canvas_cc/discussion_writer.rb, line 4
def initialize(work_dir, *canvas_discussions)
  @work_dir = work_dir
  @discussions = canvas_discussions
end

Public Instance Methods

write() click to toggle source
# File lib/moodle2cc/canvas_cc/discussion_writer.rb, line 9
def write
  @discussions.each do |discussion|
    write_discussion(discussion)
    write_meta(discussion)
  end
end

Private Instance Methods

write_discussion(discussion) click to toggle source
# File lib/moodle2cc/canvas_cc/discussion_writer.rb, line 19
def write_discussion(discussion)
  xml = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
    xml.topic('xmlns' => 'http://www.imsglobal.org/xsd/imsccv1p1/imsdt_v1p1',
              'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
              'xsi:schemaLocation' => 'http://www.imsglobal.org/xsd/imsccv1p1/imsdt_v1p1  http://www.imsglobal.org/profile/cc/ccv1p1/ccv1p1_imsdt_v1p1.xsd'
    ) { |xml|
      xml.title discussion.title
      xml.text_('texttype' => 'text/html') { xml.text discussion.text }
    }
  end.to_xml
  File.open(File.join(@work_dir, discussion.discussion_resource.files.first), 'w') { |f| f.write(xml) }
end
write_meta(discussion) click to toggle source
# File lib/moodle2cc/canvas_cc/discussion_writer.rb, line 32
def write_meta(discussion)
  meta_resource = discussion.meta_resource
  discussion_resource = discussion.discussion_resource
  xml = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
    xml.topicMeta('identifier' => meta_resource.identifier, 'xmlns' => 'http://canvas.instructure.com/xsd/cccv1p0',
                  'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
                  'xsi:schemaLocation' => 'http://canvas.instructure.com/xsd/cccv1p0 http://canvas.instructure.com/xsd/cccv1p0.xsd'
    ) { |xml|
      xml.topic_id discussion_resource.identifier
      xml.title discussion.title
      xml.position
      xml.type (discussion.is_announcement ? 'announcement' : 'topic')
      xml.discussion_type discussion.discussion_type
      xml.require_initial_post discussion.require_initial_post
      xml.workflow_state discussion.workflow_state
      if discussion.points_possible
        xml.assignment('identifier' => "#{meta_resource.identifier}_assignment" ) do |a|
          a.title discussion.title
          a.submission_types 'discussion_topic'
          a.grading_type 'points'
          a.points_possible discussion.points_possible
        end
      end
    }
  end.to_xml
  File.open(File.join(@work_dir, meta_resource.href), 'w') { |f| f.write(xml) }
end