lib/twitter_friendly/cache.rb in twitter_friendly-1.2.0 vs lib/twitter_friendly/cache.rb in twitter_friendly-1.2.1

- old
+ new

@@ -7,39 +7,37 @@ def_delegators :@client, :clear, :cleanup def initialize(*args) options = {expires_in: 1.hour, race_condition_ttl: 5.minutes}.merge(args.extract_options!) - path = options[:cache_dir] || File.join('.twitter_friendly', 'cache') + path = options[:cache_dir] || File.join('cache') FileUtils.mkdir_p(path) unless File.exists?(path) @client = ::ActiveSupport::Cache::FileStore.new(path, options) end - # @param key [String] - # - # @option serialize_options [Array] :args - def fetch(key, serialize_options, &block) + def fetch(key, args:, &block) block_result = nil - yield_and_encode = - Proc.new do - block_result = yield - encode(block_result, serialize_options) - end + 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, serialize_options) + block_result || decode(fetch_result, args: args) end private - # @option options [Array] :args - def encode(obj, options) - Serializer.encode(obj, options) + def encode(obj, args:) + Serializer.encode(obj, args: args) end - # @option options [Array] :args - def decode(str, options) - Serializer.decode(str, options) + def decode(str, args:) + Serializer.decode(str, args: args) end end end