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

Version Path
dorsale-4.0.0 app/sorters/dorsale/flyboy/tasks_sorter.rb
dorsale-3.20.0 app/sorters/dorsale/flyboy/tasks_sorter.rb
dorsale-3.19.1 app/sorters/dorsale/flyboy/tasks_sorter.rb
dorsale-3.19.0 app/sorters/dorsale/flyboy/tasks_sorter.rb
dorsale-3.18.0 app/sorters/dorsale/flyboy/tasks_sorter.rb
dorsale-3.17.0 app/sorters/dorsale/flyboy/tasks_sorter.rb
dorsale-3.16.0 app/sorters/dorsale/flyboy/tasks_sorter.rb
dorsale-3.15.0 app/sorters/dorsale/flyboy/tasks_sorter.rb
dorsale-3.14.11 app/sorters/dorsale/flyboy/tasks_sorter.rb
dorsale-3.14.10 app/sorters/dorsale/flyboy/tasks_sorter.rb
dorsale-3.14.9 app/sorters/dorsale/flyboy/tasks_sorter.rb
dorsale-3.14.8 app/sorters/dorsale/flyboy/tasks_sorter.rb
dorsale-3.14.7 app/sorters/dorsale/flyboy/tasks_sorter.rb
dorsale-3.14.6 app/sorters/dorsale/flyboy/tasks_sorter.rb
dorsale-3.14.5 app/sorters/dorsale/flyboy/tasks_sorter.rb
dorsale-3.14.4 app/sorters/dorsale/flyboy/tasks_sorter.rb
dorsale-3.14.3 app/sorters/dorsale/flyboy/tasks_sorter.rb
dorsale-3.14.2 app/sorters/dorsale/flyboy/tasks_sorter.rb
dorsale-3.14.1 app/sorters/dorsale/flyboy/tasks_sorter.rb
dorsale-3.14.0 app/sorters/dorsale/flyboy/tasks_sorter.rb