最近我潜入了一个关于宝石的工具。
功能需要获取具有给定gems列表的repos'地址。 我想在rubygems.org中获取所有宝石信息,并将它们存储在本地,而不是每次都搜索它们。使用宝石名称列表搜索将花费太多时间。
但是,我在rubygems.org的api页面找不到响应api。有专门的宝石搜索apis,或列出一些人拥有的所有宝石。但是没有列出rubygems.org中的所有宝石信息。
那么,如何在rubygems.org中列出所有宝石?是否有任何三方api可以做到这一点?
答案 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']