Every repository with this icon (
Every repository with this icon (
Run the following if you haven't already:
gem sources -a http://gems.github.com
Install the gem(s):
sudo gem install thoughtbot-pacecar
| name | age | message | |
|---|---|---|---|
| |
.gitignore | Sun Oct 05 20:19:51 -0700 2008 | [mjankowski] |
| |
MIT-LICENSE | Tue Oct 07 12:30:54 -0700 2008 | [mjankowski] |
| |
README.rdoc | Wed Oct 08 12:46:25 -0700 2008 | [mjankowski] |
| |
Rakefile | Sun Oct 05 20:01:50 -0700 2008 | [mjankowski] |
| |
init.rb | Sun Oct 05 20:01:50 -0700 2008 | [mjankowski] |
| |
lib/ | Thu Oct 23 09:31:29 -0700 2008 | [mjankowski] |
| |
pacecar.gemspec | Thu Oct 23 09:31:52 -0700 2008 | [mjankowski] |
| |
test/ | Thu Oct 23 08:13:54 -0700 2008 | [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.




