Module: Polyglot
- Defined in:
- lib/polyglot/version.rb,
lib/polyglot.rb
Overview
Defined Under Namespace
Modules: VERSION
Classes: NestedLoadError, PolyglotLoadError
Class Method Summary
collapse
Class Method Details
.find(file, *options, &block) ⇒ Object
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/polyglot.rb', line 25
def self.find(file, *options, &block)
is_absolute = Pathname.new(file).absolute?
is_dot_relative = file =~ /\.[\/\\]/
paths = is_absolute ? [''] : Array(is_dot_relative ? '.' : nil) + $:
paths.each do |lib|
base = is_absolute ? "" : lib+File::SEPARATOR
matches = Dir["#{base}#{file}{,.#{@registrations.keys*',.'}}"]
$stderr.puts "Polyglot: found more than one candidate for #{file}: #{matches*", "}" if matches.size > 1
if path = matches[0]
return [ path, @registrations[path.gsub(/.*\./,'')]]
end
end
return nil
end
|
.load(*a, &b) ⇒ Object
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
# File 'lib/polyglot.rb', line 42
def self.load(*a, &b)
file = a[0].to_s
return if @loaded[file] begin
source_file, loader = Polyglot.find(file, *a[1..-1], &b)
if (loader)
begin
loader.load(source_file)
@loaded[file] = true
rescue LoadError => e
raise Polyglot::NestedLoadError.new(e)
end
else
raise PolyglotLoadError.new("Failed to load #{file} using extensions #{(@registrations.keys+["rb"]).sort*", "}")
end
end
end
|
.register(extension, klass) ⇒ Object
18
19
20
21
22
23
|
# File 'lib/polyglot.rb', line 18
def self.register(extension, klass)
extension = [extension] unless Array === extension
extension.each{|e|
@registrations[e] = klass
}
end
|