Module: SlackRubyBotServer::Api::Helpers::SortHelpers

Extended by:
ActiveSupport::Concern
Defined in:
lib/slack-ruby-bot-server/api/helpers/sort_helpers.rb

Instance Method Summary collapse

Instance Method Details

#route_sortObject



34
35
36
# File 'lib/slack-ruby-bot-server/api/helpers/sort_helpers.rb', line 34

def route_sort
  (env['api.endpoint'].route_setting(:sort) || {})[:sort]
end

#sort(coll, options = {}) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/slack-ruby-bot-server/api/helpers/sort_helpers.rb', line 38

def sort(coll, options = {})
  sort_order = sort_order(options)
  unless sort_order.empty?
    if coll.respond_to?(:order)
      sort_order.each do |s|
        coll = coll.order(s[:column] => s[:direction])
      end
    elsif coll.respond_to?(:asc) && coll.respond_to?(:desc)
      sort_order.each do |s|
        coll = coll.send(s[:direction], s[:column])
      end
    else
      error!("Cannot sort #{coll.class.name}", 500)
    end
  end
  coll = coll.is_a?(Module) && coll.respond_to?(:all) ? coll.all : coll
end

#sort_order(options = {}) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/slack-ruby-bot-server/api/helpers/sort_helpers.rb', line 7

def sort_order(options = {})
  params[:sort] = options[:default_sort_order] unless params[:sort]
  return [] unless params[:sort]

  sort_order = params[:sort].to_s
  unless options[:default_sort_order] == sort_order
    supported_sort_orders = route_sort
    error!("This API doesn't support sorting", 400) if supported_sort_orders.blank?
    unless supported_sort_orders.include?(sort_order)
      error!("Invalid sort order: #{sort_order}, must be#{supported_sort_orders.count == 1 ? '' : ' one of'} '#{supported_sort_orders.join("', '")}'", 400)
    end
  end
  sort_order = sort_order.split(',').map do |sort_entry|
    sort_order = {}
    if sort_entry[0] == '-'
      sort_order[:direction] = :desc
      sort_order[:column] = sort_entry[1..-1]
    else
      sort_order[:direction] = :asc
      sort_order[:column] = sort_entry
    end
    error!("Invalid sort: #{sort_entry}", 400) if sort_order[:column].blank?
    sort_order
  end
  sort_order
end