44 lines
863 B
Ruby
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
|