40 lines
1 KiB
Ruby
40 lines
1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module WhatsNew
|
|
CACHE_DURATION = 1.hour
|
|
WHATS_NEW_FILES_PATH = Rails.root.join('data', 'whats_new', '*.yml')
|
|
|
|
private
|
|
|
|
def whats_new_release_items(page: 1)
|
|
Rails.cache.fetch(whats_new_items_cache_key(page), expires_in: CACHE_DURATION) do
|
|
index = page - 1
|
|
file_path = whats_new_file_paths[index]
|
|
|
|
next if file_path.nil?
|
|
|
|
file = File.read(file_path)
|
|
|
|
items = YAML.safe_load(file, permitted_classes: [Date])
|
|
|
|
items if items.is_a?(Array)
|
|
end
|
|
rescue => e
|
|
Gitlab::ErrorTracking.track_exception(e, page: page)
|
|
|
|
nil
|
|
end
|
|
|
|
def whats_new_file_paths
|
|
@whats_new_file_paths ||= Rails.cache.fetch('whats_new:file_paths', expires_in: CACHE_DURATION) do
|
|
Dir.glob(WHATS_NEW_FILES_PATH).sort.reverse
|
|
end
|
|
end
|
|
|
|
def whats_new_items_cache_key(page)
|
|
filename = /\d*\_\d*\_\d*/.match(whats_new_file_paths&.first)
|
|
"whats_new:release_items:file-#{filename}:page-#{page}"
|
|
end
|
|
end
|
|
end
|