Project

asc_desc

0.0
Repository is archived
No commit activity in last 3 years
No release in over 3 years
This gem adds two new methods to ActiveRecord (and ActiveRecord::Relation) that allows to sort SQL queries without using the "ASC" and "DESC" SQL keywords.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 3.2.1
>= 0
>= 0
~> 1.3.5

Runtime

>= 3.0.0
 Project Readme

asc_desc Build Status

This gem adds two new methods to ActiveRecord (and ActiveRecord::Relation) that allows to sort SQL queries without using the "ASC" and "DESC" SQL keywords. It also adds a dynamic "order_by" mechanism (in the same way as dynamic finders).

Installation

Add to your Gemfile and run the bundle command to install it.

gem 'asc_desc'

Requirements

  • Ruby 1.8.7 or later
  • Ruby on Rails 3.0 or later

Usage

asc

Call asc on an ActiveRecord object or on an ActiveRecord::Relation object to sort the column(s) in an ascending way.

# using a symbol for the name of the column
Candy.where(:sugar => true).asc(:name)

# using a string for the name of the column
Candy.where(:sugar => true).asc('name')

# using multiple parameters to specify more than one column for the sort clause
Candy.where(:sugar => true).asc(:classification, :name)

# using an array to pass mutliple arguments
Candy.where(:sugar => true).asc([:classification, :name])

# using a string to specify more than one column for the sort clause
Candy.where(:sugar => true).asc('classification, name')

# without argument, the method generates a sort by id (custom primary key supported)
# SELECT "candies".* FROM "candies" ORDER BY id ASC
Candy.where(:sugar => true).asc

# the method is chainable
Candy.where(:sugar => true).asc(:classification).asc(:name)

ascending and ascending_order are aliases of asc.

desc

Call desc on an ActiveRecord object or on an ActiveRecord::Relation object to sort the column(s) in a descending way.

# using a symbol for the name of the column
Candy.where(:sugar => true).desc(:name)

# using a string for the name of the column
Candy.where(:sugar => true).desc('name')

# using multiple parameters to specify more than one column for the sort clause
Candy.where(:sugar => true).desc(:classification, :name)

# using an array to pass mutliple arguments
Candy.where(:sugar => true).desc([:classification, :name])

# using a string to specify more than one column for the sort clause
Candy.where(:sugar => true).desc('classification, name')

# without argument, the method generates a sort by id (custom primary key supported)
# SELECT "candies".* FROM "candies" ORDER BY id DESC
Candy.where(:sugar => true).desc

# the method is chainable
Candy.where(:sugar => true).desc(:classification).desc(:name)

descending and descending_order are aliases of desc.

dynamic order_by

The dynamic order_by mechanism is built the same way as the dynamic finders present from the beginning of Ruby On Rails and allows to easely write the order clause for ActiveRecord queries.

# a call to order_by just acts like the standard built-in "order" method (alias)
Candy.where(:sugar => true).order_by('classification ASC, name ASC')

# using a column as part of the method name
Candy.where(:sugar => true).order_by_name

# using a column and a sort direction (asc|desc) as part of the method name
Candy.where(:sugar => true).order_by_name_asc
Candy.where(:sugar => true).order_by_name_desc

# using multiple columns as part of the method name
Candy.where(:sugar => true).order_by_classification_and_name
Candy.where(:sugar => true).order_by_classification_and_name_and_sugar

# using multiple columns and sort directions (asc|desc) as part of the method name
Candy.where(:sugar => true).order_by_classification_asc_and_name_desc
Candy.where(:sugar => true).order_by_classification_desc_and_name_asc
Candy.where(:sugar => true).order_by_classification_asc_and_name_desc_and_sugar_asc

# using multiple columns with or without sort direction (asc|desc) as part of the method name
Candy.where(:sugar => true).order_by_classification_and_name_desc
Candy.where(:sugar => true).order_by_classification_desc_and_name
```

## Development

Questions or problems? Please post them on the [issue tracker](https://github.com/dwerlen/asc_desc/issues).
You can contribute changes by forking the project and submitting a pull request.
You can ensure the tests passing by running `bundle` and `rake`.

This gem is created by David Werlen and is under the MIT License.


## Remark

`asc_desc` was developed in order to experiment the creation of a ruby gem. 
It was conducted on the basis of the excellent tutorials from Ryan Bates, namely:

* ["#301 Extracting a Ruby Gem"](http://railscasts.com/episodes/301-extracting-a-ruby-gem)
* ["#303 Publishing a Gem"](http://railscasts.com/episodes/303-publishing-a-gem)