otwarchive-symphonyarchive/lib/sortable_list.rb

14 lines
588 B
Ruby
Raw Permalink Normal View History

2026-03-11 22:22:11 +00:00
class SortableList < Array
def reorder_list(positions)
list = self
changed = {}
positions.collect!(&:to_i).each_with_index do |new_position, old_position|
if new_position != 0 && new_position <= list.length && !changed.has_key?(new_position)
changed.merge!({new_position => list[old_position]})
end
end
list -= changed.values
changed.sort.each {|pair| pair.first > list.length ? list << pair.last : list.insert(pair.first-1, pair.last)}
list.each_with_index {|list_item, index| list_item.update_attribute(:position, index + 1)}
end
end