require_relative "./post" class Blog::Cache UPDATE_FREQUENCY = 60 def initialize @topics = {} @dates = {} @last_update = 0 end def need_update? Time.now.to_i > @last_update + UPDATE_FREQUENCY end def topics update! if need_update? @topics end def dates update! if need_update? @dates end def update! dates_files = Dir["blog/posts/dates/*"] topics_files = Dir["blog/posts/topics/*"] @dates = dates_files.map{ [_1, ::Blog::Post.get_by(date: File.basename(_1))] }.to_h @topics = topics_files.map{ [_1, ::Blog::Post.get_by(topic: File.basename(_1))] }.to_h @last_update = Time.now.to_i end def find_by_date(date) path = ::Blog::Post.date_to_filepath date dates[path] end def find_by_topic(topic) path = ::Blog::Post.topic_to_filepath topic topics[path] end end