fetch_versions_from_rubygems

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