Sha256: 9c25ebc55975d94a430b88dec8f5f83fc05ac853a914411dfc9091d09b37a424

Contents?: true

Size: 1.54 KB

Versions: 6

Compression:

Stored size: 1.54 KB

Contents

require 'digest/md5'
require 'fileutils'
require 'yaml'

module WebLoader

  # 以下のようなファイルをキャッシュディレクトリの下に作成。
  # キャッシュディレクトリは絶対パスであることを想定している。
  # __cache__055a266970912bcbd34f88692528c20e.html
  # __cache__055a266970912bcbd34f88692528c20e.yml
  #
  class Cache
    PREFIX = "__cache__"
    #    CACHE_LIMIT = 3600

    def self.basename(url)
      Digest::MD5.hexdigest(url)
    end

    def self.header_filename(dir, url)
      File.join(dir, PREFIX + basename(url) + ".yml")
    end

    def self.content_filename(dir, url)
      File.join(dir, PREFIX + basename(url) + ".html")
    end

    def self.load_content(dir, url)
      header_path = header_filename(dir, url)
      content_path = content_filename(dir, url)
      content = nil
      if FileTest.file?(header_path) && FileTest.file?(content_path)
        content = File.read(content_path)
      end
      content
    end

    def self.write(dir, url, code, content)
      header_path = header_filename(dir, url)
      YAML.dump({"url" => url, "code" => code}, open(header_path, "w"))
      content_path = content_filename(dir, url)
      File.write(content_path, content)
    end

    def self.clear(dir, cache_limit)
      Dir.glob("#{dir}/#{PREFIX}*.{yml,html}").each do |path|
        diff = Time.now - File.mtime(path)
        # 1時間以上昔のキャッシュは使用しない
        too_old_cache = diff > cache_limit
        FileUtils.rm(path) if too_old_cache
      end
    end

  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
web_loader-1.7.0 lib/web_loader/cache.rb
web_loader-1.6.0 lib/web_loader/cache.rb
web_loader-1.5.0 lib/web_loader/cache.rb
web_loader-1.4.1 lib/web_loader/cache.rb
web_loader-1.4.0 lib/web_loader/cache.rb
web_loader-1.3.0 lib/web_loader/cache.rb