class Twitterscraper::Cache
Public Class Methods
new()
click to toggle source
# File lib/twitterscraper/cache.rb, line 6 def initialize() @ttl = 86400 * 3 # 3 day @dir = 'cache' Dir.mkdir(@dir) unless File.exist?(@dir) end
Public Instance Methods
cache_key(key)
click to toggle source
# File lib/twitterscraper/cache.rb, line 48 def cache_key(key) value = key.gsub(':', '%3A').gsub('/', '%2F').gsub('?', '%3F').gsub('=', '%3D').gsub('&', '%26') value = Digest::MD5.hexdigest(value) if value.length >= 100 value end
delete(key)
click to toggle source
# File lib/twitterscraper/cache.rb, line 34 def delete(key) key = cache_key(key) file = File.join(@dir, key) File.delete(file) if File.exist?(file) end
exist?(key)
click to toggle source
# File lib/twitterscraper/cache.rb, line 28 def exist?(key) key = cache_key(key) file = File.join(@dir, key) File.exist?(file) end
fetch(key) { || ... }
click to toggle source
# File lib/twitterscraper/cache.rb, line 40 def fetch(key, &block) if (value = read(key)) value else yield.tap { |v| write(key, v) } end end
read(key)
click to toggle source
# File lib/twitterscraper/cache.rb, line 12 def read(key) key = cache_key(key) file = File.join(@dir, key) entry = Entry.from_json(File.read(file)) entry.value if entry.time > Time.now - @ttl rescue Errno::ENOENT => e nil end
write(key, value)
click to toggle source
# File lib/twitterscraper/cache.rb, line 21 def write(key, value) key = cache_key(key) entry = Entry.new(key, value, Time.now) file = File.join(@dir, key) File.write(file, entry.to_json) end