class Bundler::RubygemsIntegration
def replace_bin_path(specs)
under bundler. The new Gem.bin_path only considers gems in
Used to make bin stubs that are not created by bundler work
def replace_bin_path(specs) gem_class = (class << Gem; self; end) redefine_method(gem_class, :bin_path) do |name, *args| exec_name = args.first return ENV["BUNDLE_BIN_PATH"] if exec_name == "bundle" spec = nil if exec_name spec = specs.find {|s| s.executables.include?(exec_name) } raise(Gem::Exception, "can't find executable #{exec_name}") unless spec unless spec.name == name warn "Bundler is using a binstub that was created for a different gem.\n" \ "This is deprecated, in future versions you may need to `bundle binstub #{name}` " \ "to work around a system/bundle conflict." end else spec = specs.find {|s| s.name == name } raise Gem::Exception, "no default executable for #{spec.full_name}" unless exec_name = spec.default_executable end gem_bin = File.join(spec.full_gem_path, spec.bindir, exec_name) gem_from_path_bin = File.join(File.dirname(spec.loaded_from), spec.bindir, exec_name) File.exist?(gem_bin) ? gem_bin : gem_from_path_bin end end