Return the base Pathname for all the caches.
# File lib/puppet/forge/cache.rb, line 46 def self.base_path Pathname(Puppet.settings[:module_working_dir]) + 'cache' end
Clean out all the caches.
# File lib/puppet/forge/cache.rb, line 51 def self.clean base_path.rmtree if base_path.exist? end
Instantiate new cahe for the repositry instance.
# File lib/puppet/forge/cache.rb, line 10 def initialize(repository, options = {}) @repository = repository @options = options end
Return Pathname for repository’s cache directory, create it if needed.
# File lib/puppet/forge/cache.rb, line 41 def path (self.class.base_path + @repository.cache_key).tap{ |o| o.mkpath } end
Return contents of file at the given URI’s uri.
# File lib/puppet/forge/cache.rb, line 36 def read_retrieve(uri) return uri.read end
Return filename retrieved from uri instance. Will download
this file and cache it if needed.
TODO: Add checksum support. TODO: Add error checking.
# File lib/puppet/forge/cache.rb, line 20 def retrieve(url) (path + File.basename(url.to_s)).tap do |cached_file| uri = url.is_a?(::URI) ? url : ::URI.parse(url) unless cached_file.file? if uri.scheme == 'file' FileUtils.cp(URI.unescape(uri.path), cached_file) else # TODO: Handle HTTPS; probably should use repository.contact data = read_retrieve(uri) cached_file.open('wb') { |f| f.write data } end end end end