module Prioritize::PriorityAfter::ClassMethods
Attributes
priority_column[RW]
Public Class Methods
extended(base)
click to toggle source
# File lib/prioritize.rb, line 69 def self.extended base base.class_eval do @priority_column = :priority end end
Public Instance Methods
priority_after(before_id, moved_id)
click to toggle source
# File lib/prioritize.rb, line 24 def priority_after before_id, moved_id connection.exec_query( <<-SQL, UPDATE #{table_name} o SET #{priority_column} = ordered.rn FROM ( SELECT *, ROW_NUMBER() OVER() AS rn FROM ( ( SELECT o.* FROM #{table_name} o LEFT JOIN #{table_name} ai ON ai.id = $1 WHERE (o.#{priority_column} < ai.#{priority_column} OR ai.#{priority_column} IS NULL) AND o.id <> $2 ORDER BY o.#{priority_column} ASC ) UNION ALL ( SELECT o.* FROM #{table_name} o WHERE o.id = $2 ) UNION ALL ( SELECT o.* FROM #{table_name} o LEFT JOIN #{table_name} ai ON ai.id = $1 WHERE o.#{priority_column} >= ai.#{priority_column} AND o.id <> $2 ORDER BY o.#{priority_column} ASC ) ) numbered ) ordered WHERE o.id = ordered.id SQL 'priority_after', [[nil,before_id], [nil,moved_id]] ) end