Module: Bootsnap::ExplicitRequire
- Defined in:
- lib/bootsnap/explicit_require.rb
Constant Summary collapse
- ARCHDIR =
RbConfig::CONFIG['archdir']
- RUBYLIBDIR =
RbConfig::CONFIG['rubylibdir']
- DLEXT =
RbConfig::CONFIG['DLEXT']
Class Method Summary collapse
- .from_archdir(feature) ⇒ Object
- .from_rubylibdir(feature) ⇒ Object
- .from_self(feature) ⇒ Object
-
.with_gems(*gems) ⇒ Object
Given a set of gems, run a block with the LOAD_PATH narrowed to include only core ruby source paths and these gems – that is, roughly, temporarily remove all gems not listed in this call from the LOAD_PATH.
Class Method Details
.from_archdir(feature) ⇒ Object
15 16 17 |
# File 'lib/bootsnap/explicit_require.rb', line 15 def self.from_archdir(feature) require(File.join(ARCHDIR, "#{feature}.#{DLEXT}")) end |
.from_rubylibdir(feature) ⇒ Object
11 12 13 |
# File 'lib/bootsnap/explicit_require.rb', line 11 def self.from_rubylibdir(feature) require(File.join(RUBYLIBDIR, "#{feature}.rb")) end |
.from_self(feature) ⇒ Object
7 8 9 |
# File 'lib/bootsnap/explicit_require.rb', line 7 def self.from_self(feature) require_relative("../#{feature}") end |
.with_gems(*gems) ⇒ Object
Given a set of gems, run a block with the LOAD_PATH narrowed to include only core ruby source paths and these gems – that is, roughly, temporarily remove all gems not listed in this call from the LOAD_PATH.
This is useful before bootsnap is fully-initialized to load gems that it depends on, without forcing full LOAD_PATH traversals.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/bootsnap/explicit_require.rb', line 25 def self.with_gems(*gems) orig = $LOAD_PATH.dup $LOAD_PATH.clear gems.each do |gem| pat = %r{ / (gems|extensions/[^/]+/[^/]+) # "gems" or "extensions/x64_64-darwin16/2.3.0" / #{Regexp.escape(gem)}-(\h{12}|(\d+\.)) # msgpack-1.2.3 or msgpack-1234567890ab }x $LOAD_PATH.concat(orig.grep(pat)) end $LOAD_PATH << ARCHDIR $LOAD_PATH << RUBYLIBDIR begin yield rescue LoadError $LOAD_PATH.replace(orig) yield end ensure $LOAD_PATH.replace(orig) end |