EasyOrderable
Easy ordering of Active Record objects.
Usage
class User < ApplicationRecord
include EasyOrderable
has_many :bookings
has_many :requests
end
class Booking < ApplicationRecord
include EasyOrdearble
belongs_to :user
end
class Request < ApplicationRecord
include EasyOrderable
belongs_to :renter, class_name: 'User', foreign_key: :user_id
end
#<User id: 1, first_name: 'A'>
#<User id: 2, first_name: 'B'>
#<User id: 3, first_name: 'C'>
Sort by column name asc
>> User.assort('first_name')
=> [#<User first_name: 'A'>, #<User first_name: 'B'>, #<User first_name: 'B'>]
Sort by column name desc
>> User.assort('-first_name')
=> [#<User first_name: 'C'>, #<User first_name: 'B'>, #<User first_name: 'A'>]
Sort by joined column name
>> Booking.assort('-user.first_name')
Sort by joined column name when associations name is custom
>> Request.assort('-user.first_name', user: :renter)
Sort by multiple params
>> Booking.assort('-user.first_name,slot_places')
You can use it from rails controller to handle json api compliant sort requests
class UsersController < ApplicationController
def index
@users = User.assort(order_param)
end
private
def order_param
params[:sort]
end
end
Installation
Add this line to your application's Gemfile:
gem 'easy_orderable'
And then execute:
$ bundle
Or install it yourself as:
$ gem install easy_orderable
Contributing
- Fork it
- Clone the project
git clone git@github.com:[YOUR GITHUB USERNAME]/easy_orderable.git
cd easy_orderable
- Install dependencies,
bundle install
- Create your feature branch
git checkout -b my-new-feature
- Write your feature, along with tests for your changes
- Run the tests
rake test
, all must be green - Commit your changes
git commit -am 'Added some feature'
- Push to the branch
git push origin my-new-feature
- Create new Pull Request
Donating
If you enjoy using eod, you are free consider a small donation! 🙂 Buy me a cup of coffee
License
The gem is available as open source under the terms of the MIT License.