Module: Kernel

Defined in:
lib/require_pattern.rb

Instance Method Summary collapse

Instance Method Details

#require_pattern(*patterns) ⇒ Object

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.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/require_pattern.rb', line 7

def require_pattern(*patterns)
  loaded = false # Indicates whether any files were loaded at all
  require_map = patterns.map { |pattern| Dir.glob(pattern) }.flatten.reduce({}) { |m,v|  m[v] = nil; m }
  loop do
    remaining = require_map.reject! do |file,|
      begin
        loaded = true if require File.expand_path(file)
        true
      rescue => require_map[file]
        false
      end
    end

    if require_map.empty?
      break loaded
    elsif remaining.nil?
      STDERR.puts ReqPat::Coloring.red("\nSome files failed:")
      require_map.each { |file, e|
        msg = ReqPat::Coloring.red("    #{file}: ") +
              ReqPat::Coloring.yellow("#{e.backtrace[0]} #{e}")
        STDERR.puts msg
      }
      STDERR.puts
      raise LoadError, "One or more files failed to load. See STDERR output for details."
    end
  end
end

#require_relative_pattern(*patterns) ⇒ Object



35
36
37
38
39
# File 'lib/require_pattern.rb', line 35

def require_relative_pattern(*patterns)
  caller_path = caller_locations(1,1)[0].path
  patterns.map! { |pattern| File.join(File.dirname(caller_path), pattern) }
  require_pattern(*patterns)
end