module ContentLoader

Define methods that load data from XML contents

Public Class Methods

load(filepath, content) click to toggle source

Load XML content into Asker data objects @param filepath (String) File path @param content (String) XML plane text content

# File lib/asker/loader/content_loader.rb, line 16
def self.load(filepath, content)
  concepts = []
  codes = []
  begin
    xmlcontent = REXML::Document.new(content)
  rescue REXML::ParseException
    raise_error_with(filepath, content)
  end
  lang = read_lang_attribute(xmlcontent)
  context = read_context_attribute(xmlcontent)

  xmlcontent.root.elements.each do |xmldata|
    case xmldata.name
    when 'concept'
      concepts << read_concept(xmldata, filepath, lang, context)
    when 'code'
      codes << read_code(xmldata, filepath)
    else
      Logger.verboseln Rainbow("[ERROR] Unkown tag <#{xmldata.name}>").red
    end
  end

  { concepts: concepts, codes: codes }
end

Private Class Methods

raise_error_with(filepath, content) click to toggle source

Raise error and save content into error.file @param filepath (String) @param content (String)

# File lib/asker/loader/content_loader.rb, line 97
                     def self.raise_error_with(filepath, content)
  msg = Rainbow("[ERROR] ContentLoader: Format error in #{filepath}").red.bright
  Logger.verbose msg
  f = File.open('output/error.xml', 'w')
  f.write(content)
  f.close
  raise msg
end
read_code(xmldata, filepath) click to toggle source

Read code from input XML data @param xmldata (XML Object) @param filepath (String)

# File lib/asker/loader/content_loader.rb, line 84
                     def self.read_code(xmldata, filepath)
  project = Project.instance
  c = CodeLoader.load(xmldata, filepath)
  if [ File.basename(filepath), :default ].include? project.process_file
    c.process = true
  end
  c
end
read_concept(xmldata, filepath, lang, context) click to toggle source

Read concept from input XML data @param xmldata (XML Object) @param filepath (String) @param lang @param context

# File lib/asker/loader/content_loader.rb, line 71
                     def self.read_concept(xmldata, filepath, lang, context)
  project = Project.instance
  c = Concept.new(xmldata, filepath, lang, context)
  if [ File.basename(filepath), :default ].include? project.process_file
    c.process = true
  end
  c
end
read_context_attribute(xmldata) click to toggle source

Read context attr from input XML data @param xmldata (XML Object)

# File lib/asker/loader/content_loader.rb, line 56
                     def self.read_context_attribute(xmldata)
  begin
    context = xmldata.root.attributes['context']
  rescue StandardError
    context = 'unknown'
  end
  context
end
read_lang_attribute(xmldata) click to toggle source

Read lang attr from input XML data @param xmldata (XML Object)

# File lib/asker/loader/content_loader.rb, line 44
                     def self.read_lang_attribute(xmldata)
  begin
    lang = xmldata.root.attributes['lang']
  rescue StandardError
    lang = Project.instance.lang
  end
  lang
end