in lib/logstash-docket/rubygem_info.rb [49:87]
def fetch_versions_from_rubygems
$stderr.puts("[gem:#{@gem_name}]: fetching release metadata from rubygems\n")
uri = URI("https://rubygems.org/api/v1/versions/#{@gem_name}.json")
response = Stud::try(5.times) do
r = Net::HTTP.get_response(uri)
if r.kind_of?(Net::HTTPSuccess)
r
elsif r.kind_of?(Net::HTTPNotFound)
nil
elsif r.kind_of?(Net::HTTPTooManyRequests)
sleep 1
raise "TOO MANY REQUESTS #{uri}"
else
raise "Fetch rubygems metadata #{uri} failed: #{r}"
end
end
body = response && response.body
if body.nil?
$stderr.puts("[#{@gem_name}]: failed to fetch versions.")
return {}
end
body.encode(Encoding::UTF_8, :invalid => :replace, :undef => :replace)
JSON.parse(body)
.sort_by { |gem_data| Gem::Version.new(gem_data['number']) }
.reverse
.each_with_object({}) do |gem_data, index|
version = gem_data['number']
index[version] = gem_data
end
end