def table_sort(table, opts = {}) defaults = {:ordering => :<=>, :column => 0, :reverse => false} opts = defaults.merge(opts) c = opts[:column] p = opts[:ordering].to_proc if opts[:reverse] table.sort {|a, b| p.call(b[c], a[c])} else table.sort {|a, b| p.call(a[c], b[c])} end end