Если вы хотите безопасно попробовать запросить драгоценный камень / библиотеку, которая может или не может быть доступна, используйте что-то вроде этого:
begin
require 'securerandom'
rescue LoadError
# We just won't get securerandom
end
Это работает, даже если у рассматриваемого камня уже есть требуется.В этом сценарии оператор require
ничего не будет делать, а блок rescue
никогда не будет выполняться.
Если вас просто интересует, был ли загружен гем / библиотека, проверьте, не один лиего констант присутствует.Я делаю что-то вроде этого для динамической загрузки дополнительных функций, если загружен ActiveSupport:
if defined?(ActiveSupport)
require "active_support/cache/redis_store"
end
Вы также можете использовать противоположное для загрузки слоя совместимости, если гем / библиотека НЕ присутствует.Например, я использую некоторые Hash
методы, которых нет в базовой реализации Hash в Ruby, но которые добавлены ActiveSupport.Итак, я определяю эти методы, когда мой гем работает в среде, где ActiveSupport не существует.
require 'core_ext/hash' unless defined?(ActiveSupport)