module Require3
Constants
- VERSION
Public Class Methods
require(config)
click to toggle source
# File lib/require3.rb, line 14 def require(config) lib, aliases = config.instance_of?(Hash) ? config.first : config last_loaded = $"[-1] first_load = Kernel::require(lib) return first_load unless first_load && aliases # Path/file name components. # lib can be frozen so we use sub() first lib = lib.sub(%r{\A(?:\.\.?/)+}, "") lib.sub!(/\.(?:rb|o|dll)\z/, "") begin aliases = const_get(camelize(lib)).constants if aliases == "*".freeze # FIXME: a/b/c may not always define A::B::C case aliases when String set_alias(lib, aliases) when Array aliases.each { |name| set_alias("#{lib}/#{name}", name) } else aliases.each do |target, alias_as| target = target.to_s # If the target has a namespace use it as is target = "#{lib}/#{target}" unless target.include?("::") set_alias(target, alias_as) end end rescue # Remove libs that were loaded by our require # Is this portable? $".pop while $".any? && $"[-1] != last_loaded raise end first_load end
Private Class Methods
camelize(term)
click to toggle source
# File lib/require3.rb, line 60 def camelize(term) # term can be a Symbol or a String that's frozen (so we dup) string = term.to_s.dup # More or less stolen from ActiveSupport::Inflector#camelize # https://api.rubyonrails.org/v4.2.6/classes/ActiveSupport/Inflector.html#method-i-camelize string.sub!(/\A[a-z\d]*/) { $&.capitalize } string.gsub!(/(?:_|(\/))([a-z\d]*)/i) { "#{$1}#{$2.capitalize}" } string.gsub!(/\//, "::") string end
set_alias(target, alias_as)
click to toggle source
# File lib/require3.rb, line 56 def set_alias(target, alias_as) Alias2.alias(camelize(target), camelize(alias_as)) end