Files
chromebrew/lib/gem_compact_index_client.rb
2025-06-24 23:35:08 +00:00

37 lines
936 B
Ruby

require 'uri'
require_relative 'downloader'
# Adapted from https://github.com/rubygems/rubygems/issues/8012#issuecomment-2375499571
# by @duckinator (Ellen Marie Dash)
# A very bare-bones client for the Compact Index API
# https://guides.rubygems.org/rubygems-org-compact-index-api/
class BasicCompactIndexClient
def initialize(gem_server = 'https://rubygems.org/')
@gem_server = gem_server
end
# Returns a list of all gems on the specified gem server.
def gems
lines(request('/versions'))
end
private
def request(endpoint)
uri = URI.join(@gem_server, endpoint)
response = get_http_response(uri)
raise "got HTTP code #{response.code}, expected 200" unless response.is_a?(Net::HTTPOK)
return response.body
end
def lines(data)
return [] if data.nil? || data.empty?
lines = data.split("\n")
header = lines.index('---')
header ? lines[(header + 1)..] : lines
end
end