44 lines
		
	
	
		
			1018 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1018 B
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| module Gitlab
 | |
|   module Diff
 | |
|     class PositionCollection
 | |
|       include Enumerable
 | |
| 
 | |
|       # collection - An array of Gitlab::Diff::Position
 | |
|       def initialize(collection, diff_head_sha = nil)
 | |
|         @collection = collection
 | |
|         @diff_head_sha = diff_head_sha
 | |
|       end
 | |
| 
 | |
|       def each(&block)
 | |
|         filtered_positions.each(&block)
 | |
|       end
 | |
| 
 | |
|       def concat(positions)
 | |
|         tap { @collection.concat(positions) }
 | |
|       end
 | |
| 
 | |
|       # Doing a lightweight filter in-memory given we're not prepared for querying
 | |
|       # positions (https://gitlab.com/gitlab-org/gitlab/issues/33271).
 | |
|       def unfoldable
 | |
|         select do |position|
 | |
|           position.unfoldable? && valid_head_sha?(position)
 | |
|         end
 | |
|       end
 | |
| 
 | |
|       private
 | |
| 
 | |
|       def filtered_positions
 | |
|         @collection.select { |item| item.is_a?(Position) }
 | |
|       end
 | |
| 
 | |
|       def valid_head_sha?(position)
 | |
|         return true unless @diff_head_sha
 | |
| 
 | |
|         position.head_sha == @diff_head_sha
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |