Implements the HasFilters controller concern
This commit is contained in:
13
app/controllers/concerns/has_filters.rb
Normal file
13
app/controllers/concerns/has_filters.rb
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
module HasFilters
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
class_methods do
|
||||||
|
def has_filters(valid_filters, *args)
|
||||||
|
before_filter(*args) do
|
||||||
|
@valid_filters = valid_filters
|
||||||
|
@current_filter = params[:filter]
|
||||||
|
@current_filter = @valid_filters.first unless @valid_filters.include?(@current_filter)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
37
spec/controllers/concerns/has_filters_spec.rb
Normal file
37
spec/controllers/concerns/has_filters_spec.rb
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
describe 'HasFilters' do
|
||||||
|
|
||||||
|
class FakeController < ActionController::Base; end
|
||||||
|
|
||||||
|
controller(FakeController) do
|
||||||
|
include HasFilters
|
||||||
|
has_filters ['all', 'pending', 'reviewed'], only: :index
|
||||||
|
|
||||||
|
def index
|
||||||
|
render text: "#{@current_filter} (#{@valid_filters.join(' ')})"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "has the valid filters set up" do
|
||||||
|
get :index
|
||||||
|
expect(response.body).to eq('all (all pending reviewed)')
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "the current filter" do
|
||||||
|
it "defaults to the first one on the list" do
|
||||||
|
get :index
|
||||||
|
expect(response.body).to eq('all (all pending reviewed)')
|
||||||
|
end
|
||||||
|
|
||||||
|
it "can be changed by the filter param" do
|
||||||
|
get :index, filter: 'pending'
|
||||||
|
expect(response.body).to eq('pending (all pending reviewed)')
|
||||||
|
end
|
||||||
|
|
||||||
|
it "defaults to the first one on the list if given a bogus filter" do
|
||||||
|
get :index, filter: 'foobar'
|
||||||
|
expect(response.body).to eq('all (all pending reviewed)')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user