Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Sorting library
Failed to load latest commit information.
lib Use requires rather than autoload
spec Use requires rather than autoload
.gitignore Add more doc and split code
.rspec Add .rspec for spec runner colours
.rubocop_todo.yml Add more doc and split code
.travis.yml Add ruby 2.1.5 to travis build
Gemfile Add standalone gemspecs for orms
LICENSE moved to bundler Use requires rather than autoload
Rakefile Add select and reject methods
sorted.gemspec Add links to other sorted projects


Build Status

Sorted at it's core is a set of objects that let you sort many different attributes in weird and wonderful ways.


The secret sauce is the Sorted::Set object, in this example we 'toggle' email:

require 'sorted/set'

a =[['email', 'asc'], ['name', 'asc']])
b =[['email', 'asc'], ['phone', 'asc']])

s = a.direction_intersect(b)

s.to_a #=> [['email', 'desc'], ['phone', 'asc'], ['name', 'asc']]

The best way to think about this is to imagine a spreed sheet and what happens when you sort by various columns, Sorted::Set pretty much just does that.


Parsers return a Sorted::Set that can then be used by an encoder:

require 'sorted/uri_query'

set = Sorted::URIQuery.parse('name_asc!email_asc')
Sorted::SQLQuery.encode(set) #=> 'name ASC email ASC'

Currently implemented:

  • Sorted::SQLQuery
  • Sorted::URIQuery
  • Sorted::JSONQuery
  • Sorted::ElasticsearchQuery
  • Sorted::ParamsQuery


Something went wrong with that request. Please try again.