Season
Season automatically creates scopes for ActiveRecord date, datetime and timestamp attributes.
How many times have you done ugly things like where("users.created_at" > ?", some_date)
? If you ever built a REST API with endpoints that return a list of records, I'm sure you've done plenty of this. And that's why Season exists.
Installation
Add this line to your application's Gemfile:
gem 'season', '~> 0.3'
And then execute:
$ bundle
Or install it yourself as:
$ gem install season
Requirements
In this first version Season only supports ActiveRecord, but we plan to also support Mongoid in a very short period of time.
Usage
To use Season scopes just append _before
, _after
or _between
to your date/datetime/timestamp column names and pass the arguments accordingly. See this:
First, include Season in your model(s):
class User < ActiveRecord::Base
include Season
...
end
Scopes
Now, considering that our User
class has three datetime/date/timestamp columns named :created_at
, :updated_at
and :confirmed_at
, the following scopes will be automatically available:
# * Time/Date/DateTime/String instances are allowed as arguments.
User.created_at_before(Time.now)
User.created_at_after(DateTime.now)
User.created_at_between(Time.now - 1.week, '31-01-2015')
# => [ActiveRecord::Relation of Users]
User.updated_at_before(DateTime.now)
User.updated_at_after('01-01-2015')
User.updated_at_between(Time.now - 1.week, Time.now)
# => [ActiveRecord::Relation of Users]
User.confirmed_at_before('01-01-2015')
User.confirmed_at_after(DateTime.now)
User.confirmed_at_between(Time.now - 1.year, Time.now - 1.week)
# => [ActiveRecord::Relation of Users]
They are chainable, so you can also do things like this:
User.where(id: [1, 2, 3]).created_at_before(Time.now)
User.updated_at_after('01-01-2015').order(created_at: :asc)
Instance methods
Other than scopes, useful instance methos will also be available:
joe = User.first
joe.created_at_before?(Time.now)
joe.updated_at_after?('10-10-2000')
joe.confirmed_at_between?('20-10-2013', DateTime.now)
# => true or false
To Do
- Support other ORMs (Mongoid, ...?)
Contributing
- Fork it ( https://github.com/joaodiogocosta/season/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request