Project

order

0.0
No commit activity in last 3 years
No release in over 3 years
Provides a simple DSL for creating named scopes for ordering records
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

Order Build Status

Convenient ActiveRecord ordering. https://github.com/iamvery/order

Introduction

Order provides a convenient DSL for adding ordering scopes to ActiveRecord models. Additionally it provides an order_by method that allows you to get records by multiple orderings using a simple syntax. This is great for APIs. Take this model for example:

Getting Started

Add order to your Gemfile:

gem 'order', '~> 0.1'

Bundle it up:

# From the command line
bundle install

Usage

Add some ordering to your models:

Person < ActiveRecord::Base
  belongs_to :job
  attr_accessible :first_name, :last_name

  orderable :first_name, :last_name
  orderable :name => [:last_name, :first_name]
  orderable :job_title do |direction|
    joins(:job).order "jobs.title #{direction}"
  end
end

Now you can retrieve people in order!

Person.order_by_first_name
=> SELECT "people".* FROM "people" ORDER BY "first_name" ASC

Person.order_by_first_name(:desc)
=> SELECT "people".* FROM "people" ORDER BY "first_name" DESC

Person.order_by_name
=> SELECT "people".* FROM "people" ORDER BY "last_name" ASC, "first_name" ASC

Person.order_by_job_title
=> SELECT "people".* FROM "people" INNER JOIN "jobs" ON "jobs"."id" = "person"."job_id" ORDER BY jobs.title ASC

You can also get at ordering using the order_by method:

Person.order_by 'name.desc, job_title'
=> SELECT "people".* FROM "people" INNER JOIN "jobs" ON "jobs"."id" = "person"."job_id" ORDER BY "last_name" DESC, "first_name" DESC, jobs.title ASC

This is super helpful when developing APIs that need to provide ordered results. Consider the following:

PeopleController < ApplicationController
  respond_to :html
  def index
    @requests = Person.order_by params[:order]
    respond_with @requests
  end
end

A simple request to "/people?order=name.desc,job_title" will give you ordered results! :)

Contributing

This is a baby library! Cute? Absolutely. But also hoping to grow up into a big, useful tool to be take advantage of! (Something about that really doesn't sound right)

  • Use it.
  • Pick it apart.
  • Let me know what you think.
  • Tell others.

Please add issues and send pull requests!

Copyright

Copyright © 2012 Jay Hayes