123456789_123456789_123456789_123456789_123456789_

Class: Bundler::CompactIndexClient::Cache

Relationships & Source Files
Inherits: Object
Defined in: lib/bundler/compact_index_client/cache.rb

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(directory) ⇒ Cache

[ GitHub ]

  
# File 'lib/bundler/compact_index_client/cache.rb', line 10

def initialize(directory)
  @directory = Pathname.new(directory).expand_path
  info_roots.each do |dir|
    SharedHelpers.filesystem_access(dir) do
      FileUtils.mkdir_p(dir)
    end
  end
end

Instance Attribute Details

#directory (readonly)

[ GitHub ]

  
# File 'lib/bundler/compact_index_client/cache.rb', line 8

attr_reader :directory

Instance Method Details

#checksums

[ GitHub ]

  
# File 'lib/bundler/compact_index_client/cache.rb', line 52

def checksums
  checksums = {}

  lines(versions_path).each do |line|
    name, _, checksum = line.split(" ", 3)
    checksums[name] = checksum
  end

  checksums
end

#dependencies(name)

[ GitHub ]

  
# File 'lib/bundler/compact_index_client/cache.rb', line 63

def dependencies(name)
  lines(info_path(name)).map do |line|
    parse_gem(line)
  end
end

#info_path(name)

[ GitHub ]

  
# File 'lib/bundler/compact_index_client/cache.rb', line 69

def info_path(name)
  name = name.to_s
  if name =~ /[^a-z0-9_-]/
    name += "-#{SharedHelpers.digest(:MD5).hexdigest(name).downcase}"
    info_roots.last.join(name)
  else
    info_roots.first.join(name)
  end
end

#info_roots (private)

[ GitHub ]

  
# File 'lib/bundler/compact_index_client/cache.rb', line 102

def info_roots
  [
    directory.join("info"),
    directory.join("info-special-characters"),
  ]
end

#lines(path) (private)

[ GitHub ]

  
# File 'lib/bundler/compact_index_client/cache.rb', line 90

def lines(path)
  return [] unless path.file?
  lines = SharedHelpers.filesystem_access(path, :read, &:read).split("\n")
  header = lines.index("---")
  header ? lines[header + 1..-1] : lines
end

#names

[ GitHub ]

  
# File 'lib/bundler/compact_index_client/cache.rb', line 19

def names
  lines(names_path)
end

#names_path

[ GitHub ]

  
# File 'lib/bundler/compact_index_client/cache.rb', line 23

def names_path
  directory.join("names")
end

#parse_gem(line) (private)

[ GitHub ]

  
# File 'lib/bundler/compact_index_client/cache.rb', line 97

def parse_gem(line)
  @dependency_parser ||= GemParser.new
  @dependency_parser.parse(line)
end

#specific_dependency(name, version, platform)

[ GitHub ]

  
# File 'lib/bundler/compact_index_client/cache.rb', line 79

def specific_dependency(name, version, platform)
  pattern = [version, platform].compact.join("-")
  return nil if pattern.empty?

  gem_lines = info_path(name).read
  gem_line = gem_lines[/^#{Regexp.escape(pattern)}\b.*/, 0]
  gem_line ? parse_gem(gem_line) : nil
end

#versions

[ GitHub ]

  
# File 'lib/bundler/compact_index_client/cache.rb', line 27

def versions
  versions_by_name = Hash.new {|hash, key| hash[key] = [] }
  info_checksums_by_name = {}

  lines(versions_path).each do |line|
    name, versions_string, info_checksum = line.split(" ", 3)
    info_checksums_by_name[name] = info_checksum || ""
    versions_string.split(",").each do |version|
      if version.start_with?("-")
        version = version[1..-1].split("-", 2).unshift(name)
        versions_by_name[name].delete(version)
      else
        version = version.split("-", 2).unshift(name)
        versions_by_name[name] << version
      end
    end
  end

  [versions_by_name, info_checksums_by_name]
end

#versions_path

[ GitHub ]

  
# File 'lib/bundler/compact_index_client/cache.rb', line 48

def versions_path
  directory.join("versions")
end