class ActiveAdmin::OrderClause

def apply(chain)

def apply(chain)
  chain.reorder(sql)
end

def custom_sql

def custom_sql
  if active_admin_config.ordering[@column].present?
    active_admin_config.ordering[@column].call(self)
  end
end

def initialize(active_admin_config, clause)

def initialize(active_admin_config, clause)
  clause =~ /^([\w\_\.]+)(->'\w+')?_(desc|asc)$/
  @column = $1
  @op = $2
  @order = $3
  @active_admin_config = active_admin_config
  @field = [@column, @op].compact.join
end

def sql

def sql
  custom_sql || to_sql
end

def table

def table
  active_admin_config.resource_column_names.include?(@column) ? active_admin_config.resource_table_name : nil
end

def table_column

def table_column
  (@column =~ /\./) ? @column :
    [table, active_admin_config.resource_quoted_column_name(@column)].compact.join(".")
end

def to_sql

def to_sql
  [table_column, @op, ' ', @order].compact.join
end

def valid?

def valid?
  @field.present? && @order.present?
end