ИМХО, лучший способ - попытаться загрузить / запросить GEM и спасти Исключение, как уже показал Рэй. Безопасно спасти исключение LoadError, потому что оно не вызывается самим GEM, но это стандартное поведение команды require.
Вместо этого вы также можете использовать команду gem.
begin
gem "somegem"
# with requirements
gem "somegem", ">=2.0"
rescue Gem::LoadError
# not installed
end
Команда gem имеет то же поведение, что и команда require, с некоторыми небольшими отличиями. AFAIK, он все еще пытается автоматически загрузить основной файл GEM.
Копаясь в файле rubygems.rb (строка 310), я обнаружил следующее выполнение
matches = Gem.source_index.find_name(gem.name, gem.version_requirements)
report_activate_error(gem) if matches.empty?
Он может дать вам несколько советов о том, как выполнить грязную проверку без фактической загрузки библиотеки.