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