module Bundler
def bundle_path
def bundle_path @bundle_path ||= begin path = settings[:path] || "#{Gem.user_home}/.bundle/#{Gem.ruby_engine}/#{Gem::ConfigMap[:ruby_version]}" Pathname.new(path).expand_path(root) end end
def cache
def cache bundle_path.join("cache/bundler") end
def configure
def configure @configured ||= begin configure_gem_home_and_path true end end
def configure_gem_home_and_path
def configure_gem_home_and_path if settings[:disable_shared_gems] ENV['GEM_PATH'] = '' ENV['GEM_HOME'] = File.expand_path(bundle_path, root) else paths = [Gem.dir, Gem.path].flatten.compact.uniq.reject{|p| p.empty? } ENV["GEM_PATH"] = paths.join(File::PATH_SEPARATOR) ENV["GEM_HOME"] = bundle_path.to_s end Gem.clear_paths end
def current_env_file?
def current_env_file? env_file.exist? && (env_file.read(100) =~ /Bundler #{Bundler::VERSION}/) end
def default_gemfile
def default_gemfile SharedHelpers.default_gemfile end
def definition
def definition configure lockfile = root.join("Gemfile.lock") if lockfile.exist? Definition.from_lock(lockfile) else Definition.from_gemfile(default_gemfile) end end
def env_file
def env_file SharedHelpers.env_file end
def gem_require(*groups)
def gem_require(*groups) setup(*groups).require(*groups) end
def gem_setup(*groups)
def gem_setup(*groups) return @setup if @setup begin if groups.empty? # Load all groups, but only once @setup = load.setup else # Figure out which groups haven't been loaded yet unloaded = groups - (@completed_groups || []) # Record groups that are now loaded @completed_groups = groups | (@completed_groups || []) # Load any groups that are not yet loaded unloaded.any? ? load.setup(*unloaded) : load end rescue Bundler::GemNotFound => e STDERR.puts e.message STDERR.puts "Try running `bundle install`." exit! end end
def home
def home bundle_path.join("bundler") end
def install_path
def install_path home.join("gems") end
def load
def load @load ||= begin if current_env_file? @gem_loaded = true Kernel.require env_file Bundler else runtime end end end
def root
def root default_gemfile.dirname end
def runtime
def runtime @runtime ||= Runtime.new(root, definition) end
def settings
def settings @settings ||= Settings.new(root) end
def specs_path
def specs_path bundle_path.join("specifications") end
def ui
def ui @ui ||= UI.new end
def with_clean_env
def with_clean_env bundled_env = ENV.to_hash ENV.replace(ORIGINAL_ENV) yield ensure ENV.replace(bundled_env.to_hash) end