From 9f3b99f0a65f2c37f29f5edf29a12e484c5f7be8 Mon Sep 17 00:00:00 2001 From: kikito Date: Fri, 3 Jun 2016 18:30:47 +0200 Subject: [PATCH] Allows blocks in has_orders concern --- app/controllers/concerns/has_orders.rb | 3 ++- spec/controllers/concerns/has_orders_spec.rb | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/controllers/concerns/has_orders.rb b/app/controllers/concerns/has_orders.rb index 31a98e850..b17781da2 100644 --- a/app/controllers/concerns/has_orders.rb +++ b/app/controllers/concerns/has_orders.rb @@ -3,7 +3,8 @@ module HasOrders class_methods do def has_orders(valid_orders, *args) - before_action(*args) do + before_action(*args) do |c| + valid_orders = valid_orders.call(c) if valid_orders.respond_to?(:call) @valid_orders = valid_orders @current_order = @valid_orders.include?(params[:order]) ? params[:order] : @valid_orders.first end diff --git a/spec/controllers/concerns/has_orders_spec.rb b/spec/controllers/concerns/has_orders_spec.rb index 082c4c068..8155b18e2 100644 --- a/spec/controllers/concerns/has_orders_spec.rb +++ b/spec/controllers/concerns/has_orders_spec.rb @@ -7,10 +7,15 @@ describe 'HasOrders' do controller(FakeController) do include HasOrders has_orders ['created_at', 'votes_count', 'flags_count'], only: :index + has_orders ->{ ['votes_count', 'flags_count'] }, only: :new def index render text: "#{@current_order} (#{@valid_orders.join(' ')})" end + + def new + render text: "#{@current_order} (#{@valid_orders.join(' ')})" + end end it "has the valid orders set up" do @@ -18,6 +23,11 @@ describe 'HasOrders' do expect(response.body).to eq('created_at (created_at votes_count flags_count)') end + it "allows specifying the orders via a lambda" do + get :new + expect(response.body).to eq('votes_count (votes_count flags_count)') + end + describe "the current order" do it "defaults to the first one on the list" do get :index