Sha256: 62141dd233ebff63d14dcd20991729e7ed9858ed6407cf9d35af752d5d89f3d0

Contents?: true

Size: 1.85 KB

Versions: 10

Compression:

Stored size: 1.85 KB

Contents

require 'fileutils'

module FileUtils

  if const_defined?(:Win32Exts)
    Win32Exts.concat %w{.exe .com .bat .cmd}
    Win32Exts.uniq!
  else
    Win32Exts = %w{.exe .com .bat .cmd}
  end

  module_function

  # In block form, yields each ((*program*)) within ((*path*)).  In non-block
  # form, returns an array of each ((*program*)) within ((*path*)).  Returns
  # (({nil})) if not found.
  #
  # On the MS Windows platform, it looks for executables ending with .exe,
  # .bat and .com, which you may optionally include in the program name:
  #
  #    FileUtils.whereis("ruby")  #=> ['/usr/local/bin/ruby','/opt/bin/ruby']
  #
  # CREDIT: Daniel J. Berger

  def whereis(prog, path=ENV['PATH']) #:yield:
    dirs = []
    path.split(File::PATH_SEPARATOR).each{|dir|
        # Windows checks against specific extensions
        if File::ALT_SEPARATOR
          if prog.include?('.')
              f = File.join(dir,prog)
              if File.executable?(f) && !File.directory?(f)
                if block_given?
                    yield f.gsub(/\//,'\\')
                else
                    dirs << f.gsub(/\//,'\\')
                end
              end
          else
              Win32Exts.find_all{|ext|
                f = File.join(dir,prog+ext)
                if File.executable?(f) && !File.directory?(f)
                    if block_given?
                      yield f.gsub(/\//,'\\')
                    else
                      dirs << f.gsub(/\//,'\\')
                    end
                end
              }
          end
        else
          f = File.join(dir,prog)
          # Avoid /usr/lib/ruby, for example
          if File.executable?(f) && !File.directory?(f)
              if block_given?
                yield f
              else
                dirs << f
              end
          end
        end
    }
    dirs.empty? ? nil : dirs
  end

end

Version data entries

10 entries across 9 versions & 2 rubygems

Version Path
facets-glimmer-3.2.0 lib/standard/facets/fileutils/whereis.rb
facets-3.1.0 lib/standard/facets/fileutils/whereis.rb
facets-3.0.0 lib/standard/facets/fileutils/whereis.rb
facets-2.9.3 lib/standard/facets/fileutils/whereis.rb
facets-2.9.2 src/standard/facets/fileutils/whereis.rb
facets-2.9.2 lib/standard/facets/fileutils/whereis.rb
facets-2.9.1 lib/standard/facets/fileutils/whereis.rb
facets-2.9.0 lib/more/facets/fileutils/whereis.rb
facets-2.9.0.pre.2 lib/more/facets/fileutils/whereis.rb
facets-2.9.0.pre.1 lib/more/facets/fileutils/whereis.rb