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