Class: WebLoader::Cache
- Inherits:
-
Object
- Object
- WebLoader::Cache
- Defined in:
- lib/web_loader/cache.rb
Overview
以下のようなファイルをキャッシュディレクトリの下に作成。キャッシュディレクトリは絶対パスであることを想定している。__cache__055a266970912bcbd34f88692528c20e.html __cache__055a266970912bcbd34f88692528c20e.yml
Constant Summary collapse
- PREFIX =
"__cache__"
Class Method Summary collapse
-
.basename(url) ⇒ Object
CACHE_LIMIT = 3600.
- .clear(dir, cache_limit) ⇒ Object
- .content_filename(dir, url) ⇒ Object
- .header_filename(dir, url) ⇒ Object
- .load_content(dir, url) ⇒ Object
- .write(dir, url, code, content) ⇒ Object
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 |