class CompactIndex::VersionsFile

Public Class Methods

new(file = nil) click to toggle source
# File lib/compact_index/versions_file.rb, line 9
def initialize(file = nil)
  @path = file || "/versions.list"
end

Public Instance Methods

contents(gems = nil, args = {}) click to toggle source
# File lib/compact_index/versions_file.rb, line 13
def contents(gems = nil, args = {})
  gems = calculate_info_checksums(gems) if args.delete(:calculate_info_checksums) { false }

  raise ArgumentError, "Unknown options: #{args.keys.join(", ")}" unless args.empty?

  File.read(@path).tap do |out|
    out << gem_lines(gems) if gems
  end
end
create(gems) click to toggle source
# File lib/compact_index/versions_file.rb, line 27
def create(gems)
  gems.sort!

  File.open(@path, "w") do |io|
    io.write "created_at: #{Time.now.iso8601}\n---\n"
    io.write gem_lines(gems)
  end
end
updated_at() click to toggle source
# File lib/compact_index/versions_file.rb, line 23
def updated_at
  created_at_header(@path) || Time.at(0).to_datetime
end

Private Instance Methods

calculate_info_checksums(gems) click to toggle source
# File lib/compact_index/versions_file.rb, line 47
def calculate_info_checksums(gems)
  gems.each do |gem|
    info_checksum = Digest::MD5.hexdigest(CompactIndex.info(gem[:versions]))
    gem[:versions].last[:info_checksum] = info_checksum
  end
end
created_at_header(path) click to toggle source
# File lib/compact_index/versions_file.rb, line 54
def created_at_header(path)
  return unless File.exist? path

  File.open(path) do |file|
    file.each_line do |line|
      line.match(/created_at: (.*)\n|---\n/) do |match|
        return match[1] && DateTime.parse(match[1])
      end
    end
  end

  nil
end
gem_lines(gems) click to toggle source
# File lib/compact_index/versions_file.rb, line 38
def gem_lines(gems)
  gems.reduce("".dup) do |lines, gem|
    version_numbers = gem.versions.map(&:number_and_platform).join(",")
    lines << gem.name <<
      " ".freeze << version_numbers <<
      " #{gem.versions.last.info_checksum}\n"
  end
end