Change variable name and references from "filter" to "order"
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
class DebatesController < ApplicationController
|
||||
before_action :parse_filter, only: :index
|
||||
before_action :parse_order, only: :index
|
||||
before_action :authenticate_user!, except: [:index, :show]
|
||||
|
||||
load_and_authorize_resource
|
||||
respond_to :html, :js
|
||||
|
||||
def index
|
||||
@debates = Debate.search(params).page(params[:page]).for_render.sort_by(@filter)
|
||||
@debates = Debate.search(params).page(params[:page]).for_render.sort_by(@order)
|
||||
set_debate_votes(@debates)
|
||||
end
|
||||
|
||||
@@ -72,9 +72,9 @@ class DebatesController < ApplicationController
|
||||
@featured_tags = ActsAsTaggableOn::Tag.where(featured: true)
|
||||
end
|
||||
|
||||
def parse_filter
|
||||
@valid_filters = ['votes', 'news', 'rated']
|
||||
@filter = @valid_filters.include?(params[:filter]) ? params[:filter] : 'news'
|
||||
def parse_order
|
||||
@valid_orders = ['votes', 'news', 'rated']
|
||||
@order = @valid_orders.include?(params[:order]) ? params[:order] : 'news'
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -40,8 +40,8 @@ class Debate < ActiveRecord::Base
|
||||
end
|
||||
end
|
||||
|
||||
def self.sort_by(filter)
|
||||
case filter
|
||||
def self.sort_by(order)
|
||||
case order
|
||||
when 'votes'
|
||||
reorder(cached_votes_total: :desc)
|
||||
when 'news'
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
<% options = @valid_filters.map { |f| [t("debates.index.filter_#{f}"), f] } %>
|
||||
|
||||
<%= form_tag('/debates', method: 'get', class: 'inline-block') do %>
|
||||
|
||||
<%= select_tag 'filter', options_for_select(options, @filter), onchange: "this.form.submit()" %>
|
||||
|
||||
<% end %>
|
||||
7
app/views/debates/_order_selector.erb
Normal file
7
app/views/debates/_order_selector.erb
Normal file
@@ -0,0 +1,7 @@
|
||||
<% options = @valid_orders.map { |f| [t("debates.index.order_#{f}"), f] } %>
|
||||
|
||||
<%= form_tag('/debates', method: 'get', class: 'inline-block') do %>
|
||||
|
||||
<%= select_tag 'order', options_for_select(options, @order), onchange: "this.form.submit()" %>
|
||||
|
||||
<% end %>
|
||||
@@ -4,7 +4,7 @@
|
||||
<div class="filters row">
|
||||
<div class="small-12 column">
|
||||
<h2><%= t("debates.index.showing") %></h2>
|
||||
<%= render 'filter_selector' %>
|
||||
<%= render 'order_selector' %>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /. Filters -->
|
||||
|
||||
@@ -33,9 +33,9 @@ en:
|
||||
index:
|
||||
create_debate: Create a debate
|
||||
showing: You are seeing debates
|
||||
filter_news: the newest
|
||||
filter_votes: the most voted
|
||||
filter_rated: the best rated
|
||||
order_news: the newest
|
||||
order_votes: the most voted
|
||||
order_rated: the best rated
|
||||
filter_topic: "You are seeing %{number} debates with the topic '%{topic}'"
|
||||
debate:
|
||||
debate: Debate
|
||||
|
||||
@@ -33,9 +33,9 @@ es:
|
||||
index:
|
||||
create_debate: Crea un debate
|
||||
showing: "Estás viendo los debates"
|
||||
filter_news: "más nuevos"
|
||||
filter_votes: "más votados"
|
||||
filter_rated: mejor valorados
|
||||
order_news: "más nuevos"
|
||||
order_votes: "más votados"
|
||||
order_rated: mejor valorados
|
||||
filter_topic: "Estás viendo %{number} debates con el tema '%{topic}'"
|
||||
debate:
|
||||
debate: Debate
|
||||
|
||||
@@ -366,44 +366,44 @@ feature 'Debates' do
|
||||
end
|
||||
end
|
||||
|
||||
scenario 'Default filter is newest' do
|
||||
scenario 'Default order is newest' do
|
||||
visit debates_path
|
||||
|
||||
expect(page).to have_select('filter', selected: 'the newest')
|
||||
expect(page).to have_select('order', selected: 'the newest')
|
||||
expect_debate_order([2, 1, 0])
|
||||
end
|
||||
|
||||
scenario 'Debates are ordered by most voted' do
|
||||
visit debates_path
|
||||
|
||||
select 'the most voted', from: 'filter'
|
||||
expect(page).to have_select('filter', selected: 'the most voted')
|
||||
select 'the most voted', from: 'order'
|
||||
expect(page).to have_select('order', selected: 'the most voted')
|
||||
|
||||
expect(find("#debates .debate", match: :first)).to have_content(@debates[0].title) # Necessary to force capybara to wait for redirect
|
||||
expect(current_url).to include('filter=votes')
|
||||
expect(current_url).to include('order=votes')
|
||||
expect_debate_order([0, 1, 2])
|
||||
end
|
||||
|
||||
scenario 'Debates are ordered by best rated' do
|
||||
visit debates_path
|
||||
|
||||
select 'the best rated', from: 'filter'
|
||||
select 'the best rated', from: 'order'
|
||||
expect(find("#debates .debate", match: :first)).to have_content(@debates[1].title)
|
||||
|
||||
expect(current_url).to include('filter=rated')
|
||||
expect(current_url).to include('order=rated')
|
||||
expect_debate_order([1, 0, 2])
|
||||
end
|
||||
|
||||
scenario 'Debates are ordered by newest' do
|
||||
visit debates_path
|
||||
|
||||
select 'the most voted', from: 'filter'
|
||||
select 'the most voted', from: 'order'
|
||||
expect(find("#debates .debate", match: :first)).to have_content(@debates[0].title)
|
||||
|
||||
select 'the newest', from: 'filter'
|
||||
select 'the newest', from: 'order'
|
||||
expect(find("#debates .debate", match: :first)).to have_content(@debates[2].title)
|
||||
|
||||
expect(current_url).to include('filter=news')
|
||||
expect(current_url).to include('order=news')
|
||||
expect_debate_order([2, 1, 0])
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user