class Bundler::CompactIndexClient::Cache
Attributes
              directory[R]
            
            Public Class Methods
                              new(directory, fetcher = nil)
                              click to toggle source
                            
                            # File bundler/compact_index_client/cache.rb, line 10 def initialize(directory, fetcher = nil) @directory = Pathname.new(directory).expand_path @updater = Updater.new(fetcher) if fetcher @mutex = Thread::Mutex.new @endpoints = Set.new @info_root = mkdir("info") @special_characters_info_root = mkdir("info-special-characters") @info_etag_root = mkdir("info-etags") end
Public Instance Methods
                              info(name, remote_checksum = nil)
                              click to toggle source
                            
                            # File bundler/compact_index_client/cache.rb, line 29 def info(name, remote_checksum = nil) path = info_path(name) if remote_checksum && remote_checksum != SharedHelpers.checksum_for_file(path, :MD5) fetch("info/#{name}", path, info_etag_path(name)) else Bundler::CompactIndexClient.debug { "update skipped info/#{name} (#{remote_checksum ? "versions index checksum is nil" : "versions index checksum matches local"})" } read(path) end end
                              names()
                              click to toggle source
                            
                            # File bundler/compact_index_client/cache.rb, line 21 def names fetch("names", names_path, names_etag_path) end
                              reset!()
                              click to toggle source
                            
                            # File bundler/compact_index_client/cache.rb, line 40 def reset! @mutex.synchronize { @endpoints.clear } end
                              versions()
                              click to toggle source
                            
                            # File bundler/compact_index_client/cache.rb, line 25 def versions fetch("versions", versions_path, versions_etag_path) end
Private Instance Methods
                              already_fetched?(remote_path)
                              click to toggle source
                            
                            # File bundler/compact_index_client/cache.rb, line 86 def already_fetched?(remote_path) @mutex.synchronize { !@endpoints.add?(remote_path) } end
                              fetch(remote_path, path, etag_path)
                              click to toggle source
                            
                            # File bundler/compact_index_client/cache.rb, line 75 def fetch(remote_path, path, etag_path) if already_fetched?(remote_path) Bundler::CompactIndexClient.debug { "already fetched #{remote_path}" } else Bundler::CompactIndexClient.debug { "fetching #{remote_path}" } @updater&.update(remote_path, path, etag_path) end read(path) end
                              info_etag_path(name)
                              click to toggle source
                            
                            # File bundler/compact_index_client/cache.rb, line 62 def info_etag_path(name) name = name.to_s @info_etag_root.join("#{name}-#{SharedHelpers.digest(:MD5).hexdigest(name).downcase}") end
                              info_path(name)
                              click to toggle source
                            
                            # File bundler/compact_index_client/cache.rb, line 51 def info_path(name) name = name.to_s # TODO: converge this into the info_root by hashing all filenames like info_etag_path if /[^a-z0-9_-]/.match?(name) name += "-#{SharedHelpers.digest(:MD5).hexdigest(name).downcase}" @special_characters_info_root.join(name) else @info_root.join(name) end end
                              mkdir(name)
                              click to toggle source
                            
                            # File bundler/compact_index_client/cache.rb, line 67 def mkdir(name) directory.join(name).tap do |dir| SharedHelpers.filesystem_access(dir) do FileUtils.mkdir_p(dir) end end end
                              names_etag_path(= directory.join("names.etag"))
                              click to toggle source
                            
                            # File bundler/compact_index_client/cache.rb, line 47 def names_etag_path = directory.join("names.etag") def versions_path = directory.join("versions") def versions_etag_path = directory.join("versions.etag") def info_path(name) name = name.to_s # TODO: converge this into the info_root by hashing all filenames like info_etag_path if /[^a-z0-9_-]/.match?(name) name += "-#{SharedHelpers.digest(:MD5).hexdigest(name).downcase}" @special_characters_info_root.join(name) else @info_root.join(name) end end def info_etag_path(name) name = name.to_s @info_etag_root.join("#{name}-#{SharedHelpers.digest(:MD5).hexdigest(name).downcase}") end def mkdir(name) directory.join(name).tap do |dir| SharedHelpers.filesystem_access(dir) do FileUtils.mkdir_p(dir) end end end def fetch(remote_path, path, etag_path) if already_fetched?(remote_path) Bundler::CompactIndexClient.debug { "already fetched #{remote_path}" } else Bundler::CompactIndexClient.debug { "fetching #{remote_path}" } @updater&.update(remote_path, path, etag_path) end read(path) end def already_fetched?(remote_path) @mutex.synchronize { !@endpoints.add?(remote_path) } end def read(path) return unless path.file? SharedHelpers.filesystem_access(path, :read, &:read) end end end end
                              names_path(= directory.join("names"))
                              click to toggle source
                            
                            # File bundler/compact_index_client/cache.rb, line 46 def names_path = directory.join("names") def names_etag_path = directory.join("names.etag") def versions_path = directory.join("versions") def versions_etag_path = directory.join("versions.etag") def info_path(name) name = name.to_s # TODO: converge this into the info_root by hashing all filenames like info_etag_path if /[^a-z0-9_-]/.match?(name) name += "-#{SharedHelpers.digest(:MD5).hexdigest(name).downcase}" @special_characters_info_root.join(name) else @info_root.join(name) end end def info_etag_path(name) name = name.to_s @info_etag_root.join("#{name}-#{SharedHelpers.digest(:MD5).hexdigest(name).downcase}") end def mkdir(name) directory.join(name).tap do |dir| SharedHelpers.filesystem_access(dir) do FileUtils.mkdir_p(dir) end end end def fetch(remote_path, path, etag_path) if already_fetched?(remote_path) Bundler::CompactIndexClient.debug { "already fetched #{remote_path}" } else Bundler::CompactIndexClient.debug { "fetching #{remote_path}" } @updater&.update(remote_path, path, etag_path) end read(path) end def already_fetched?(remote_path) @mutex.synchronize { !@endpoints.add?(remote_path) } end def read(path) return unless path.file? SharedHelpers.filesystem_access(path, :read, &:read) end end end
                              read(path)
                              click to toggle source
                            
                            # File bundler/compact_index_client/cache.rb, line 90 def read(path) return unless path.file? SharedHelpers.filesystem_access(path, :read, &:read) end
                              versions_etag_path(= directory.join("versions.etag"))
                              click to toggle source
                            
                            # File bundler/compact_index_client/cache.rb, line 49 def versions_etag_path = directory.join("versions.etag") def info_path(name) name = name.to_s # TODO: converge this into the info_root by hashing all filenames like info_etag_path if /[^a-z0-9_-]/.match?(name) name += "-#{SharedHelpers.digest(:MD5).hexdigest(name).downcase}" @special_characters_info_root.join(name) else @info_root.join(name) end end def info_etag_path(name) name = name.to_s @info_etag_root.join("#{name}-#{SharedHelpers.digest(:MD5).hexdigest(name).downcase}") end def mkdir(name) directory.join(name).tap do |dir| SharedHelpers.filesystem_access(dir) do FileUtils.mkdir_p(dir) end end end def fetch(remote_path, path, etag_path) if already_fetched?(remote_path) Bundler::CompactIndexClient.debug { "already fetched #{remote_path}" } else Bundler::CompactIndexClient.debug { "fetching #{remote_path}" } @updater&.update(remote_path, path, etag_path) end read(path) end def already_fetched?(remote_path) @mutex.synchronize { !@endpoints.add?(remote_path) } end def read(path) return unless path.file? SharedHelpers.filesystem_access(path, :read, &:read) end end
                              versions_path(= directory.join("versions"))
                              click to toggle source
                            
                            # File bundler/compact_index_client/cache.rb, line 48 def versions_path = directory.join("versions") def versions_etag_path = directory.join("versions.etag") def info_path(name) name = name.to_s # TODO: converge this into the info_root by hashing all filenames like info_etag_path if /[^a-z0-9_-]/.match?(name) name += "-#{SharedHelpers.digest(:MD5).hexdigest(name).downcase}" @special_characters_info_root.join(name) else @info_root.join(name) end end def info_etag_path(name) name = name.to_s @info_etag_root.join("#{name}-#{SharedHelpers.digest(:MD5).hexdigest(name).downcase}") end def mkdir(name) directory.join(name).tap do |dir| SharedHelpers.filesystem_access(dir) do FileUtils.mkdir_p(dir) end end end def fetch(remote_path, path, etag_path) if already_fetched?(remote_path) Bundler::CompactIndexClient.debug { "already fetched #{remote_path}" } else Bundler::CompactIndexClient.debug { "fetching #{remote_path}" } @updater&.update(remote_path, path, etag_path) end read(path) end def already_fetched?(remote_path) @mutex.synchronize { !@endpoints.add?(remote_path) } end def read(path) return unless path.file? SharedHelpers.filesystem_access(path, :read, &:read) end end end