Merges orders_helper functionality inside has_orders concern

Both these objects where using/setting a variable called valid_orders.
As a results, some specs where becoming flacky
(features/budgets/investments_spec.rb, balloting phase). By putting
them together, there is no `valid_orders` variable any more (everything
is @valid_orders) and the flackyness is gone.
This commit is contained in:
kikito
2016-12-24 14:42:46 +01:00
parent 767c537883
commit 03ef20bfde
6 changed files with 13 additions and 33 deletions

View File

@@ -4,8 +4,8 @@ module HasOrders
class_methods do class_methods do
def has_orders(valid_orders, *args) def has_orders(valid_orders, *args)
before_action(*args) do |c| before_action(*args) do |c|
valid_orders = valid_orders.call(c) if valid_orders.respond_to?(:call) @valid_orders = valid_orders.respond_to?(:call) ? valid_orders.call(c) : valid_orders
@valid_orders = valid_orders @valid_orders.delete('relevance') unless params[:search].present?
@current_order = @valid_orders.include?(params[:order]) ? params[:order] : @valid_orders.first @current_order = @valid_orders.include?(params[:order]) ? params[:order] : @valid_orders.first
end end
end end

View File

@@ -1,7 +0,0 @@
module OrdersHelper
def valid_orders
@valid_orders.reject { |order| order =='relevance' && params[:search].blank? }
end
end

View File

@@ -1,5 +1,5 @@
<div class="submenu"> <div class="submenu">
<% valid_orders.each do |order| %> <% @valid_orders.each do |order| %>
<%= link_to current_path_with_query_params(order: order, page: 1), class: order == @current_order ? 'active' : '' do %> <%= link_to current_path_with_query_params(order: order, page: 1), class: order == @current_order ? 'active' : '' do %>
<%= content_tag(order == @current_order ? :h2 : :span) do %> <%= content_tag(order == @current_order ? :h2 : :span) do %>
<%= t("#{i18n_namespace}.orders.#{order}") %> <%= t("#{i18n_namespace}.orders.#{order}") %>

View File

@@ -4,7 +4,7 @@
data-order="<%= @current_order %>" data-order="<%= @current_order %>"
name="order-selector" name="order-selector"
id="order-selector-participation"> id="order-selector-participation">
<% valid_orders.each do |order| %> <% @valid_orders.each do |order| %>
<option <%= 'selected' if order == @current_order %> <option <%= 'selected' if order == @current_order %>
value='<%= current_path_with_query_params(order: order, page: 1) %>'> value='<%= current_path_with_query_params(order: order, page: 1) %>'>
<%= t("#{i18n_namespace}.orders.#{order}") %> <%= t("#{i18n_namespace}.orders.#{order}") %>

View File

@@ -1,13 +1,13 @@
require 'rails_helper' require 'rails_helper'
xdescribe 'HasOrders' do describe 'HasOrders' do
class FakeController < ActionController::Base; end class FakeController < ActionController::Base; end
controller(FakeController) do controller(FakeController) do
include HasOrders include HasOrders
has_orders ['created_at', 'votes_count', 'flags_count'], only: :index has_orders ['created_at', 'votes_count', 'flags_count', 'relevance'], only: :index
has_orders -> { ['votes_count', 'flags_count'] }, only: :new has_orders -> (c) { ['votes_count', 'flags_count'] }, only: :new
def index def index
render text: "#{@current_order} (#{@valid_orders.join(' ')})" render text: "#{@current_order} (#{@valid_orders.join(' ')})"
@@ -18,7 +18,7 @@ xdescribe 'HasOrders' do
end end
end end
it "has the valid orders set up" do it "displays all the orders except relevance when not searching" do
get :index get :index
expect(response.body).to eq('created_at (created_at votes_count flags_count)') expect(response.body).to eq('created_at (created_at votes_count flags_count)')
end end
@@ -28,6 +28,11 @@ xdescribe 'HasOrders' do
expect(response.body).to eq('votes_count (votes_count flags_count)') expect(response.body).to eq('votes_count (votes_count flags_count)')
end end
it "displays relevance when searching" do
get :index, search: 'ipsum'
expect(response.body).to eq('created_at (created_at votes_count flags_count relevance)')
end
describe "the current order" do describe "the current order" do
it "defaults to the first one on the list" do it "defaults to the first one on the list" do
get :index get :index

View File

@@ -1,18 +0,0 @@
require 'rails_helper'
describe OrdersHelper do
describe '#valid_orders' do
it 'displays relevance when searching' do
params[:search] = 'ipsum'
assign(:valid_orders, %w(created_at random relevance))
expect(helper.valid_orders).to eq %w(created_at random relevance)
end
it 'does not display relevance when not searching' do
assign(:valid_orders, %w(created_at random relevance))
expect(helper.valid_orders).to eq %w(created_at random)
end
end
end