class RESTFramework::ModelOrderingFilter

A filter backend which handles ordering of the recordset.

Public Instance Methods

_get_ordering() click to toggle source

Convert ordering string to an ordering configuration.

# File lib/rest_framework/filters.rb, line 38
def _get_ordering
  return nil if @controller.class.ordering_query_param.blank?
  ordering_fields = @controller.send(:get_ordering_fields)
  order_string = @controller.params[@controller.class.ordering_query_param]

  unless order_string.blank?
    ordering = {}
    order_string.split(',').each do |field|
      if field[0] == '-'
        column = field[1..-1]
        direction = :desc
      else
        column = field
        direction = :asc
      end
      if column.in?(ordering_fields)
        ordering[column.to_sym] = direction
      end
    end
    return ordering
  end

  return nil
end
get_filtered_data(data) click to toggle source

Order data according to the request query parameters.

# File lib/rest_framework/filters.rb, line 64
def get_filtered_data(data)
  ordering = self._get_ordering
  reorder = !@controller.send(:ordering_no_reorder)

  if ordering && !ordering.empty?
    return data.send(reorder ? :reorder : :order, _get_ordering)
  end

  return data
end