Class: MODL::Parser::FileImporter
- Inherits:
- 
      Object
      
        - Object
- MODL::Parser::FileImporter
 
- Includes:
- Singleton
- Defined in:
- lib/modl/parser/file_importer.rb
Overview
This class handled file loading from local or remote file systems.
Constant Summary collapse
- CACHE_DISABLED =
- false
Instance Method Summary collapse
- 
  
    
      #import_files(files, global)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Supply a single file name as a string or an array of file names. 
- 
  
    
      #initialize  ⇒ FileImporter 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    A new instance of FileImporter. 
Constructor Details
#initialize ⇒ FileImporter
Returns a new instance of FileImporter.
| 38 39 40 | # File 'lib/modl/parser/file_importer.rb', line 38 def initialize @cache = ObjectCache.new end | 
Instance Method Details
#import_files(files, global) ⇒ Object
Supply a single file name as a string or an array of file names.
| 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | # File 'lib/modl/parser/file_importer.rb', line 43 def import_files(files, global) file_names = [] file_names += files if files.is_a? Array file_names << files if files.is_a? String file_names.each do |file_name| force = file_name.end_with?('!') file_name = Sutil.head(file_name) if force file_name << '.modl' unless file_name.end_with?('.txt', '.modl') file_name, new_val = RefProcessor.deref file_name, global if file_name.include?('%') if force # Don't use the cache if we're forcing a reload. @cache.evict(file_name) parsed = nil else # Do we have a cached version? parsed = @cache.get(file_name) end # Did we hit the cache? if parsed.nil? || CACHE_DISABLED # No. begin if file_name.start_with?('http') uri = URI(file_name) txt = Net::HTTP.get(uri) else txt = File.readlines(file_name).join end rescue StandardError => e # Force load from the cache if possible parsed = @cache.force_get(file_name) if parsed.nil? raise InterpreterError, 'File not found: ' + file_name + ', error: ' + e. end end global.loaded_file(file_name) # Parse the downloaded file ands extract the classes new_parse_context = GlobalParseContext.new new_parse_context.merge_pairs(global) parsed = MODL::Parser::Parser.parse txt, new_parse_context # Save it for next time @cache.put(file_name, parsed) unless CACHE_DISABLED else global.loaded_file(file_name) end # Extract the JSON content and add the classes and pairs to the existing GlobalParseContext hashes. parsed.extract_hash global.merge_classes(parsed.global) global.merge_pairs(parsed.global) global.merge_loaded_files(parsed.global) global.structures.concat(parsed.structures) end end |