如何在rubygems.org中列出所有宝石?

时间:2014-10-11 10:13:50

标签: ruby gem

最近我潜入了一个关于宝石的工具。

功能需要获取具有给定gems列表的repos'地址。 我想在rubygems.org中获取所有宝石信息,并将它们存储在本地,而不是每次都搜索它们。使用宝石名称列表搜索将花费太多时间。

但是,我在rubygems.org的api页面找不到响应api。有专门的宝石搜索apis,或列出一些人拥有的所有宝石。但是没有列出rubygems.org中的所有宝石信息。

那么,如何在rubygems.org中列出所有宝石?是否有任何三方api可以做到这一点?

1 个答案:

答案 0 :(得分:2)

在没有参数的情况下调用gem search会返回RubyGems.org上所有gem的完整列表。 RubyGems上的URL遵循一个简单的模式,因此,你可以开始使用像这样的简单类来使用gem名称:

class GemRepo
  attr_reader :names

  def initialize
    @names = []
    load_names
  end

  def size
    @names.size
  end

  def urls
    @names.map { |name| "https://rubygems.org/gems/#{name}" }
  end

private
  def load_names
    `gem search`.each_line do |line|
      next if line.empty? || line.match(/\*/)
      @names << line.split().first
    end
  end
end

gem_repo = GemRepo.new

gem_repo.size
# => 88679
gem_repo.names
# => ['-', '0mq', ..., 'Zzzzz', 'zzzzzz']
gem_repo.urls
# => ['https://rubygems.org/gems/-', 'https://rubygems.org/gems/0mq', ..., 'https://rubygems.org/gems/Zzzzz', 'https://rubygems.org/gems/zzzzzz']