Class: TwitterFriendly::Cache
- Inherits:
-
Object
- Object
- TwitterFriendly::Cache
- Extended by:
- Forwardable
- Defined in:
- lib/twitter_friendly/cache.rb
Instance Method Summary collapse
- #fetch(key, args:, &block) ⇒ Object
-
#initialize(*args) ⇒ Cache
constructor
A new instance of Cache.
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) = {expires_in: 1.hour, race_condition_ttl: 5.minutes}.merge(args.) path = [:cache_dir] || File.join('cache') FileUtils.mkdir_p(path) unless File.exists?(path) @client = ::ActiveSupport::Cache::FileStore.new(path, ) 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 |