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
 |