Class: Contact_sort_decorator

Inherits:
Filter_decorator show all
Defined in:
lib/models/filter/student_filters/contact_sort_decorator.rb

Instance Method Summary collapse

Constructor Details

#initialize(filter, order) ⇒ Contact_sort_decorator

Returns a new instance of Contact_sort_decorator.



4
5
6
7
# File 'lib/models/filter/student_filters/contact_sort_decorator.rb', line 4

def initialize(filter, order)
  super(filter)
  self.order = order
end

Instance Method Details

#apply(filtering_obj) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/models/filter/student_filters/contact_sort_decorator.rb', line 9

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

    sorted_students = filtered_students.sort_by do |student|
      self.get_priority(student)
    end
    sorted_students.reverse! if self.order == :desc
    sorted_students
  else
    query = super(filtering_obj)
    "#{query} ORDER BY 
      CASE
        WHEN telegram IS NOT NULL AND telegram != '' THEN 1
        WHEN email IS NOT NULL AND email != '' THEN 2
        WHEN phone_number IS NOT NULL AND phone_number != '' THEN 3
        ELSE 4
      END #{self.order_clause}
    "
  end
end