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