class ArTTY::Cache
Public Class Methods
new(file = nil)
click to toggle source
Calls superclass method
# File lib/arTTY/cache.rb, line 80 def initialize(file = nil) file ||= "#{ENV["HOME"]}/.cache/arTTY/art.json" @defaults = { "art" => Hash.new, "version" => ArTTY.current_version } @cachefile = Pathname.new(file).expand_path @cachedir = @cachefile.dirname @imagesdir = "arTTY_images" super(@cachefile, false) refresh if (get_version != ArTTY.current_version) end
Public Instance Methods
art()
click to toggle source
# File lib/arTTY/cache.rb, line 16 def art return get_art.keys.sort end
get_file_for(name)
click to toggle source
# File lib/arTTY/cache.rb, line 68 def get_file_for(name) return get_art[name]["file"] end
get_height_for(name)
click to toggle source
# File lib/arTTY/cache.rb, line 72 def get_height_for(name) return get_art[name]["height"] end
get_width_for(name)
click to toggle source
# File lib/arTTY/cache.rb, line 76 def get_width_for(name) return get_art[name]["width"] end
refresh(download = false)
click to toggle source
# File lib/arTTY/cache.rb, line 95 def refresh(download = false) download_and_extract if (download) set_art(Hash.new) set_version(ArTTY.current_version) [ "#{@cachedir}/#{@imagesdir}", "#{ENV["HOME"]}/.config/arTTY/#{@imagesdir}" ].each do |dir| Dir["#{dir}/**/*.json"].each do |file| img = ArTTY::Art.new(file) get_art[img.name] = { "file" => file, "height" => img.height, "width" => img.width } end end save end
Private Instance Methods
download_and_extract()
click to toggle source
# File lib/arTTY/cache.rb, line 20 def download_and_extract # Temporary working directory new = Pathname.new( "#{@cachedir}/#{@imagesdir}.new" ).expand_path FileUtils.rm_rf(new) if (new && new.exist?) # Download newest tarball request = Typhoeus::Request.new( [ "https://gitlab.com/mjwhitta/arTTY_images/-", "archive/master/arTTY_images.tgz" ].join("/"), timeout: 10 ) request.on_headers do |response| if (response.code != 200) raise ArTTY::Error::FailedToDownload.new end end tgz = StringIO.new(request.run.body) raise ArTTY::Error::FailedToDownload.new if (tgz.eof?) # Extract new art tar = Minitar::Input.new(Zlib::GzipReader.new(tgz)) tar.each do |entry| case entry.name when /.+\.json\s*$/ entry.name.gsub!(/^.*generated\//, "") entry.prefix.gsub!(/^.*generated\//, "") tar.extract_entry(new, entry) end end # Move new art to final location old = Pathname.new("#{@cachedir}/#{@imagesdir}").expand_path if (new.exist?) FileUtils.rm_rf(old) if (old.exist?) FileUtils.mv(new, old) end rescue Interrupt raise ensure # Cleanup FileUtils.rm_rf(new) if (new && new.exist?) end