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