ClearBlog/lib/blog/cache.rb

44 lines
863 B
Ruby

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