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