Sha256: a06631e086fe03300d69930637b21822899c3107b9a1e4f986def48613bf35e5

Contents?: true

Size: 1.73 KB

Versions: 209

Compression:

Stored size: 1.73 KB

Contents

require 'fileutils'
require 'rbbt/util/misc'

# Provides caching functionality for files downloaded from the internet
module FileCache
  CACHEDIR = "/tmp/rbbt_cache" 
  FileUtils.mkdir CACHEDIR unless File.exist? CACHEDIR

  def self.cachedir=(cachedir)
    CACHEDIR.replace cachedir
    FileUtils.mkdir_p CACHEDIR unless File.exist? CACHEDIR
  end

  def self.cachedir
    CACHEDIR
  end

  def self.path(filename)
    filename = File.basename filename

    filename.match(/(.+)\.(.+)/)

    base = filename.sub(/\..+/,'')
    dirs = base.scan(/./).reverse.values_at(0,1,2,3,4).compact

    File.join(File.join(CACHEDIR, *dirs), filename) 
  end

  def self.add(filename, content)
    path = path(filename)
    
    FileUtils.makedirs(File.dirname(path), :mode => 0777)

    Misc.sensiblewrite(path, content)

    FileUtils.chmod 0666, path

    path
  end

  def self.found(filename)
    File.exist? FileCache.path(filename)
  end

  def self.get(filename)
    path = path(filename)

    return nil if ! File.exist? path

    File.open(path)
  end

  def self.del(filename)
    path = path(filename)

    FileUtils.rm path if File.exist? path
  end

  def self.cache_online_elements(ids, pattern = nil, &block)
    ids = [ids] unless Array === ids

    result_files = {}
    missing = []
    ids.each do |id|
      filename = pattern ? pattern.sub("{ID}", id.to_s) : id.to_s

      if FileCache.found(filename)
        result_files[id] = FileCache.path(filename)
      else
        missing << id
      end
    end

    yield(missing).each do |id, content|
      filename = pattern ? pattern.sub("{ID}", id.to_s) : id.to_s
      path = FileCache.path(filename)
      Open.write(path, content)
      result_files[id] = path
    end if missing.any?

    result_files
  end
end

Version data entries

209 entries across 209 versions & 1 rubygems

Version Path
rbbt-util-5.25.23 lib/rbbt/util/filecache.rb
rbbt-util-5.25.21 lib/rbbt/util/filecache.rb
rbbt-util-5.25.20 lib/rbbt/util/filecache.rb
rbbt-util-5.25.19 lib/rbbt/util/filecache.rb
rbbt-util-5.25.18 lib/rbbt/util/filecache.rb
rbbt-util-5.25.17 lib/rbbt/util/filecache.rb
rbbt-util-5.25.16 lib/rbbt/util/filecache.rb
rbbt-util-5.25.15 lib/rbbt/util/filecache.rb
rbbt-util-5.25.14 lib/rbbt/util/filecache.rb
rbbt-util-5.25.13 lib/rbbt/util/filecache.rb
rbbt-util-5.25.12 lib/rbbt/util/filecache.rb
rbbt-util-5.25.10 lib/rbbt/util/filecache.rb
rbbt-util-5.25.9 lib/rbbt/util/filecache.rb
rbbt-util-5.25.8 lib/rbbt/util/filecache.rb
rbbt-util-5.25.7 lib/rbbt/util/filecache.rb
rbbt-util-5.25.6 lib/rbbt/util/filecache.rb
rbbt-util-5.25.5 lib/rbbt/util/filecache.rb
rbbt-util-5.25.4 lib/rbbt/util/filecache.rb
rbbt-util-5.25.3 lib/rbbt/util/filecache.rb
rbbt-util-5.25.1 lib/rbbt/util/filecache.rb