Sha256: ebf1f13f8bd37e1d5ed4f698ca7783be2fcceb2d0dac0e2bdcb291e6e6571b11
Contents?: true
Size: 1.5 KB
Versions: 1
Compression:
Stored size: 1.5 KB
Contents
require 'compact_index' class CompactIndex::VersionsFile def initialize(file = nil) @path = file || "/versions.list" end def create(gems) content = "created_at: #{Time.now.iso8601}" content += "\n---\n" content += parse_gems(gems) File.open(@path, 'w') do |io| io.write content end end def update(gems) File.open(@path, 'a') do |io| io.write parse_gems(gems) end end def contents(gems=nil) out = File.open(@path).read out += parse_gems(gems) if gems out end def updated_at DateTime.parse(File.mtime(@path).to_s) end private def parse_gems(gems) sorted_gems = format_by_created_time(gems) gem_lines(sorted_gems) end def format_by_created_time(gems) by_created_at = {} gems.each do |name, versions| versions.each do |v| by_created_at[v[:created_at]] ||= {} by_created_at[v[:created_at]][name] ||= [] by_created_at[v[:created_at]][name] << v[:number] end end by_created_at.sort.map do |_,gems| gems.map do |name, versions| { name: name, versions: versions } end end.flatten end def gem_lines(gems) gems.reduce("") do |concat, entry| versions = sort_versions(entry[:versions]) concat + "#{entry[:name]} #{versions.join(',')}\n" end end def sort_versions(versions) versions.sort do |a,b| gem_comp = Gem::Version.new(a) <=> Gem::Version.new(b) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
compact_index-0.3.1 | lib/compact_index/versions_file.rb |