Module: SearchObject::Plugin::Sorting

Defined in:
lib/search_object/plugin/sorting.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



6
7
8
9
10
11
12
13
# File 'lib/search_object/plugin/sorting.rb', line 6

def self.included(base)
  base.extend ClassMethods
  base.instance_eval do
    option :sort do |scope, _|
      scope.order sort_attribute => sort_direction
    end
  end
end

Instance Method Details

#reverted_sort_directionObject



40
41
42
# File 'lib/search_object/plugin/sorting.rb', line 40

def reverted_sort_direction
  sort_direction == 'desc' ? 'asc' : 'desc'
end

#sort?(attribute) ⇒ Boolean

Returns:

  • (Boolean)


15
16
17
# File 'lib/search_object/plugin/sorting.rb', line 15

def sort?(attribute)
  attribute == sort || sort.to_s.starts_with?("#{attribute} ")
end

#sort_attributeObject



19
20
21
# File 'lib/search_object/plugin/sorting.rb', line 19

def sort_attribute
  @sort_attribute ||= Helper.ensure_included sort.to_s.split(' ', 2).first, self.class.sort_attributes
end

#sort_directionObject



23
24
25
# File 'lib/search_object/plugin/sorting.rb', line 23

def sort_direction
  @sort_direction ||= Helper.ensure_included sort.to_s.split(' ', 2).last, %w[desc asc]
end

#sort_direction_for(attribute) ⇒ Object



27
28
29
30
31
32
33
# File 'lib/search_object/plugin/sorting.rb', line 27

def sort_direction_for(attribute)
  if sort_attribute == attribute.to_s
    reverted_sort_direction
  else
    'desc'
  end
end

#sort_params_for(attribute, options = {}) ⇒ Object



35
36
37
38
# File 'lib/search_object/plugin/sorting.rb', line 35

def sort_params_for(attribute, options = {})
  options['sort'] = "#{attribute} #{sort_direction_for(attribute)}"
  params options
end