lib/adiwg/mdtranslator/readers/mdReaders.rb in adiwg-mdtranslator-1.4.0 vs lib/adiwg/mdtranslator/readers/mdReaders.rb in adiwg-mdtranslator-2.0.0rc2

- old
+ new

@@ -1,62 +1,68 @@ # MdTranslator - controller for evaluating and directing readers # History: -# Stan Smith 2014-12-11 original script -# Stan Smith 2012-12-16 generalized handleReader to use :readerRequested -# Stan Smith 2015-03-04 changed method of setting $WriterNS -# Stan Smith 2015-06-22 replace global ($response) with passed in object (responseObj) +# Stan Smith 2016-11-12 refactored for mdTranslator 2.0 # Stan Smith 2015-07-14 refactored to remove global namespace constants +# Stan Smith 2015-06-22 replace global ($response) with passed in object (hResponseObj) +# Stan Smith 2015-03-04 changed method of setting $WriterNS +# Stan Smith 2012-12-16 generalized handleReader to use :readerRequested +# Stan Smith 2014-12-11 original script module ADIWG module Mdtranslator module Readers - def self.handleReader(file, responseObj) + def self.handleReader(file, hResponseObj) - # use readerRequested from responseObj to build directory path to reader - # the readers's high level folder must be under the 'writers' directory - readerDir = File.join(path_to_readers, responseObj[:readerRequested]) + # use ':readerRequested' from hResponseObj to build directory path to reader + # reader's high level folder must be placed in 'lib/adiwg/mdtranslator/readers/' + # reader's code must must be in folder named '{reader}' + # '{reader}' must contain a module named '{reader}_reader.rb' + # '{reader}_reader.rb' must have a method named 'readFile()' + # 'readFile()' must pass two parameters (file, hResponseObj) + # all reader modules and classes must remain in their private namespace + # reader namespace is 'ADIWG::Mdtranslator::Readers::{reader}' + + # reader high-level folder + thisDir = File.dirname(File.expand_path(__FILE__)) + readerDir = File.join(thisDir, hResponseObj[:readerRequested]) if File.directory?(readerDir) - # if directory path exists, build reader file name and require it - readerFile = File.join(readerDir, responseObj[:readerRequested] + '_reader') - require readerFile + # reader folder + readerModule = File.join(readerDir, hResponseObj[:readerRequested] + '_reader') + require readerModule - # build the namespace for the reader - readerNS = responseObj[:readerRequested].dup + # reader namespace + readerNS = hResponseObj[:readerRequested].dup readerNS[0] = readerNS[0].upcase - # pass file and response object to requested reader - # the reader will return the internal object with the metadata content loaded - return ADIWG::Mdtranslator::Readers.const_get(readerNS).readFile(file, responseObj) + # reader will return intObj and updated hResponseObj + return ADIWG::Mdtranslator::Readers.const_get(readerNS).readFile(file, hResponseObj) else - # the directory path was not found meaning there is no reader with that name - # set the appropriate messages and report the failure - responseObj[:readerValidationPass] = false - responseObj[:readerValidationMessages] << "Validation Failed - see following message(s):\n" - responseObj[:readerValidationMessages] << "Reader '#{responseObj[:readerRequested]}' is not supported." - return false + hResponseObj[:readerValidationMessages] << "Requested reader '#{hResponseObj[:readerRequested]}' cannot be found." + hResponseObj[:readerValidationPass] = false + return {} end end - # return path to readers - def self.path_to_readers - File.dirname(File.expand_path(__FILE__)) - end - # return reader readme text + # this is called from the Rails API def self.get_reader_readme(reader) - readmeText = 'No readme found' - path = File.join(path_to_readers, reader, 'readme.md') + + thisDir = File.dirname(File.expand_path(__FILE__)) + path = File.join(thisDir, reader, 'readme.md') if File.exist?(path) file = File.open(path, 'r') readmeText = file.read file.close + return readmeText + else + return 'Readme file not found' end - return readmeText + end end end end