lib/bundler/rubygems_integration.rb in bundler-1.12.0.pre.2 vs lib/bundler/rubygems_integration.rb in bundler-1.12.0.rc

- old
+ new

@@ -359,28 +359,34 @@ # Used to make bin stubs that are not created by bundler work # under bundler. The new Gem.bin_path only considers gems in # +specs+ def replace_bin_path(specs) gem_class = (class << Gem; self; end) - redefine_method(gem_class, :bin_path) do |name, *args| + + redefine_method(gem_class, :find_spec_for_exe) 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 + spec = if exec_name + specs.find {|s| s.executables.include?(exec_name) } else - spec = specs.find {|s| s.name == name } - raise Gem::Exception, "no default executable for #{spec.full_name}" unless exec_name = spec.default_executable + specs.find {|s| s.name == name } end + raise(Gem::Exception, "can't find executable #{exec_name}") unless spec + raise Gem::Exception, "no default executable for #{spec.full_name}" unless exec_name ||= spec.default_executable + 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 + spec + 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