class Gem::CompactIndexClient::Parser
Public Class Methods
‘compact_index` - an object responding to names, versions, info(name, checksum),
returning the file contents as a string
# File lib/rubygems/compact_index_client/parser.rb, line 9 def initialize(compact_index) @compact_index = compact_index @info_checksums = nil @versions_by_name = nil @available = nil @gem_parser = nil end
Public Instance Methods
# File lib/rubygems/compact_index_client/parser.rb, line 51 def available? return @available unless @available.nil? @available = !info_checksums.empty? end
# File lib/rubygems/compact_index_client/parser.rb, line 43 def info(name) parse_info(@compact_index.info(name, info_checksums[name]), name) end
# File lib/rubygems/compact_index_client/parser.rb, line 17 def names lines(@compact_index.names) end
# File lib/rubygems/compact_index_client/parser.rb, line 47 def parse_info(data, name) lines(data).map {|line| gem_parser.parse(line).unshift(name) } end
# File lib/rubygems/compact_index_client/parser.rb, line 21 def versions @versions_by_name ||= Hash.new {|hash, key| hash[key] = [] } @info_checksums = {} lines(@compact_index.versions).each do |line| name, versions_string, checksum = line.split(" ", 3) next unless versions_string # see #parse_version_checksum @info_checksums[name] = checksum || "" versions_string.split(",") do |version| delete = version.delete_prefix!("-") version = version.split("-", 2).unshift(name) if delete @versions_by_name[name].delete(version) else @versions_by_name[name] << version end end end @versions_by_name end