Method: Helper::CacheLoader.memo

Defined in:
lib/helper.rb

.memo(path, options = DEFAULT_OPTIONS, &block) ⇒ Object

ファイルを処理するブロックの結果をキャッシュ化する

CacheLoader.load がファイルの中身だけをキャッシュ化するのに対してこれはブロックの結果をキャッシュする。ファイルが更新されない限り、ブロックの結果は変わらない

ex.) Helper::CacheLoader.memo(“filepath”) do |data|

# data に関する処理
result  # ここで nil を返すと次回も再度読み込まれる

end



489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
# File 'lib/helper.rb', line 489

def memo(path, options = DEFAULT_OPTIONS, &block)
  @@mutex.synchronize do
    fail ArgumentError, "need a block" unless block
    fullpath = File.expand_path(path)
    key = generate_key(fullpath, block)
    cache = @@result_caches[key]
    if Helper.file_latest?(fullpath) || !cache
      data = File.read(fullpath, options)
      @@result_caches[key] = result = block.call(data)
      return result
    else
      return cache
    end
  end
end