No commit activity in last 3 years
No release in over 3 years
RailsBetterFilters provides more flexible filters for Rails controllers. Filters may specify order constraints (:before, :after), blocking constraints, and priorities.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

~> 2.14
 Project Readme

RailsBetterFilters

Motivation

We found the default before_filters of Rails to be too unflexible for our needs. Especially, we needed to be able to specify filter orders or dependency chains. Order may be specified using the after or before options to the better_filter_opts method. Better filters are inherited and may be used in combination with regular Rails filters.

Usage

Setup

In Gemfile:

gem 'rails-better-filters'

In your base controller class:

class ApplicationController < ActionController::Base
  include RailsBetterFilters
  before_filter :dispatch_better_filters
end

Defining filters

Example:

class SomeController < ApplicationController
  def filter_a
  end

  def filter_b_with_different_name
  end

  better_filter :filter_a
  better_filter :filter_b, :filter_b_with_different_name
  better_filter(:filter_c) do
    # Blocks are also ok.
  end

  better_filter :filter_d
  better_filter_opts :filter_d, { :only => [:some_action], :after => [:filter_c], :before => [:filter_a] }
end

Take a look at the generated topological sort:

SomeController.better_filter_chain.map(&:keys).map(&:first).join(', ')
# => filter_c, filter_d, filter_a, filter_b

License

RailsBetterFilters is licensed under the MIT-License. See LICENSE for details.