module Kernel
Public Instance Methods
require_pattern(*patterns)
click to toggle source
Requires all files matching the glob patterns provided. If a file fails to load, it keeps retrying until all remaining files fail to load, in which case the exception is output to STDERR for each failed file.
# File lib/require_pattern.rb 7 def require_pattern(*patterns) 8 loaded = false # Indicates whether any files were loaded at all 9 require_map = patterns.map { |pattern| Dir.glob(pattern) }.flatten.reduce({}) { |m,v| m[v] = nil; m } 10 loop do 11 remaining = require_map.reject! do |file,| 12 begin 13 loaded = true if require File.expand_path(file) 14 true 15 rescue => require_map[file] 16 false 17 end 18 end 19 20 if require_map.empty? 21 break loaded 22 elsif remaining.nil? 23 STDERR.puts ReqPat::Coloring.red("\nSome files failed:") 24 require_map.each { |file, e| 25 msg = ReqPat::Coloring.red(" #{file}: ") + 26 ReqPat::Coloring.yellow("#{e.backtrace[0]} #{e}") + 27 ReqPat::Coloring.yellow("\t"+e.backtrace[1..-1].join("\n\t")) 28 STDERR.puts msg 29 } 30 STDERR.puts 31 raise LoadError, "One or more files failed to load. See STDERR output for details." 32 end 33 end 34 end
require_relative_pattern(*patterns)
click to toggle source
# File lib/require_pattern.rb 36 def require_relative_pattern(*patterns) 37 caller_path = caller_locations(1,1)[0].path 38 patterns.map! { |pattern| File.join(File.dirname(caller_path), pattern) } 39 require_pattern(*patterns) 40 end