Method not available on this version
This method is only available on newer versions. The first available version of the method is shown here.
replace_bin_path(specs, specs_by_name)
public
Used to make bin stubs that are not created by bundler work under bundler.
The new Gem.bin_path only considers gems in
specs
Show source
def replace_bin_path(specs, specs_by_name)
gem_class = (class << Gem; self; end)
redefine_method(gem_class, :find_spec_for_exe) do |gem_name, *args|
exec_name = args.first
spec_with_name = specs_by_name[gem_name]
spec = if exec_name
if spec_with_name && spec_with_name.executables.include?(exec_name)
spec_with_name
else
specs.find {|s| s.executables.include?(exec_name) }
end
else
spec_with_name
end
unless spec
message = "can't find executable #{exec_name} for gem #{gem_name}"
if !exec_name || spec_with_name.nil?
message += ". #{gem_name} is not currently included in the bundle, " "perhaps you meant to add it to your #{Bundler.default_gemfile.basename}?"
end
raise Gem::Exception, message
end
raise Gem::Exception, "no default executable for #{spec.full_name}" unless exec_name ||= spec.default_executable
unless spec.name == gem_name
Bundler::SharedHelpers.major_deprecation 2,
"Bundler is using a binstub that was created for a different gem (#{spec.name}).\n" "You should run `bundle binstub #{gem_name}` " "to work around a system/bundle conflict."
end
spec
end
redefine_method(gem_class, :activate_bin_path) do |name, *args|
exec_name = args.first
return ENV["BUNDLE_BIN_PATH"] if exec_name == "bundle"
requirement = args.last
spec = find_spec_for_exe name, exec_name, [requirement]
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
redefine_method(gem_class, :bin_path) do |name, *args|
exec_name = args.first
return ENV["BUNDLE_BIN_PATH"] if exec_name == "bundle"
spec = find_spec_for_exe(name, *args)
exec_name ||= spec.default_executable
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