# 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