class Moodle2CC::Moodle2::Parsers::BookParser

Constants

BOOK_MODULE_NAME
BOOK_XML

Public Class Methods

new(backup_dir) click to toggle source
# File lib/moodle2cc/moodle2/parsers/book_parser.rb, line 8
def initialize(backup_dir)
  @backup_dir = backup_dir
end

Public Instance Methods

parse() click to toggle source
# File lib/moodle2cc/moodle2/parsers/book_parser.rb, line 12
def parse
  activity_dirs = activity_directories(@backup_dir, BOOK_MODULE_NAME)
  activity_dirs.map { |dir| parse_book(dir) }
end

Private Instance Methods

parse_book(dir) click to toggle source
# File lib/moodle2cc/moodle2/parsers/book_parser.rb, line 18
def parse_book(dir)
  book = Moodle2CC::Moodle2::Models::Book.new
  activity_dir = File.join(@backup_dir, dir)
  File.open(File.join(activity_dir, BOOK_XML)) do |f|
    xml = Nokogiri::XML(f)
    book.module_id = xml.at_xpath('/activity/@moduleid').value
    book.id = xml.at_xpath('/activity/book/@id').value
    book.name = parse_text(xml, '/activity/book/name')
    book.intro = parse_text(xml, '/activity/book/intro')
    book.intro_format = parse_text(xml, '/activity/book/introformat')
    book.numbering = parse_text(xml, '/activity/book/numbering')
    book.custom_titles = parse_text(xml, '/activity/book/customtitles')

    xml.search('/activity/book/chapters/chapter').each do |node|
      book.chapters << parse_chapter(node)
    end
  end
  parse_module(activity_dir, book)

  book.chapters.sort_by!{|c| c.pagenum.to_i}
  book
end
parse_chapter(node) click to toggle source
# File lib/moodle2cc/moodle2/parsers/book_parser.rb, line 41
def parse_chapter(node)
  chapter = Moodle2CC::Moodle2::Models::BookChapter.new
  chapter.id = node.at_xpath('@id').value
  chapter.pagenum = parse_text(node, 'pagenum')
  chapter.subchapter = parse_boolean(node, 'subchapter')
  chapter.title = parse_text(node, 'title')
  chapter.content = parse_text(node, 'content')
  chapter.content_format = parse_text(node, 'contentformat')
  chapter.hidden = parse_boolean(node, 'hidden') == '1' ? true : false
  chapter
end