Sha256: dd77865fe2d1e9fbafd4eb97b6424dac48862c99af93aab0d958cc5221e82029
Contents?: true
Size: 1.1 KB
Versions: 21
Compression:
Stored size: 1.1 KB
Contents
class Dorsale::Flyboy::TasksSorter < Agilibox::Sorter def sort case column when :name Arel.sql %(LOWER(dorsale_flyboy_tasks.#{column}) #{direction}) when :progress, :term, :status {column => direction} when :taskable if direction == :asc proc { |a, b| a.taskable.to_s.downcase <=> b.taskable.to_s.downcase } else proc { |a, b| b.taskable.to_s.downcase <=> a.taskable.to_s.downcase } end when :tags Arel.sql %( ( SELECT STRING_AGG(n, ' ' ORDER BY n) FROM ( SELECT name AS n FROM tags WHERE id IN ( SELECT taggings.tag_id FROM taggings WHERE taggable_id = dorsale_flyboy_tasks.id AND taggings.taggable_type = '#{Dorsale::Flyboy::Task}' ) ) AS task_tags ) #{direction} ) end end def call order = sort if order.is_a?(Proc) # sorting by a polymorphic attribute result = @collection.sort(&order) else result = @collection.reorder(order) end result end end
Version data entries
21 entries across 21 versions & 1 rubygems