From 84418bd671432f76e8f0acd4eff46b94361a6c01 Mon Sep 17 00:00:00 2001 From: kikito Date: Sun, 25 Dec 2016 22:58:21 +0100 Subject: [PATCH] Fixes issue in has_orders concern --- app/controllers/concerns/has_orders.rb | 4 ++-- spec/controllers/concerns/has_orders_spec.rb | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/controllers/concerns/has_orders.rb b/app/controllers/concerns/has_orders.rb index 7adadc1d3..90be317f0 100644 --- a/app/controllers/concerns/has_orders.rb +++ b/app/controllers/concerns/has_orders.rb @@ -4,8 +4,8 @@ module HasOrders class_methods do def has_orders(valid_orders, *args) before_action(*args) do |c| - @valid_orders = valid_orders.respond_to?(:call) ? valid_orders.call(c) : valid_orders - @valid_orders.delete('relevance') unless params[:search].present? + @valid_orders = valid_orders.respond_to?(:call) ? valid_orders.call(c) : valid_orders.dup + @valid_orders.delete('relevance') if params[:search].blank? @current_order = @valid_orders.include?(params[:order]) ? params[:order] : @valid_orders.first end end diff --git a/spec/controllers/concerns/has_orders_spec.rb b/spec/controllers/concerns/has_orders_spec.rb index 493ffcc3c..37d62fa84 100644 --- a/spec/controllers/concerns/has_orders_spec.rb +++ b/spec/controllers/concerns/has_orders_spec.rb @@ -33,6 +33,14 @@ describe 'HasOrders' do expect(response.body).to eq('created_at (created_at votes_count flags_count relevance)') end + it "does not overwrite the has_orders options when doing several requests" do + get :index + # Since has_orders did valid_options.delete, the first call to :index might remove 'relevance' from + # the list by mistake. + get :index, search: 'ipsum' + expect(response.body).to eq('created_at (created_at votes_count flags_count relevance)') + end + describe "the current order" do it "defaults to the first one on the list" do get :index