Sha256: 3d0b928c9b31a249851b538cd86261650c5bc57604bff1426c038bab41ff66d2

Contents?: true

Size: 868 Bytes

Versions: 11

Compression:

Stored size: 868 Bytes

Contents

require_relative '../filter_decorator.rb'

class Git_sort_decorator < Filter_decorator
  def initialize(filter, order)
    super(filter)
    self.order = order
  end

  def apply(filtering_obj)
    if filtering_obj.is_a?(Array)
      filtered_students = super(filtering_obj)
      if filtered_students.nil?
        return []
      end

      sorted_students = filtered_students.sort_by do |student|
        value = student.git
        String(value.nil? || value.empty? ? Float::INFINITY : value.downcase)
      end
      sorted_students.reverse! if self.order == :desc
      sorted_students
    else
      query = super(filtering_obj)
      "#{query} ORDER BY 
          CASE 
            WHEN git IS NULL OR git = '' THEN 1 
            ELSE 0 
          END, 
          git #{self.order == :asc ? 'ASC' : 'DESC' }"
    end
  end

  private
  attr_accessor :order
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
student_mvp-0.1.10 lib/models/filter/student_filters/git_sort_decorator.rb
student_mvp-0.1.9 lib/models/filter/student_filters/git_sort_decorator.rb
student_mvp-0.1.8 lib/models/filter/student_filters/git_sort_decorator.rb
student_mvp-0.1.7 lib/models/filter/student_filters/git_sort_decorator.rb
student_mvp-0.1.6 lib/models/filter/student_filters/git_sort_decorator.rb
student_mvp-0.1.5 lib/models/filter/student_filters/git_sort_decorator.rb
student_mvp-0.1.4 lib/models/filter/student_filters/git_sort_decorator.rb
student_mvp-0.1.3 lib/models/filter/student_filters/git_sort_decorator.rb
student_mvp-0.1.2 lib/models/filter/student_filters/git_sort_decorator.rb
student_mvp-0.1.1 lib/models/filter/student_filters/git_sort_decorator.rb
student_mvp-0.1.0 lib/models/filter/student_filters/git_sort_decorator.rb