class Bundler::Installer

def generate_bundler_executable_stubs(spec, options = {})

def generate_bundler_executable_stubs(spec, options = {})
  if options[:binstubs_cmd] && spec.executables.empty?
    options = {}
    spec.runtime_dependencies.each do |dep|
      bins = @definition.specs[dep].first.executables
      options[dep.name] = bins unless bins.empty?
    end
    if options.any?
      Bundler.ui.warn "#{spec.name} has no executables, but you may want " \
        "one from a gem it depends on."
      options.each {|name, bins| Bundler.ui.warn "  #{name} has: #{bins.join(", ")}" }
    else
      Bundler.ui.warn "There are no executables for the gem #{spec.name}."
    end
    return
  end
  # double-assignment to avoid warnings about variables that will be used by ERB
  bin_path = bin_path = Bundler.bin_path
  template = template = File.read(File.expand_path("../templates/Executable", __FILE__))
  relative_gemfile_path = relative_gemfile_path = Bundler.default_gemfile.relative_path_from(bin_path)
  ruby_command = ruby_command = Thor::Util.ruby_command
  exists = []
  spec.executables.each do |executable|
    next if executable == "bundle"
    binstub_path = "#{bin_path}/#{executable}"
    if File.exist?(binstub_path) && !options[:force]
      exists << executable
      next
    end
    File.open(binstub_path, "w", 0777 & ~File.umask) do |f|
      f.puts ERB.new(template, nil, "-").result(binding)
    end
  end
  if options[:binstubs_cmd] && exists.any?
    case exists.size
    when 1
      Bundler.ui.warn "Skipped #{exists[0]} since it already exists."
    when 2
      Bundler.ui.warn "Skipped #{exists.join(" and ")} since they already exist."
    else
      items = exists[0...-1].empty? ? nil : exists[0...-1].join(", ")
      skipped = [items, exists[-1]].compact.join(" and ")
      Bundler.ui.warn "Skipped #{skipped} since they already exist."
    end
    Bundler.ui.warn "If you want to overwrite skipped stubs, use --force."
  end
end