Class: FPM::Fry::Source::Package::Cache
- Inherits:
-
Struct
- Object
- Struct
- FPM::Fry::Source::Package::Cache
show all
- Extended by:
- Forwardable
- Defined in:
- lib/fpm/fry/source/package.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(*_) ⇒ Cache
Returns a new instance of Cache.
32
33
34
35
36
37
|
# File 'lib/fpm/fry/source/package.rb', line 32
def initialize(*_)
super
if !checksum
update!
end
end
|
Instance Attribute Details
#package ⇒ Object
Returns the value of attribute package
27
28
29
|
# File 'lib/fpm/fry/source/package.rb', line 27
def package
@package
end
|
#tempdir ⇒ Object
Returns the value of attribute tempdir
27
28
29
|
# File 'lib/fpm/fry/source/package.rb', line 27
def tempdir
@tempdir
end
|
Instance Method Details
#cache_valid? ⇒ Boolean
39
40
41
42
43
44
45
46
|
# File 'lib/fpm/fry/source/package.rb', line 39
def cache_valid?
c = @observed_checksum || checksum
begin
checksum_algorithm.file(tempfile).hexdigest == c
rescue Errno::ENOENT
return false
end
end
|
#cachekey ⇒ Object
102
103
104
|
# File 'lib/fpm/fry/source/package.rb', line 102
def cachekey
@observed_checksum || checksum
end
|
#fetch_url(url, redirs = 3, &block) ⇒ Object
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
# File 'lib/fpm/fry/source/package.rb', line 80
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, "Too many redirects"
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(resp)
else
raise CacheFailed.new('Unable to fetch file',url: url.to_s, http_code: resp.code, http_message: resp.message)
end
end
end
|
#tempfile ⇒ Object
98
99
100
|
# File 'lib/fpm/fry/source/package.rb', line 98
def tempfile
File.join(tempdir,File.basename(url.path))
end
|
#update! ⇒ Object
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# File 'lib/fpm/fry/source/package.rb', line 48
def update!
if cache_valid?
logger.debug("Found valid cache", url: url, tempfile: tempfile)
return
end
d = checksum_algorithm.new
f = nil
fetch_url(url) do |resp|
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)
if checksum
if d.hexdigest != checksum
raise CacheFailed.new("Checksum failed",given: d.hexdigest, expected: checksum)
end
else
return true
end
end
|