30 lines
		
	
	
		
			824 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			824 B
		
	
	
	
		
			Ruby
		
	
	
	
module Gitlab
 | 
						|
  module IssuableSorter
 | 
						|
    class << self
 | 
						|
      def sort(project, issuables, &sort_key)
 | 
						|
        grouped_items = issuables.group_by do |issuable|
 | 
						|
          if issuable.project.id == project.id
 | 
						|
            :project_ref
 | 
						|
          elsif issuable.project.namespace.id == project.namespace.id
 | 
						|
            :namespace_ref
 | 
						|
          else
 | 
						|
            :full_ref
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        natural_sort_issuables(grouped_items[:project_ref], project) +
 | 
						|
          natural_sort_issuables(grouped_items[:namespace_ref], project) +
 | 
						|
          natural_sort_issuables(grouped_items[:full_ref], project)
 | 
						|
      end
 | 
						|
 | 
						|
      private
 | 
						|
 | 
						|
      def natural_sort_issuables(issuables, project)
 | 
						|
        VersionSorter.sort(issuables || []) do |issuable|
 | 
						|
          issuable.to_reference(project)
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |