Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Makes active record super awesome
Ruby
Branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
spec
.gitignore
Gemfile
Gemfile.lock
LICENSE
README.md
Rakefile
hyper_active_record.gemspec

README.md

Description

Hyper Active Record is to showcase the features that would make active record super awesome

Install

gem install hyper_active_record

If you are using bundler - add dependency in gem file

gem 'hyper_active_record'

What do you get

Hyper Active Record adds the ability to query active record models by virtual attributes. This is achieved by enhancing the active record query methods where, all, count to allow scope names in conditions. It works just like passing column names in conditions. The scope on a model acts as a virtual column.

For example : If Project model is defined as

  class Project < ActiveRecord::Base
    #Columns - :name, :start_date, :end_date, :priority
    scope :started_after, lambda { |date| where('start_date > ?', date) }
    scope :completed, lambda { where('end_date IS NOT NULL') }
  end

You can do

  Project.where(:completed => true, :started_after => 2.years.ago, :priority => 1)

This works on any active record relation

  Company.projects.where(:completed => true, :started_after => 2.years.ago)

Also you can use scoped_by method on a active record relation. This method accepts a hash of scope name and parameters and returns a scoped object.

  Project.scoped_by(:completed => true, :started_after => 2.years.ago)

How is this useful?

You can use this to search a model by the query parameters(may be from a search form) in the index action of a controller. The query parameters can be a combination of database columns and virtual columns (provided a scope is defined for the virtual column).

If you are already using inherited_resources and has_scope, unit testing the controller would become simpler if implementation has_scope is changed to just pass all the query params to where or all method on the model. This would eliminate the need of data setup for testing the has_scope declaration on a controller. With this change you can just mock the model's query method to verify the scope name was passed as a condition in the method parameters.

What next?

The intention of this gem is to just get a feel of the benefits from this feature.

I would like to see these features built into the active_record instead of a monkey patch like this.

Something went wrong with that request. Please try again.