#Whitelist Scope
whitelist_scope
provides a safe way to register and call scopes inside rails apps
whitelist_scope is in the very early stages of development right now, has few tests and could introduce breaking changes. Use at your own risk.
To get started, add whitelist_scope to your gemfile:
gem 'whitelist_scope'
Then run bundle install
to fetch the current version.
Using WhitelistScope is very simple. All you need to do is specify whitelisted scopes in your models, then call call_whitelisted_scope
in your controllers naming a scope.
Whitelist Scope acts as a wrapper around ActiveRecord scopes, providing a tiny bit of extra functionality to keep track of the whitelist.
If you don't know what scopes are, you can read about them here:
First you'll need to extend WhitelistScope, and then you can specify your scopes.
class Item < ActiveRecord::Base
extend WhitelistScope # includes the whitelist_scope methods in your model
whitelist_scope :most_recent, -> { order(updated_at: :desc) }
whitelist_scope :created_first, -> { order(created_at: :asc) }
whitelist_scope :approved, -> { where(approved: true) }
whitelist_scope :featured, -> { where(featured: true) }
end
whitelist_scope
takes a symbol as a name, and a lambda, exactly like an ActiveRecord scope.
For your controllers, WhitelistScope provides the call_whitelisted_scope
method, which takes a string naming one of your whitelisted scopes as an argument. Because WhitelistScope uses scopes under the hood, it can be chained with other scopes.
The
whitelist_scope
method will raise aNoMethodError
if it cannot find a whitelisted with the name you passed in.
class ItemController < ApplicationController
def index
@items = Item.call_whitelisted_scope("most_recent") # sorts your items by most recent
@others = Item.call_whitelisted_scope(params[:sort]) # sorts by the method specified in the params
@approved_features = Item.call_whitelisted_scope("approved", "featured") # call multiple at once
end
end
Because it uses scopes under the hood, WhitelistScope also provides separate methods for your whitelisted scopes:
class ItemController < ApplicationController
def index
@items = Item.created_first # all of your Items, sorted by creation date
end
end
WhitelistScope is released under the MIT License