Class: TwitterFriendly::Cache

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/twitter_friendly/cache.rb

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ Cache

Returns a new instance of Cache.



9
10
11
12
13
14
15
# File 'lib/twitter_friendly/cache.rb', line 9

def initialize(*args)
  options = {expires_in: 1.hour, race_condition_ttl: 5.minutes}.merge(args.extract_options!)

  path = options[:cache_dir] || File.join('cache')
  FileUtils.mkdir_p(path) unless File.exists?(path)
  @client = ::ActiveSupport::Cache::FileStore.new(path, options)
end

Instance Method Details

#fetch(key, args:, &block) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/twitter_friendly/cache.rb', line 17

def fetch(key, args:, &block)
  block_result = nil
  yield_and_encode = Proc.new do
    block_result = yield
    encode(block_result, args: args)
  end

  # 目的のデータがキャッシュになかった場合、キャッシュにはシリアライズしたJSONを保存しつつ、
  # このメソッドの呼び出し元にはJSONにシリアライズする前の結果を返している。
  # こうしないと、不要なデコードをすることになってしまう。

  fetch_result = @client.fetch(key, &yield_and_encode)

  block_result || decode(fetch_result, args: args)
end