mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-12-25 06:52:24 -05:00
38 lines
1 KiB
Ruby
38 lines
1 KiB
Ruby
|
module Positionable
|
||
|
extend ActiveSupport::Concern
|
||
|
|
||
|
def move_to(position_arg)
|
||
|
|
||
|
position = [[position_arg, 0].max, self.class.count - 1].min
|
||
|
|
||
|
if self.position.nil? or position > self.position
|
||
|
self.exec_sql "
|
||
|
UPDATE #{self.class.table_name}
|
||
|
SET position = position - 1
|
||
|
WHERE position > :current_position and position <= :new_position",
|
||
|
{current_position: self.position, new_position: position}
|
||
|
elsif position < self.position
|
||
|
self.exec_sql "
|
||
|
UPDATE #{self.class.table_name}
|
||
|
SET position = position + 1
|
||
|
WHERE position >= :new_position and position < :current_position",
|
||
|
{current_position: self.position, new_position: position}
|
||
|
else
|
||
|
# Not moving to a new position
|
||
|
return
|
||
|
end
|
||
|
|
||
|
self.exec_sql "
|
||
|
UPDATE #{self.class.table_name}
|
||
|
SET position = :position
|
||
|
WHERE id = :id", {id: id, position: position}
|
||
|
end
|
||
|
|
||
|
def use_default_position
|
||
|
self.exec_sql "
|
||
|
UPDATE #{self.class.table_name}
|
||
|
SET POSITION = null
|
||
|
WHERE id = :id", {id: id}
|
||
|
end
|
||
|
end
|