Sha256: 9f5e89507ab5be64905fa3acec39fa9dee37586689253cf2d43fc6590fe3bd65
Contents?: true
Size: 1.43 KB
Versions: 1
Compression:
Stored size: 1.43 KB
Contents
require 'uri' require 'open-uri' require 'fileutils' require 'digest/md5' module Rhcf module Utils class DownloadCache include FileUtils def initialize(cache_id= 'default', ttl = nil, root_path = nil) @cache_id = cache_id @ttl = ttl @root_path ||= "/tmp/#{self.class.name}" end def get(url) outfile = filename_for(url) return outfile if self.class.hit_fname?(outfile, @ttl) # here goes the cache download!(url, outfile) end def download!(url, outfile) open(url, "rb") do |down| mkdir_p(File.dirname(outfile)) File.open(outfile, 'wb') do |fd| fd.write(down.read) end end outfile end def hit?(url) outfile = filename_for(url) self.class.hit_fname?(outfile, @ttl) # here goes the cache end def self.hit_fname?(fname, ttl) if File.exist?(fname) if ttl File::Stat.new(fname).ctime > Time.now - ttl else true end else false end end def filename_for(url) hash = Digest::MD5.hexdigest(url) uri = URI(url) basename = File.basename(uri.path) File.join(@root_path, @cache_id, hash_tree(hash), basename) end def hash_tree(hash) [*(hash[0,3].split('')) ,hash].join('/') end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rhcf-utils-0.0.3 | lib/rhcf/utils/download_cache.rb |