UsefullScopes

Build Status Coverage
status

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.