Ruby which-like command (rwhich)

Share on:

Here is a Ruby script to find libraries (like the ones used with require). It is like the Unix which tool.

There is a similar tool here, but this script doesn’t attempt to load the library (which sometimes causes load errors), and this script also locates gem libraries.

#!/usr/bin/env ruby

require ‘pathname’

EXTENSIONS = %w(.rb .so .o .dll .dylib .class) def which(file) return file if Pathname.new(file).absolute? if EXTENSIONS.any? { |ext| file.end_with?(ext) } search = [ file ] else search = EXTENSIONS.map { |ext| file + ext } end $LOAD_PATH.each do |path| res = search.map { |f| File.join(path, f) }.find { |f| File.exist?(f) } next if res.nil? puts res exit end return nil end

file = ARGV[0] puts “Usage: #{File.filename($0)} [library]” unless file res = which(file)

require ‘rubygems’ if spec = Gem.searcher.find(file) Gem.activate(spec.name, “= #{spec.version}") res = which(file) end

STDERR.puts “#{file}: Library not found.” exit 1