public
Description: Sets negative timestamps on Active Record models for efficiently sort in reverse order.
Homepage: http://github.com/alvarobp/inverse_sortable
Clone URL: git://github.com/alvarobp/inverse_sortable.git
name age message
file Manifest Wed Mar 18 18:45:52 -0700 2009 project imported [alvarobp]
file README.rdoc Wed Mar 18 20:00:16 -0700 2009 once again [alvarobp]
file Rakefile Wed Mar 18 18:45:52 -0700 2009 project imported [alvarobp]
file TODO Wed Mar 18 18:45:52 -0700 2009 project imported [alvarobp]
directory benchmark/ Sun Jun 14 05:57:16 -0700 2009 Added indexes and use of extension on benchmarks [alvarobp]
file init.rb Wed Mar 18 18:48:17 -0700 2009 fixed init.rb [alvarobp]
file inverse_sortable.gemspec Wed Mar 18 19:05:10 -0700 2009 fixed gemspec [alvarobp]
directory lib/ Wed Mar 18 18:45:52 -0700 2009 project imported [alvarobp]
directory test/ Sun Jun 14 05:57:16 -0700 2009 Added indexes and use of extension on benchmarks [alvarobp]
README.rdoc

inverse_sortable

Sets negative timestamps on Active Record models for efficiently sort in reverse order.

Install

  sudo gem install alvarobp-inverse_sortable --source http://gems.github.com

Add to environment.rb:

  config.gem "alvarobp-inverse_sortable", :lib => "inverse_sortable"

Usage

As a very simple plugin, using it is simple. Just add an integer attribute called "created_at_inverse" to your model. Afterwards you can make that model inverse sortable, for example:

  class Film < ActiveRecord::Base
    acts_as_inverse_sortable
  end

Therefore, you can get an inverse sorted array of Films with

  Film.find(:all, :order => 'created_at_inverse')

Test

Just do

  rake test

Benchmarks

I ran some benchmarks to see how efficient is this method. Well, most of the times benchmarks showed that this method is more efficient than "ORDER BY created_at DESC" as the table grows.

Just in case you want to run these benchmarks, you will need a mysql database (maybe other engines as well) and configure it at the top of benchmark/benchmark.rb file.