class FPM::Fry::Source::Archive::Cache
Public Class Methods
new(*_)
click to toggle source
Calls superclass method
# File lib/fpm/fry/source/archive.rb, line 75 def initialize(*_) super if !checksum update! end end
Public Instance Methods
cachekey()
click to toggle source
@return [String] cachekey which is equal to the checksum
# File lib/fpm/fry/source/archive.rb, line 69 def cachekey @observed_checksum || checksum end
Private Instance Methods
cache_valid?()
click to toggle source
# File lib/fpm/fry/source/archive.rb, line 82 def cache_valid? c = @observed_checksum || checksum begin checksum_algorithm.file(tempfile).hexdigest == c rescue Errno::ENOENT return false end end
fetch_url( url, redirs = 3, &block)
click to toggle source
# File lib/fpm/fry/source/archive.rb, line 125 def fetch_url( url, redirs = 3, &block) url = URI(url.to_s) unless url.kind_of? URI Net::HTTP.get_response(url) do |resp| case(resp) when Net::HTTPRedirection if redirs == 0 raise RedirectError.new("Too many redirects", url: url.to_s, location: resp['location']) end logger.debug("Following redirect", url: url.to_s , location: resp['location']) return fetch_url( resp['location'], redirs - 1, &block) when Net::HTTPSuccess return block.call( url, resp) else raise CacheFailed.new('Unable to fetch file',url: url.to_s, http_code: resp.code.to_i, http_message: resp.message) end end end
tempfile()
click to toggle source
# File lib/fpm/fry/source/archive.rb, line 143 def tempfile File.join(tempdir,File.basename(url.path)) end
update!()
click to toggle source
# File lib/fpm/fry/source/archive.rb, line 91 def update! if cache_valid? logger.debug("Found valid cache", url: url, tempfile: tempfile) return end d = checksum_algorithm.new f = nil actual_url = url.to_s fetch_url(url) do | last_url, resp| actual_url = last_url.to_s begin f = File.new(tempfile,'w') resp.read_body do | chunk | d.update(chunk) f.write(chunk) end rescue => e raise CacheFailed, e ensure f.close end end @observed_checksum = d.hexdigest logger.debug("Got checksum", checksum: @observed_checksum, url: actual_url) if checksum if d.hexdigest != checksum raise CacheFailed.new("Checksum failed",given: d.hexdigest, expected: checksum, url: actual_url) end else return true end end