class NativePackageInstaller::ExecutableFinder

Public Class Methods

exist?(basename) click to toggle source
# File lib/native-package-installer/executable-finder.rb, line 25
def exist?(basename)
  new(basename).exist?
end
find(basename) click to toggle source
# File lib/native-package-installer/executable-finder.rb, line 21
def find(basename)
  new(basename).find
end
new(basename) click to toggle source
# File lib/native-package-installer/executable-finder.rb, line 30
def initialize(basename)
  @basename = basename
  @appended_paths = []
end

Public Instance Methods

append_path(path) click to toggle source
# File lib/native-package-installer/executable-finder.rb, line 54
def append_path(path)
  @appended_paths << path
end
exist?() click to toggle source
# File lib/native-package-installer/executable-finder.rb, line 50
def exist?
  not find.nil?
end
find() click to toggle source
# File lib/native-package-installer/executable-finder.rb, line 35
def find
  extensions = detect_extensions
  paths.each do |path|
    executable_file = File.join(path, @basename)
    return executable_file if executable?(executable_file)
    extensions.each do |extension|
      executable_file_with_extension = executable_file + extension
      if executable?(executable_file_with_extension)
        return executable_file_with_extension
      end
    end
  end
  nil
end

Private Instance Methods

detect_extensions() click to toggle source
# File lib/native-package-installer/executable-finder.rb, line 69
def detect_extensions
  exts = RbConfig::CONFIG["EXECUTABLE_EXTS"]
  return exts.split if exts
  ext = RbConfig::CONFIG["EXEEXT"]
  return [ext] if ext
  []
end
executable?(path) click to toggle source
# File lib/native-package-installer/executable-finder.rb, line 77
def executable?(path)
  begin
    stat = File.stat(path)
  rescue SystemCallError
    false
  else
    stat.file? and stat.executable?
  end
end
paths() click to toggle source
# File lib/native-package-installer/executable-finder.rb, line 59
def paths
  path_env = ENV["PATH"]
  if path_env
    base_paths = path_env.split(File::PATH_SEPARATOR)
  else
    base_paths = ["/usr/local/bin", "/usr/bin", "/bin"]
  end
  base_paths + @appended_paths
end