0.02
No commit activity in last 3 years
No release in over 3 years
This gem provides additional scopes for your Active:Record models within Ruby on Rails framework.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

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.