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.