41 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.0 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
 |