def cache(_controller, key, from_now = nil, &block)
cache_file = @config[:cache_directory] / "#{key}.cache"
_cache_hit = _data = _expire = nil
if File.file?(cache_file)
_data, _expire = Marshal.load(cache_read(cache_file))
_cache_hit = true if _expire.nil? || Time.now < _expire
end
unless _cache_hit
cache_directory = File.dirname(cache_file)
FileUtils.mkdir_p(cache_directory)
_expire = from_now ? from_now.minutes.from_now : nil
_data = _controller.send(:capture, &block)
cache_write(cache_file, Marshal.dump([_data, _expire]))
end
_controller.send(:concat, _data, block.binding)
true
end