Class: WebLoader::Cache

Inherits:
Object
  • Object
show all
Defined in:
lib/web_loader/cache.rb

Overview

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

Constant Summary collapse

PREFIX =
"__cache__"

Class Method Summary collapse

Class Method Details

.basename(url) ⇒ Object

CACHE_LIMIT = 3600



16
17
18
# File 'lib/web_loader/cache.rb', line 16

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

.clear(dir, cache_limit) ⇒ Object



46
47
48
49
50
51
52
53
# File 'lib/web_loader/cache.rb', line 46

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

.content_filename(dir, url) ⇒ Object



24
25
26
# File 'lib/web_loader/cache.rb', line 24

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

.header_filename(dir, url) ⇒ Object



20
21
22
# File 'lib/web_loader/cache.rb', line 20

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

.load_content(dir, url) ⇒ Object



28
29
30
31
32
33
34
35
36
# File 'lib/web_loader/cache.rb', line 28

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

.write(dir, url, code, content) ⇒ Object



38
39
40
41
42
43
44
# File 'lib/web_loader/cache.rb', line 38

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