41 lines
1,013 B
Ruby
41 lines
1,013 B
Ruby
|
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
|
||
|
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)
|
||
|
end
|
||
|
|
||
|
def sort_desc_nulls_last(array, attribute)
|
||
|
attribute = attribute.to_sym
|
||
|
|
||
|
array.select(&attribute).sort_by(&attribute).reverse + array.reject(&attribute)
|
||
|
end
|
||
|
|
||
|
def sort_asc(array, attribute)
|
||
|
array.sort_by(&attribute.to_sym)
|
||
|
end
|
||
|
end
|
||
|
end
|