module Data::Sorting

Public Instance Methods

apply_sorting(sortparam) click to toggle source
# File lib/tabulatr/data/sorting.rb, line 26
def apply_sorting(sortparam)
  if sortparam.present?
    clname, orientation = sortparam.split(' ')
    if clname[':']
      splitted = clname.split(':')
    else
      splitted = clname.split('.')
    end
    if splitted.count == 2
      assoc_name = splitted[0].to_sym
      name = splitted[1].to_sym
      column = table_columns.find{|c| c.table_name == assoc_name && c.name == name}
    else
      name = splitted[0].to_sym
      column = table_columns.find{|c| c.name == name}
    end
    sort_by(column, orientation)
  elsif @default_order.present?
    if @default_order.is_a? String
      @relation = @relation.reorder(Arel.sql @default_order)
    else
      @relation = @relation.reorder(@default_order)
    end
  else
    @relation = @relation.reorder(Arel.sql "#{@table_name}.#{@base.primary_key} desc")
  end
end
sort_by(column, orientation) click to toggle source
# File lib/tabulatr/data/sorting.rb, line 54
def sort_by(column, orientation)
    sort_sql = column.col_options.sort_sql
    if sort_sql.respond_to? :call
      @relation = sort_sql.call(@relation, orientation, "#{@table_name}.#{@base.primary_key}", @base)
    else
      @relation = @relation.reorder(Arel.sql "#{sort_sql} #{orientation}, #{@table_name}.id desc")
    end
end