use yeld instead of block.call, use Gem.home for search, extract gem version checking