Module: AwesomeSort::AwesomeSortHelper

Defined in:
app/helpers/awesome_sort/awesome_sort_helper.rb

Constant Summary collapse

ALLOWED_SORT_ORDERS =
[
  'asc',
  'desc',
  'ASC',
  'DESC',
  :asc,
  :desc,
]

Instance Method Summary collapse

Instance Method Details

#column_sort(args = {}) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'app/helpers/awesome_sort/awesome_sort_helper.rb', line 12

def column_sort(args = {})
  args[:extra] ||= {}
  # Should pass it column_name, link_name, controller_name and
  # optionally width, html_options and header_classes
  args.reverse_merge!(
    header_classes: [],
    html_options:   {}
  )
  c_method = args[:controller_name] + "_path"
  klass = ["orderable"]
  klass << "order-#{params[:sort_order]}" if params[:sort_by] == args[:column_name]
  klass << args[:header_classes]
  klass.flatten
  sort_order =
    if params[:sort_by] == args[:column_name] && params[:sort_order] == "asc"
      "desc"
    else
      "asc"
    end
  (:th, width: args[:width], class: klass, data: { order_term: args[:column_name] }) do
    link_to(
      args[:link_name],
      public_send(c_method, { sort_order: sort_order, sort_by: args[:column_name] }.merge(args[:extra])),
      { remote: true }.merge(args[:html_options])
    )
  end
end

#sort(scope, sort_by, sort_order) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'app/helpers/awesome_sort/awesome_sort_helper.rb', line 40

def sort(scope, sort_by, sort_order)
  klass = scope.model.name.tableize.to_sym
  sort_order = (ALLOWED_SORT_ORDERS & [sort_order]).first || 'asc'

  if sort_by
    if sorter = AwesomeSort.sorters[klass][sort_by.to_sym]
      sorter.call(scope, sort_order)
    else
      scope.order(sort_by => sort_order)
    end
  else
    if default_sorter = AwesomeSort.defaults[klass]
      if default_sorter.respond_to?(:call)
        default_sorter.call(scope)
      else
        scope.order(default_sorter => 'asc')
      end
    else
      scope
    end
  end
end