class Sorbet::Private::GemLoader
typed: ignore
Constants
- GEM_LOADER
A map defining the code to load a gem. By default any gem mentioned by Gemfile is loaded by its name, here are either overrides or things that Bundler misses.
- NO_GEM
Public Class Methods
my_require(gem)
click to toggle source
This is so that the autoloader doesn't treat these as manditory requires before loading this file
# File lib/gem_loader.rb, line 1188 def self.my_require(gem) require gem # rubocop:disable PrisonGuard/NoDynamicRequire end
require_all_gems()
click to toggle source
# File lib/gem_loader.rb, line 1213 def self.require_all_gems require 'bundler/setup' require 'bundler/lockfile_parser' specs = [] lockfile_parser = Bundler::LockfileParser.new(File.read(Bundler.default_lockfile)) # Do not load gems in Gemfile where require is false dependencies = lockfile_parser.dependencies.reject { |name, dep| dep.autorequire && dep.autorequire.empty? } required_dependency_names = dependencies.values.map(&:name) lockfile_parser.specs.each do |spec| # Only include the spec for a gem and it's dependencies if it's autorequired. if required_dependency_names.include?(spec.name) specs << spec specs << spec.dependencies end end specs.flatten! specs.uniq! { |spec| spec.name } specs = specs.to_set specs.sort_by(&:name).each do |gemspec| begin require_gem(gemspec.name) rescue LoadError => e puts "LoadError: #{e}" rescue NameError => e puts "NameError: #{e}" end end begin Bundler.require rescue NameError => e puts "NameError: #{e}" end end
require_gem(gem)
click to toggle source
# File lib/gem_loader.rb, line 1192 def self.require_gem(gem) if gem == NO_GEM require_all_gems return end loader = GEM_LOADER[gem] if loader begin loader.call rescue NameError => e puts "NameError: #{e}" end else begin require gem # rubocop:disable PrisonGuard/NoDynamicRequire rescue NameError => e puts "NameError: #{e}" end end end