CARVIEW |
Every repository with this icon (

Every repository with this icon (

Run the following if you haven't already:
gem sources -a https://gems.github.com
Install the gem(s):
sudo gem install thoughtbot-pacecar
Description: | Generated scopes for ActiveRecord classes |
Clone URL: |
git://github.com/thoughtbot/pacecar.git
Give this clone URL to anyone.
git clone git://github.com/thoughtbot/pacecar.git
|
name | age | message | |
---|---|---|---|
![]() |
.gitignore | Sun Oct 05 20:19:51 -0700 2008 | dont add doc dir [mjankowski] |
![]() |
MIT-LICENSE | Tue Oct 07 12:30:54 -0700 2008 | add the MIT LICENSE [mjankowski] |
![]() |
README.rdoc | Wed Oct 08 12:46:25 -0700 2008 | dont create null not null checks for boolean co... [mjankowski] |
![]() |
Rakefile | Sun Oct 05 20:01:50 -0700 2008 | add first pass at boolean and datetime columns ... [mjankowski] |
![]() |
init.rb | Sun Oct 05 20:01:50 -0700 2008 | add first pass at boolean and datetime columns ... [mjankowski] |
![]() |
lib/ | Thu Oct 23 09:31:29 -0700 2008 | dont protect [mjankowski] |
![]() |
pacecar.gemspec | Thu Oct 23 09:31:52 -0700 2008 | bump the gemspec [mjankowski] |
![]() |
test/ | Thu Oct 23 08:13:54 -0700 2008 | use parens around respond_to? to avoid warning ... [mjankowski] |
Pacecar
Pacecar adds named_scope methods to ActiveRecord classes via database column introspection.
Usage
Assuming a database schema…
class CreateSchema < ActiveRecord::Migration def self.up create_table :users, :force => true do |t| t.boolean :admin, :default => false, :null => false t.datetime :approved_at t.datetime :rejected_at t.string :first_name t.string :last_name t.text :description t.timestamps end create_table :posts, :force => true do |t| t.string :owner_type t.integer :owner_id t.string :publication_state t.string :post_type t.timestamps end create_table :comments, :force => true do |t| t.integer :user_id t.text :description t.timestamps end end end
And some basic model declarations…
class User < ActiveRecord::Base has_many :posts, :as => :owner has_many :comments scopes_ranking :comments end class Post < ActiveRecord::Base PUBLICATION_STATES = %w(Draft Submitted Rejected Accepted) TYPES = %w(Free Open Private Anonymous PostModern) belongs_to :owner, :polymorphic => true scopes_state :publication_state scopes_state :post_type, :with => TYPES scopes_polymorph :owner end class Comment < ActiveRecord::Base belongs_to :user end
All columns
Records where approved_at is not null, or where it is null…
User.approved_at_present User.approved_at_missing
Records where first_name is not null, or where it is null…
User.first_name_present User.first_name_missing
Records ordered by first_name (default to ‘asc’, can specify to override)…
User.by_first_name User.by_first_name(:asc) User.by_first_name(:desc)
Records where an attribute matches a search term (column LIKE "%term%")…
User.first_name_matches('John')
Records where an attribute starts or ends with a search term…
User.first_name_starts_with('A') User.first_name_ends_with('a')
Records where any non-state text or string column matches term…
User.search_for('test')
Records where any of a list of columns match the term…
User.search_for 'test', :on => [:first_name, :last_name]
Records where all of a list of columns match the term…
User.search_for 'test', :on => [:first_name, :last_name], :require => :all
Boolean columns
Records that are all admins or non-admins…
User.admin User.not_admin
Datetime columns
Records approved before or after certain times…
User.approved_at_before(5.days.ago) User.approved_at_after(4.weeks.ago)
Records with approved_at in the past or future…
User.approved_at_in_past User.approved_at_in_future
Records with approved_at inside or outside of two times…
User.approved_at_inside(10.days.ago, 1.day.ago) User.approved_at_outside(2.days.ago, 1.day.ago)
Records with certain year, month or day…
User.approved_at_in_year(2000) User.approved_at_in_month(01) User.approved_at_in_day(01)
Records with a duration (time delta between two columns) of, over or under a certain number of days…
User.with_duration_of(14, :approved_at, :rejected_at) User.with_duration_over(14, :approved_at, :rejected_at) User.with_duration_under(14, :approved_at, :rejected_at)
Polymorphic relationships
Records which have an owner_type of User…
Post.for_owner_type(User)
Associations
Records with the most and least associated records…
User.maximum_comments User.minimum_comments
State columns
Records which are in a particular state, or not in a state…
Post.publication_state_draft Post.post_type_not_open
Limits
First x records…
User.limited(10)
Named scopes
Because these are all named_scope, you can combine them.
To get all users that have a first_name set, who are admins and approved more than 2 weeks ago, ordered by their first name…
User.first_name_present.admin.approved_at_before(2.weeks.ago).by_first_name
To get the top 10 commenters…
User.maximim_comments.limited(10)
License
Pacecar is free software, and may be redistributed under the terms specified in the MIT-LICENSE file.