Module: Bundler
- Defined in:
- lib/bundler.rb
Overview
Bundler provides a consistent environment for Ruby projects by tracking and installing the exact gems and versions that are needed.
Since Ruby 2.6, Bundler is a part of Ruby’s standard library.
Bunder is used by creating gemfiles listing all the project dependencies and (optionally) their versions and then using
require 'bundler/setup'
or Bundler.setup to setup environment where only specified gems and their specified versions could be used.
See Bundler website for extensive documentation on gemfiles creation and Bundler usage.
As a standard library inside project, Bundler could be used for introspection of loaded and required modules.
Constant Summary collapse
- ORIGINAL_ENV =
environment_preserver.restore
- SUDO_MUTEX =
Mutex.new
Class Method Summary collapse
- .app_cache(custom_path = nil) ⇒ Object
- .app_config_path ⇒ Object
-
.bin_path ⇒ Object
Returns absolute location of where binstubs are installed to.
-
.bundle_path ⇒ Object
Returns absolute path of where gems are installed on the filesystem.
-
.clean_env ⇒ Object
deprecated
Deprecated.
Use ‘unbundled_env` instead
-
.clean_exec(*args) ⇒ Object
deprecated
Deprecated.
Use ‘unbundled_exec` instead
-
.clean_system(*args) ⇒ Object
deprecated
Deprecated.
Use ‘unbundled_system` instead
- .clear_gemspec_cache ⇒ Object
- .configure ⇒ Object
- .configured_bundle_path ⇒ Object
- .default_bundle_dir ⇒ Object
- .default_gemfile ⇒ Object
- .default_lockfile ⇒ Object
-
.definition(unlock = nil) ⇒ Bundler::Definition
Returns an instance of Bundler::Definition for given Gemfile and lockfile.
- .environment ⇒ Object
- .feature_flag ⇒ Object
- .frozen_bundle? ⇒ Boolean
- .git_present? ⇒ Boolean
- .home ⇒ Object
- .install_path ⇒ Object
- .load ⇒ Object
- .load_gemspec(file, validate = false) ⇒ Object
- .load_gemspec_uncached(file, validate = false) ⇒ Object
- .load_marshal(data) ⇒ Object
- .local_platform ⇒ Object
- .locked_gems ⇒ Object
- .mkdir_p(path, options = {}) ⇒ Object
-
.original_env ⇒ Hash
Environment present before Bundler was activated.
-
.original_exec(*args) ⇒ Object
Run a ‘Kernel.exec` to a subcommand with the environment present before Bundler was activated.
-
.original_system(*args) ⇒ Object
Run subcommand with the environment present before Bundler was activated.
- .read_file(file) ⇒ Object
-
.require(*groups) ⇒ Object
Setups Bundler environment (see Bundler.setup) if it is not already set, and loads all gems from groups specified.
- .requires_sudo? ⇒ Boolean
- .reset! ⇒ Object
- .reset_paths! ⇒ Object
- .reset_rubygems! ⇒ Object
- .rm_rf(path) ⇒ Object
- .root ⇒ Object
- .ruby_scope ⇒ Object
- .settings ⇒ Object
-
.setup(*groups) ⇒ Object
Turns on the Bundler runtime.
- .specs_path ⇒ Object
- .sudo(str) ⇒ Object
- .system_bindir ⇒ Object
- .tmp(name = Process.pid.to_s) ⇒ Object
- .ui ⇒ Object
- .ui=(ui) ⇒ Object
-
.unbundled_env ⇒ Hash
Environment with all bundler-related variables removed.
-
.unbundled_exec(*args) ⇒ Object
Run a ‘Kernel.exec` to a subcommand in an environment with all bundler related variables removed.
-
.unbundled_system(*args) ⇒ Object
Run subcommand in an environment with all bundler related variables removed.
- .use_system_gems? ⇒ Boolean
- .user_bundle_path(dir = "home") ⇒ Object
- .user_cache ⇒ Object
- .user_home ⇒ Object
- .which(executable) ⇒ Object
-
.with_clean_env ⇒ Object
deprecated
Deprecated.
Use ‘with_unbundled_env` instead
-
.with_original_env ⇒ Object
Run block with environment present before Bundler was activated.
-
.with_unbundled_env ⇒ Object
Run block with all bundler-related variables removed.
Class Method Details
.app_cache(custom_path = nil) ⇒ Object
294 295 296 297 |
# File 'lib/bundler.rb', line 294 def app_cache(custom_path = nil) path = custom_path || root Pathname.new(path).join(settings.app_cache_path) end |
.app_config_path ⇒ Object
286 287 288 289 290 291 292 |
# File 'lib/bundler.rb', line 286 def app_config_path if app_config = ENV["BUNDLE_APP_CONFIG"] Pathname.new(app_config).(root) else root.join(".bundle") end end |
.bin_path ⇒ Object
Returns absolute location of where binstubs are installed to.
103 104 105 106 107 108 109 110 |
# File 'lib/bundler.rb', line 103 def bin_path @bin_path ||= begin path = settings[:bin] || "bin" path = Pathname.new(path).(root). SharedHelpers.filesystem_access(path) {|p| FileUtils.mkdir_p(p) } path end end |
.bundle_path ⇒ Object
Returns absolute path of where gems are installed on the filesystem.
94 95 96 |
# File 'lib/bundler.rb', line 94 def bundle_path @bundle_path ||= Pathname.new(configured_bundle_path.path).(root) end |
.clean_env ⇒ Object
Use ‘unbundled_env` instead
328 329 330 331 332 333 334 335 336 337 |
# File 'lib/bundler.rb', line 328 def clean_env Bundler::SharedHelpers.major_deprecation( 2, "`Bundler.clean_env` has been deprecated in favor of `Bundler.unbundled_env`. " \ "If you instead want the environment before bundler was originally loaded, use `Bundler.original_env`", :print_caller_location => true ) unbundled_env end |
.clean_exec(*args) ⇒ Object
Use ‘unbundled_exec` instead
412 413 414 415 416 417 418 419 420 421 |
# File 'lib/bundler.rb', line 412 def clean_exec(*args) Bundler::SharedHelpers.major_deprecation( 2, "`Bundler.clean_exec` has been deprecated in favor of `Bundler.unbundled_exec`. " \ "If you instead want to exec to a command in the environment before bundler was originally loaded, use `Bundler.original_exec`", :print_caller_location => true ) with_env(unbundled_env) { Kernel.exec(*args) } end |
.clean_system(*args) ⇒ Object
Use ‘unbundled_system` instead
390 391 392 393 394 395 396 397 398 399 |
# File 'lib/bundler.rb', line 390 def clean_system(*args) Bundler::SharedHelpers.major_deprecation( 2, "`Bundler.clean_system` has been deprecated in favor of `Bundler.unbundled_system`. " \ "If you instead want to run the command in the environment before bundler was originally loaded, use `Bundler.original_system`", :print_caller_location => true ) with_env(unbundled_env) { Kernel.system(*args) } end |
.clear_gemspec_cache ⇒ Object
572 573 574 |
# File 'lib/bundler.rb', line 572 def clear_gemspec_cache @gemspec_cache = {} end |
.configure ⇒ Object
80 81 82 |
# File 'lib/bundler.rb', line 80 def configure @configured ||= configure_gem_home_and_path end |
.configured_bundle_path ⇒ Object
98 99 100 |
# File 'lib/bundler.rb', line 98 def configured_bundle_path @configured_bundle_path ||= settings.path.tap(&:validate!) end |
.default_bundle_dir ⇒ Object
441 442 443 |
# File 'lib/bundler.rb', line 441 def default_bundle_dir SharedHelpers.default_bundle_dir end |
.default_gemfile ⇒ Object
433 434 435 |
# File 'lib/bundler.rb', line 433 def default_gemfile SharedHelpers.default_gemfile end |
.default_lockfile ⇒ Object
437 438 439 |
# File 'lib/bundler.rb', line 437 def default_lockfile SharedHelpers.default_lockfile end |
.definition(unlock = nil) ⇒ Bundler::Definition
Returns an instance of Bundler::Definition for given Gemfile and lockfile
191 192 193 194 195 196 197 |
# File 'lib/bundler.rb', line 191 def definition(unlock = nil) @definition = nil if unlock @definition ||= begin configure Definition.build(default_gemfile, default_lockfile, unlock) end end |
.environment ⇒ Object
181 182 183 184 |
# File 'lib/bundler.rb', line 181 def environment SharedHelpers.major_deprecation 2, "Bundler.environment has been removed in favor of Bundler.load", :print_caller_location => true load end |
.feature_flag ⇒ Object
581 582 583 |
# File 'lib/bundler.rb', line 581 def feature_flag @feature_flag ||= FeatureFlag.new(VERSION) end |
.frozen_bundle? ⇒ Boolean
199 200 201 202 203 |
# File 'lib/bundler.rb', line 199 def frozen_bundle? frozen = settings[:deployment] frozen ||= settings[:frozen] unless feature_flag.deployment_means_frozen? frozen end |
.git_present? ⇒ Boolean
576 577 578 579 |
# File 'lib/bundler.rb', line 576 def git_present? return @git_present if defined?(@git_present) @git_present = Bundler.which("git") || Bundler.which("git.exe") end |
.home ⇒ Object
264 265 266 |
# File 'lib/bundler.rb', line 264 def home bundle_path.join("bundler") end |
.install_path ⇒ Object
268 269 270 |
# File 'lib/bundler.rb', line 268 def install_path home.join("gems") end |
.load ⇒ Object
177 178 179 |
# File 'lib/bundler.rb', line 177 def load @load ||= Runtime.new(root, definition) end |
.load_gemspec(file, validate = false) ⇒ Object
545 546 547 548 549 550 551 552 |
# File 'lib/bundler.rb', line 545 def load_gemspec(file, validate = false) @gemspec_cache ||= {} key = File.(file) @gemspec_cache[key] ||= load_gemspec_uncached(file, validate) # Protect against caching side-effected gemspecs by returning a # new instance each time. @gemspec_cache[key].dup if @gemspec_cache[key] end |
.load_gemspec_uncached(file, validate = false) ⇒ Object
554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 |
# File 'lib/bundler.rb', line 554 def load_gemspec_uncached(file, validate = false) path = Pathname.new(file) contents = read_file(file) spec = if contents.start_with?("---") # YAML header eval_yaml_gemspec(path, contents) else # Eval the gemspec from its parent directory, because some gemspecs # depend on "./" relative paths. SharedHelpers.chdir(path.dirname.to_s) do eval_gemspec(path, contents) end end return unless spec spec.loaded_from = path..to_s Bundler.rubygems.validate(spec) if validate spec end |
.load_marshal(data) ⇒ Object
539 540 541 542 543 |
# File 'lib/bundler.rb', line 539 def load_marshal(data) Marshal.load(data) rescue StandardError => e raise MarshalError, "#{e.class}: #{e.}" end |
.local_platform ⇒ Object
428 429 430 431 |
# File 'lib/bundler.rb', line 428 def local_platform return Gem::Platform::RUBY if settings[:force_ruby_platform] Gem::Platform.local end |
.locked_gems ⇒ Object
205 206 207 208 209 210 211 212 213 |
# File 'lib/bundler.rb', line 205 def locked_gems @locked_gems ||= if defined?(@definition) && @definition definition.locked_gems elsif Bundler.default_lockfile.file? lock = Bundler.read_file(Bundler.default_lockfile) LockfileParser.new(lock) end end |
.mkdir_p(path, options = {}) ⇒ Object
486 487 488 489 490 491 492 493 494 |
# File 'lib/bundler.rb', line 486 def mkdir_p(path, = {}) if requires_sudo? && ![:no_sudo] sudo "mkdir -p '#{path}'" unless File.exist?(path) else SharedHelpers.filesystem_access(path, :write) do |p| FileUtils.mkdir_p(p) end end end |
.original_env ⇒ Hash
Returns Environment present before Bundler was activated.
323 324 325 |
# File 'lib/bundler.rb', line 323 def original_env ORIGINAL_ENV.clone end |
.original_exec(*args) ⇒ Object
Run a ‘Kernel.exec` to a subcommand with the environment present before Bundler was activated
407 408 409 |
# File 'lib/bundler.rb', line 407 def original_exec(*args) with_original_env { Kernel.exec(*args) } end |
.original_system(*args) ⇒ Object
Run subcommand with the environment present before Bundler was activated
385 386 387 |
# File 'lib/bundler.rb', line 385 def original_system(*args) with_original_env { Kernel.system(*args) } end |
.read_file(file) ⇒ Object
533 534 535 536 537 |
# File 'lib/bundler.rb', line 533 def read_file(file) SharedHelpers.filesystem_access(file, :read) do File.open(file, "r:UTF-8", &:read) end end |
.require(*groups) ⇒ Object
Setups Bundler environment (see Bundler.setup) if it is not already set, and loads all gems from groups specified. Unlike ::setup, can be called multiple times with different groups (if they were allowed by setup).
Assuming Gemfile
gem 'first_gem', '= 1.0'
group :test do
gem 'second_gem', '= 1.0'
end
The code will work as follows:
Bundler.setup # allow all groups
Bundler.require(:default) # requires only first_gem
# ...later
Bundler.require(:test) # requires second_gem
173 174 175 |
# File 'lib/bundler.rb', line 173 def require(*groups) setup(*groups).require(*groups) end |
.requires_sudo? ⇒ Boolean
458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 |
# File 'lib/bundler.rb', line 458 def requires_sudo? return @requires_sudo if defined?(@requires_sudo_ran) sudo_present = which "sudo" if settings.allow_sudo? if sudo_present # the bundle path and subdirectories need to be writable for RubyGems # to be able to unpack and install gems without exploding path = bundle_path path = path.parent until path.exist? # bins are written to a different location on OS X bin_dir = Pathname.new(Bundler.system_bindir) bin_dir = bin_dir.parent until bin_dir.exist? # if any directory is not writable, we need sudo files = [path, bin_dir] | Dir[bundle_path.join("build_info/*").to_s] | Dir[bundle_path.join("*").to_s] unwritable_files = files.reject {|f| File.writable?(f) } sudo_needed = !unwritable_files.empty? if sudo_needed Bundler.ui.warn "Following files may not be writable, so sudo is needed:\n #{unwritable_files.map(&:to_s).sort.join("\n ")}" end end @requires_sudo_ran = true @requires_sudo = settings.allow_sudo? && sudo_present && sudo_needed end |
.reset! ⇒ Object
585 586 587 588 589 |
# File 'lib/bundler.rb', line 585 def reset! reset_paths! Plugin.reset! reset_rubygems! end |
.reset_paths! ⇒ Object
591 592 593 594 595 596 597 598 599 600 601 602 603 604 |
# File 'lib/bundler.rb', line 591 def reset_paths! @bin_path = nil @bundler_major_version = nil @bundle_path = nil @configured = nil @configured_bundle_path = nil @definition = nil @load = nil @locked_gems = nil @root = nil @settings = nil @setup = nil @user_home = nil end |
.reset_rubygems! ⇒ Object
606 607 608 609 610 611 |
# File 'lib/bundler.rb', line 606 def reset_rubygems! return unless defined?(@rubygems) && @rubygems rubygems.undo_replacements rubygems.reset @rubygems = nil end |
.rm_rf(path) ⇒ Object
304 305 306 307 308 309 310 311 312 313 314 |
# File 'lib/bundler.rb', line 304 def rm_rf(path) FileUtils.remove_entry_secure(path) if path && File.exist?(path) rescue ArgumentError = <<EOF It is a security vulnerability to allow your home directory to be world-writable, and bundler can not continue. You should probably consider fixing this issue by running `chmod o-w ~` on *nix. Please refer to https://ruby-doc.org/stdlib-2.1.2/libdoc/fileutils/rdoc/FileUtils.html#method-c-remove_entry_secure for details. EOF File.world_writable?(path) ? Bundler.ui.warn() : raise raise PathError, "Please fix the world-writable issue with your #{path} directory" end |
.root ⇒ Object
276 277 278 279 280 281 282 283 284 |
# File 'lib/bundler.rb', line 276 def root @root ||= begin SharedHelpers.root rescue GemfileNotFound bundle_dir = default_bundle_dir raise GemfileNotFound, "Could not locate Gemfile or .bundle/ directory" unless bundle_dir Pathname.new(File.("..", bundle_dir)) end end |
.ruby_scope ⇒ Object
215 216 217 |
# File 'lib/bundler.rb', line 215 def ruby_scope "#{Bundler.rubygems.ruby_engine}/#{RbConfig::CONFIG["ruby_version"]}" end |
.settings ⇒ Object
316 317 318 319 320 |
# File 'lib/bundler.rb', line 316 def settings @settings ||= Settings.new(app_config_path) rescue GemfileNotFound @settings = Settings.new(Pathname.new(".bundle").) end |
.setup(*groups) ⇒ Object
Turns on the Bundler runtime. After Bundler.setup
call, all load
or require
of the gems would be allowed only if they are part of the Gemfile or Ruby’s standard library. If the versions specified in Gemfile, only those versions would be loaded.
Assuming Gemfile
gem 'first_gem', '= 1.0'
group :test do
gem 'second_gem', '= 1.0'
end
The code using Bundler.setup works as follows:
require 'third_gem' # allowed, required from global gems
require 'first_gem' # allowed, loads the last installed version
Bundler.setup
require 'fourth_gem' # fails with LoadError
require 'second_gem' # loads exactly version 1.0
Bundler.setup
can be called only once, all subsequent calls are no-op.
If groups list is provided, only gems from specified groups would be allowed (gems specified outside groups belong to special :default
group).
To require all gems from Gemfile (or only some groups), see Bundler.require.
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/bundler.rb', line 139 def setup(*groups) # Return if all groups are already loaded return @setup if defined?(@setup) && @setup definition.validate_runtime! SharedHelpers.print_major_deprecations! if groups.empty? # Load all groups, but only once @setup = load.setup else load.setup(*groups) end end |
.specs_path ⇒ Object
272 273 274 |
# File 'lib/bundler.rb', line 272 def specs_path bundle_path.join("specifications") end |
.sudo(str) ⇒ Object
509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 |
# File 'lib/bundler.rb', line 509 def sudo(str) SUDO_MUTEX.synchronize do prompt = "\n\n" + <<-PROMPT.gsub(/^ {6}/, "").strip + " " Your user account isn't allowed to install to the system RubyGems. You can cancel this installation and run: bundle install --path vendor/bundle to install the gems into ./vendor/bundle/, or you can enter your password and install the bundled gems to RubyGems using sudo. Password: PROMPT unless @prompted_for_sudo ||= system(%(sudo -k -p "#{prompt}" true)) raise SudoNotPermittedError, "Bundler requires sudo access to install at the moment. " \ "Try installing again, granting Bundler sudo access when prompted, or installing into a different path." end `sudo -p "#{prompt}" #{str}` end end |
.system_bindir ⇒ Object
445 446 447 448 449 450 451 452 |
# File 'lib/bundler.rb', line 445 def system_bindir # Gem.bindir doesn't always return the location that RubyGems will install # system binaries. If you put '-n foo' in your .gemrc, RubyGems will # install binstubs there instead. Unfortunately, RubyGems doesn't expose # that directory at all, so rather than parse .gemrc ourselves, we allow # the directory to be set as well, via `bundle config set bindir foo`. Bundler.settings[:system_bindir] || Bundler.rubygems.gem_bindir end |
.tmp(name = Process.pid.to_s) ⇒ Object
299 300 301 302 |
# File 'lib/bundler.rb', line 299 def tmp(name = Process.pid.to_s) Kernel.send(:require, "tmpdir") Pathname.new(Dir.mktmpdir(["bundler", name])) end |
.ui ⇒ Object
84 85 86 |
# File 'lib/bundler.rb', line 84 def ui (defined?(@ui) && @ui) || (self.ui = UI::Shell.new) end |
.ui=(ui) ⇒ Object
88 89 90 91 |
# File 'lib/bundler.rb', line 88 def ui=(ui) Bundler.rubygems.ui = UI::RGProxy.new(ui) @ui = ui end |
.unbundled_env ⇒ Hash
Returns Environment with all bundler-related variables removed.
340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 |
# File 'lib/bundler.rb', line 340 def unbundled_env env = original_env if env.key?("BUNDLER_ORIG_MANPATH") env["MANPATH"] = env["BUNDLER_ORIG_MANPATH"] end env.delete_if {|k, _| k[0, 7] == "BUNDLE_" } if env.key?("RUBYOPT") env["RUBYOPT"] = env["RUBYOPT"].sub "-rbundler/setup", "" end if env.key?("RUBYLIB") rubylib = env["RUBYLIB"].split(File::PATH_SEPARATOR) rubylib.delete(File.("..", __FILE__)) env["RUBYLIB"] = rubylib.join(File::PATH_SEPARATOR) end env end |
.unbundled_exec(*args) ⇒ Object
Run a ‘Kernel.exec` to a subcommand in an environment with all bundler related variables removed
424 425 426 |
# File 'lib/bundler.rb', line 424 def unbundled_exec(*args) with_env(unbundled_env) { Kernel.exec(*args) } end |
.unbundled_system(*args) ⇒ Object
Run subcommand in an environment with all bundler related variables removed
402 403 404 |
# File 'lib/bundler.rb', line 402 def unbundled_system(*args) with_unbundled_env { Kernel.system(*args) } end |
.use_system_gems? ⇒ Boolean
454 455 456 |
# File 'lib/bundler.rb', line 454 def use_system_gems? configured_bundle_path.use_system_gems? end |
.user_bundle_path(dir = "home") ⇒ Object
242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 |
# File 'lib/bundler.rb', line 242 def user_bundle_path(dir = "home") env_var, fallback = case dir when "home" ["BUNDLE_USER_HOME", proc { Pathname.new(user_home).join(".bundle") }] when "cache" ["BUNDLE_USER_CACHE", proc { user_bundle_path.join("cache") }] when "config" ["BUNDLE_USER_CONFIG", proc { user_bundle_path.join("config") }] when "plugin" ["BUNDLE_USER_PLUGIN", proc { user_bundle_path.join("plugin") }] else raise BundlerError, "Unknown user path requested: #{dir}" end # `fallback` will already be a Pathname, but Pathname.new() is # idempotent so it's OK Pathname.new(ENV.fetch(env_var, &fallback)) end |
.user_cache ⇒ Object
260 261 262 |
# File 'lib/bundler.rb', line 260 def user_cache user_bundle_path("cache") end |
.user_home ⇒ Object
219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 |
# File 'lib/bundler.rb', line 219 def user_home @user_home ||= begin home = Bundler.rubygems.user_home bundle_home = home ? File.join(home, ".bundle") : nil warning = if home.nil? "Your home directory is not set." elsif !File.directory?(home) "`#{home}` is not a directory." elsif !File.writable?(home) && (!File.directory?(bundle_home) || !File.writable?(bundle_home)) "`#{home}` is not writable." end if warning user_home = tmp_home_path(warning) Bundler.ui.warn "#{warning}\nBundler will use `#{user_home}' as your home directory temporarily.\n" user_home else Pathname.new(home) end end end |
.which(executable) ⇒ Object
496 497 498 499 500 501 502 503 504 505 506 507 |
# File 'lib/bundler.rb', line 496 def which(executable) if File.file?(executable) && File.executable?(executable) executable elsif paths = ENV["PATH"] quote = '"'.freeze paths.split(File::PATH_SEPARATOR).find do |path| path = path[1..-2] if path.start_with?(quote) && path.end_with?(quote) executable_path = File.(executable, path) return executable_path if File.file?(executable_path) && File.executable?(executable_path) end end end |
.with_clean_env ⇒ Object
Use ‘with_unbundled_env` instead
368 369 370 371 372 373 374 375 376 377 |
# File 'lib/bundler.rb', line 368 def with_clean_env Bundler::SharedHelpers.major_deprecation( 2, "`Bundler.with_clean_env` has been deprecated in favor of `Bundler.with_unbundled_env`. " \ "If you instead want the environment before bundler was originally loaded, use `Bundler.with_original_env`", :print_caller_location => true ) with_env(unbundled_env) { yield } end |
.with_original_env ⇒ Object
Run block with environment present before Bundler was activated
363 364 365 |
# File 'lib/bundler.rb', line 363 def with_original_env with_env(original_env) { yield } end |
.with_unbundled_env ⇒ Object
Run block with all bundler-related variables removed
380 381 382 |
# File 'lib/bundler.rb', line 380 def with_unbundled_env with_env(unbundled_env) { yield } end |