UsefullScopes
This gem provides additional scopes for your ActiveRecord models.
Installation
Add this line to your application's Gemfile:
gem 'usefull_scopes'
Or install it yourself as:
$ gem install usefull_scopes
Usage
In order to access these scopes, include UsefullScopes
module in your model.
For example:
class User < ActiveRecord::Base
include UsefullScopes
end
Global scopes
Name | Description |
---|---|
random | Random record |
exclude | Records who are not in a given array (you could also provide a single object as an argument) |
with | Records, where attributes' values are corresponding to a given hash. |
without | Records, where attributes' values are `NULL` or aren't equal to values from a given hash. |
asc_by | Records sorted in ascending order using provided attributes. |
desc_by | Records sorted in descending order using provided attributes. |
more_than | FIXME |
less_than | FIXME |
more_or_equal | FIXME |
less_or_equal | FIXME |
Scopes per attribute
These are the scopes created for each of the model attribute.
Name | Description |
---|---|
by_{attribute} | Records ordered by attribute in descending order. |
asc_{by_attribute} | Records ordered by attribute in ascending order. |
like_by_{attribute} | Records, where attribute's value LIKE a given term. |
ilike_by_{attribute} | Сase insensitive implementation of `like_by_{attribute}`. |
{attribute}_more | Records with attribute's value greater than a given value. |
{attribute}_less | Records with attribute's value less than a given value. |
{attribute}_more_or_equal | Records with attribute's value greater or equal than a given value. |
{attribute}_less_or_equal | Records with attribute's value less or equal than a given value. |
Examples
Now, it is time to play with our model!
User.create([{name: 'Mike'}, {name: 'Paul'}])
user = User.random
user.name
=> 'Mike'
User.asc_by_name.map(&:name)
=> ['Mike', 'Paul']
User.by_name.map(&:name)
=> ['Paul', 'Mike']
users = User.with_name('Mike')
users.map(&:name)
=> ['Mike']
users = User.with(name: 'Mike')
=> SELECT "users".* FROM "users" WHERE ("users"."name" = 'Mike')
users.map(&:name)
=> ['Mike']
users = User.without(name: ['Mike', 'Paul'])
=> SELECT "users".* FROM "users" WHERE ("users"."name" NOT IN ('Mike','Paul'))
users
=> []
users = User.without(:name, :id)
=> SELECT "users".* FROM "users" WHERE ("users"."name" IS NULL AND "users"."id" IS NULL)
users.count
=> 2
Contributing
Please see CONTRIBUTING.md for details.
Credits
Maintained by kaize.
Thank you to all our amazing contributors!
License
usefull_scopes is Copyright © 2012-2014 kaize. It is free software, and may be redistributed under the terms specified in the LICENSE file.