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