HEX
Server: Apache
System: Linux s198.coreserver.jp 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC 2025 x86_64
User: nagasaki (10062)
PHP: 7.1.33
Disabled: NONE
Upload Files
File: //usr/local/rvm/gems/ruby-2.5.9@global/gems/gem-wrappers-1.4.0/lib/gem-wrappers.rb
require 'rbconfig'
require 'gem-wrappers/environment'
require 'gem-wrappers/installer'

module GemWrappers
  class Exception < Gem::Exception ; end
  class NoWrapper < Exception ; end

  def self.environment
    @environment ||= GemWrappers::Environment.new
  end

  def self.installer
    @installer ||= GemWrappers::Installer.new(environment_file)
  end

  def self.install(executables)
    environment.ensure
    installer.ensure

    # gem executables
    executables.each do |executable|
      installer.install(executable)
    end

    ruby_executables.each do |executable|
      installer.install(executable)
    end
  end

  def self.uninstall(executables)
    # gem executables
    executables.each do |executable|
      installer.uninstall(executable)
    end
  end

  def self.wrappers_path
    installer.wrappers_path
  end

  def self.wrapper_path(exe)
    file = File.join(wrappers_path, exe)
    if executable?(file)
      file
    else
      raise GemWrappers::NoWrapper, "No wrapper: #{file}"
    end
  end

  def self.installed_wrappers
    executables_in_directory(wrappers_path).sort.uniq
  end

  def self.gems_executables
    # do not use map(&:...) - for ruby 1.8.6 compatibility
    @executables ||= GemWrappers::Specification.installed_gems.map{|gem| gem.executables }.inject{|sum, n| sum + n }.uniq || []
  end

  def self.environment_file
    environment.file_name
  end

  def self.ruby_executables
    executables_in_directory(RbConfig::CONFIG["bindir"].sub(/\/+\z/, ''))
  end
  private_class_method :ruby_executables

  def self.executables_in_directory(dir)
    Dir.entries(dir).select do |file|
      executable?(File.join(dir, file))
    end
  end
  private_class_method :executables_in_directory

  def self.executable?(path)
    !File.directory?(path) && File.executable?(path)
  end
  private_class_method :executable?
end