Class: Bundler::CompactIndexClient::Cache

Inherits:
Object
  • Object
show all
Defined in:
lib/bundler/compact_index_client/cache.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(directory) ⇒ Cache

Returns a new instance of Cache.



10
11
12
13
14
# File 'lib/bundler/compact_index_client/cache.rb', line 10

def initialize(directory)
  @directory = Pathname.new(directory).expand_path
  info_roots.each {|dir| mkdir(dir) }
  mkdir(info_etag_root)
end

Instance Attribute Details

#directoryObject (readonly)

Returns the value of attribute directory.



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

def directory
  @directory
end

Instance Method Details

#checksumsObject



57
58
59
60
61
62
63
64
65
66
# File 'lib/bundler/compact_index_client/cache.rb', line 57

def checksums
  checksums = {}

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

  checksums
end

#dependencies(name) ⇒ Object



68
69
70
71
72
# File 'lib/bundler/compact_index_client/cache.rb', line 68

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

#info_etag_path(name) ⇒ Object



84
85
86
87
# File 'lib/bundler/compact_index_client/cache.rb', line 84

def info_etag_path(name)
  name = name.to_s
  info_etag_root.join("#{name}-#{SharedHelpers.digest(:MD5).hexdigest(name).downcase}")
end

#info_path(name) ⇒ Object



74
75
76
77
78
79
80
81
82
# File 'lib/bundler/compact_index_client/cache.rb', line 74

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

#namesObject



16
17
18
# File 'lib/bundler/compact_index_client/cache.rb', line 16

def names
  lines(names_path)
end

#names_etag_pathObject



24
25
26
# File 'lib/bundler/compact_index_client/cache.rb', line 24

def names_etag_path
  directory.join("names.etag")
end

#names_pathObject



20
21
22
# File 'lib/bundler/compact_index_client/cache.rb', line 20

def names_path
  directory.join("names")
end

#versionsObject



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/bundler/compact_index_client/cache.rb', line 28

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(",") 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, info_checksums_by_name]
end

#versions_etag_pathObject



53
54
55
# File 'lib/bundler/compact_index_client/cache.rb', line 53

def versions_etag_path
  directory.join("versions.etag")
end

#versions_pathObject



49
50
51
# File 'lib/bundler/compact_index_client/cache.rb', line 49

def versions_path
  directory.join("versions")
end