55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
require 'fileutils'
 | 
						|
require 'constants' # for Verbosity enumeration
 | 
						|
 | 
						|
class FileFinderHelper
 | 
						|
 | 
						|
  constructor :streaminator
 | 
						|
  
 | 
						|
  
 | 
						|
  def find_file_in_collection(file_name, file_list, complain, extra_message="")
 | 
						|
    file_to_find = nil
 | 
						|
    
 | 
						|
    file_list.each do |item|
 | 
						|
      base_file = File.basename(item)
 | 
						|
 | 
						|
      # case insensitive comparison
 | 
						|
      if (base_file.casecmp(file_name) == 0)
 | 
						|
        # case sensitive check
 | 
						|
        if (base_file == file_name)
 | 
						|
          file_to_find = item
 | 
						|
          break
 | 
						|
        else
 | 
						|
          blow_up(file_name, "However, a filename having different capitalization was found: '#{item}'.")
 | 
						|
        end
 | 
						|
      end
 | 
						|
      
 | 
						|
    end
 | 
						|
    
 | 
						|
    case (complain)
 | 
						|
      when :error then blow_up(file_name, extra_message) if (file_to_find.nil?)
 | 
						|
      when :warn  then gripe(file_name, extra_message)   if (file_to_find.nil?)
 | 
						|
      #when :ignore then      
 | 
						|
    end
 | 
						|
    
 | 
						|
    return file_to_find
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
  
 | 
						|
  def blow_up(file_name, extra_message="")
 | 
						|
    error = "ERROR: Found no file '#{file_name}' in search paths."
 | 
						|
    error += ' ' if (extra_message.length > 0)
 | 
						|
    @streaminator.stderr_puts(error + extra_message, Verbosity::ERRORS)
 | 
						|
    raise
 | 
						|
  end
 | 
						|
  
 | 
						|
  def gripe(file_name, extra_message="")
 | 
						|
    warning = "WARNING: Found no file '#{file_name}' in search paths."
 | 
						|
    warning += ' ' if (extra_message.length > 0)
 | 
						|
    @streaminator.stderr_puts(warning + extra_message, Verbosity::COMPLAIN)
 | 
						|
  end
 | 
						|
 | 
						|
end
 | 
						|
 | 
						|
 |