gitlab-org--gitlab-foss/lib/milestone_array.rb

43 lines
1.0 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
2017-11-06 17:51:24 +00:00
module MilestoneArray
class << self
def sort(array, sort_method)
case sort_method
when 'due_date_asc'
sort_asc_nulls_last(array, 'due_date')
when 'due_date_desc'
sort_desc_nulls_last(array, 'due_date')
when 'start_date_asc'
sort_asc_nulls_last(array, 'start_date')
when 'start_date_desc'
sort_desc_nulls_last(array, 'start_date')
when 'name_asc'
sort_asc(array, 'title')
when 'name_desc'
sort_asc(array, 'title').reverse
2017-11-06 17:51:24 +00:00
else
array
end
end
private
def sort_asc_nulls_last(array, attribute)
attribute = attribute.to_sym
array.select(&attribute).sort_by(&attribute) + array.reject(&attribute)
2017-11-06 17:51:24 +00:00
end
def sort_desc_nulls_last(array, attribute)
attribute = attribute.to_sym
array.select(&attribute).sort_by(&attribute).reverse + array.reject(&attribute)
2017-11-06 17:51:24 +00:00
end
def sort_asc(array, attribute)
array.sort_by(&attribute.to_sym)
end
end
end