/favorites: replace favorites view with ordfav: search.
Make /favorites redirect to a ordfav:<user> search instead of having a separate view just for favorites. This duplicated a lot of code for no good reason.
This commit is contained in:
@@ -5,22 +5,13 @@ class FavoritesController < ApplicationController
|
||||
rescue_with Favorite::Error, status: 422
|
||||
|
||||
def index
|
||||
if params[:tags]
|
||||
redirect_to(posts_path(:tags => params[:tags]))
|
||||
if params[:user_id].present?
|
||||
user = User.find(params[:user_id])
|
||||
redirect_to posts_path(tags: "ordfav:#{user.name}")
|
||||
elsif CurrentUser.is_member?
|
||||
redirect_to posts_path(tags: "ordfav:#{CurrentUser.name}")
|
||||
else
|
||||
user_id = params[:user_id] || CurrentUser.user.id
|
||||
@user = User.find(user_id)
|
||||
|
||||
if @user.hide_favorites?
|
||||
raise User::PrivilegeError.new
|
||||
end
|
||||
|
||||
@favorite_set = PostSets::Favorite.new(user_id, params[:page], params)
|
||||
respond_with(@favorite_set.posts) do |format|
|
||||
format.xml do
|
||||
render :xml => @favorite_set.posts.to_xml(:root => "posts")
|
||||
end
|
||||
end
|
||||
redirect_to posts_path
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
module PostSets
|
||||
class Favorite < PostSets::Base
|
||||
attr_reader :user, :page, :favorites, :params
|
||||
|
||||
def initialize(user_id, page = 1, params = {})
|
||||
@params = params
|
||||
@user = ::User.find(user_id)
|
||||
@favorites = ::Favorite.for_user(user.id).paginate(page, :limit => limit).order("favorites.id desc")
|
||||
end
|
||||
|
||||
def limit
|
||||
params[:limit] || CurrentUser.user.per_page
|
||||
end
|
||||
|
||||
def tag_array
|
||||
@tag_array ||= ["fav:#{user.name}"]
|
||||
end
|
||||
|
||||
def tag_string
|
||||
tag_array.uniq.join(" ")
|
||||
end
|
||||
|
||||
def humanized_tag_string
|
||||
"fav:#{user.pretty_name}"
|
||||
end
|
||||
|
||||
def posts
|
||||
@posts ||= favorites.includes(:post).map(&:post).compact
|
||||
end
|
||||
|
||||
def presenter
|
||||
@presenter ||= ::PostSetPresenters::Favorite.new(self)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,12 +0,0 @@
|
||||
module PostSetPresenters
|
||||
class Favorite < Base
|
||||
attr_accessor :post_set, :tag_set_presenter
|
||||
delegate :favorites, :posts, :to => :post_set
|
||||
delegate :tag_list_html, to: :tag_set_presenter
|
||||
|
||||
def initialize(post_set)
|
||||
@post_set = post_set
|
||||
@tag_set_presenter = TagSetPresenter.new(RelatedTagCalculator.frequent_tags_for_posts(post_set.posts).take(25))
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,43 +0,0 @@
|
||||
<div id="c-favorites">
|
||||
<div id="a-index">
|
||||
<aside id="sidebar">
|
||||
<%= render "posts/partials/common/search", :path => favorites_path, :tags => @favorite_set.tag_string, :tags_dom_id => "tags" %>
|
||||
|
||||
<%= render "posts/partials/index/mode_menu" %>
|
||||
|
||||
<%= render "posts/partials/index/blacklist" %>
|
||||
|
||||
<section id="tag-box">
|
||||
<h1>Tags</h1>
|
||||
<%= @favorite_set.presenter.tag_list_html %>
|
||||
</section>
|
||||
|
||||
<section id="related-box">
|
||||
<h1>Related</h1>
|
||||
<ul id="related-list">
|
||||
<li><%= link_to "Deleted posts", posts_path(:tags => "#{@favorite_set.tag_string} status:deleted"), :rel => "nofollow" %></li>
|
||||
|
||||
<li><%= link_to "Random post", random_posts_path(:tags => @favorite_set.tag_string), :id => "random-post", :rel => "nofollow", :"data-shortcut" => "r" %></li>
|
||||
</ul>
|
||||
</section>
|
||||
</aside>
|
||||
|
||||
<section id="content">
|
||||
<h1>Favorites</h1>
|
||||
|
||||
<%= render "posts/partials/index/edit" %>
|
||||
|
||||
<div id="posts">
|
||||
<%= @favorite_set.presenter.post_previews_html(self) %>
|
||||
|
||||
<%= sequential_paginator(@favorite_set.favorites) %>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%= render "posts/partials/common/secondary_links" %>
|
||||
|
||||
<% content_for(:page_title) do %>
|
||||
Favorites - <%= @user.pretty_name %> - <%= Danbooru.config.app_name %>
|
||||
<% end %>
|
||||
@@ -7,7 +7,7 @@
|
||||
<%= subnav_link_to "Recommended", recommended_posts_path(context: "user") %>
|
||||
<% end %>
|
||||
<% unless CurrentUser.is_anonymous? %>
|
||||
<%= subnav_link_to "Favorites", favorites_path %>
|
||||
<%= subnav_link_to "Favorites", posts_path(tags: "ordfav:#{CurrentUser.user.name}") %>
|
||||
<%= subnav_link_to "Fav groups", favorite_groups_path %>
|
||||
<% if CurrentUser.has_saved_searches? %>
|
||||
<%= subnav_link_to "Saved searches", posts_path(:tags => "search:all") %>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<% if presenter.has_favorites? %>
|
||||
<div class="box user-favorites">
|
||||
<h2>
|
||||
<%= link_to "Favorites", favorites_path(:user_id => user.id) %>
|
||||
<%= link_to "Favorites", posts_path(tags: "ordfav:#{user.name}") %>
|
||||
</h2>
|
||||
<div>
|
||||
<% presenter.favorites.each do |post| %>
|
||||
@@ -39,4 +39,4 @@
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
@@ -12,16 +12,19 @@ class FavoritesControllerTest < ActionDispatch::IntegrationTest
|
||||
@post.add_favorite!(@user)
|
||||
end
|
||||
|
||||
context "with a specified tags parameter" do
|
||||
should "redirect to the posts controller" do
|
||||
get_auth favorites_path, @user, params: {:tags => "fav:#{@user.name} abc"}
|
||||
assert_redirected_to(posts_path(:tags => "fav:#{@user.name} abc"))
|
||||
end
|
||||
should "redirect the user_id param to an ordfav: search" do
|
||||
get favorites_path(user_id: @user.id)
|
||||
assert_redirected_to posts_path(tags: "ordfav:#{@user.name}")
|
||||
end
|
||||
|
||||
should "display the current user's favorites" do
|
||||
should "redirect members to an ordfav: search" do
|
||||
get_auth favorites_path, @user
|
||||
assert_response :success
|
||||
assert_redirected_to posts_path(tags: "ordfav:#{@user.name}")
|
||||
end
|
||||
|
||||
should "redirect anonymous users to the posts index" do
|
||||
get favorites_path
|
||||
assert_redirected_to posts_path
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -1,134 +0,0 @@
|
||||
require 'test_helper'
|
||||
|
||||
module PostSets
|
||||
class FavoriteTest < ActiveSupport::TestCase
|
||||
context "In all cases" do
|
||||
setup do
|
||||
@user = FactoryBot.create(:user)
|
||||
CurrentUser.user = @user
|
||||
CurrentUser.ip_addr = "127.0.0.1"
|
||||
|
||||
@post_1 = FactoryBot.create(:post)
|
||||
@post_2 = FactoryBot.create(:post)
|
||||
@post_3 = FactoryBot.create(:post)
|
||||
@post_2.add_favorite!(@user)
|
||||
@post_1.add_favorite!(@user)
|
||||
@post_3.add_favorite!(@user)
|
||||
end
|
||||
|
||||
teardown do
|
||||
CurrentUser.user = nil
|
||||
CurrentUser.ip_addr = nil
|
||||
end
|
||||
|
||||
context "a favorite set for before the most recent post" do
|
||||
setup do
|
||||
id = ::Favorite.where(:user_id => @user.id, :post_id => @post_3.id).first.id
|
||||
@set = PostSets::Favorite.new(@user.id, "b#{id}", limit: 1)
|
||||
end
|
||||
|
||||
context "a sequential paginator" do
|
||||
should "return the second most recent element" do
|
||||
assert_equal(@post_1.id, @set.posts.first.id)
|
||||
end
|
||||
|
||||
should "know what page it's on" do
|
||||
refute(@set.favorites.is_first_page?)
|
||||
refute(@set.favorites.is_last_page?)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "a favorite set for after the third most recent post" do
|
||||
setup do
|
||||
id = ::Favorite.where(:user_id => @user.id, :post_id => @post_2.id).first.id
|
||||
::Favorite.stubs(:records_per_page).returns(1)
|
||||
@set = PostSets::Favorite.new(@user.id, "a#{id}")
|
||||
end
|
||||
|
||||
context "a sequential paginator" do
|
||||
should "return the second most recent element" do
|
||||
assert_equal(@post_1.id, @set.posts.first.id)
|
||||
end
|
||||
|
||||
should "know what page it's on" do
|
||||
refute(@set.favorites.is_first_page?)
|
||||
refute(@set.favorites.is_last_page?)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "a favorite set for before the second most recent post" do
|
||||
setup do
|
||||
id = ::Favorite.where(:user_id => @user.id, :post_id => @post_1.id).first.id
|
||||
::Favorite.stubs(:records_per_page).returns(1)
|
||||
@set = PostSets::Favorite.new(@user.id, "b#{id}")
|
||||
end
|
||||
|
||||
context "a sequential paginator" do
|
||||
should "return the third most recent element" do
|
||||
assert_equal(@post_2.id, @set.posts.first.id)
|
||||
end
|
||||
|
||||
should "know what page it's on" do
|
||||
refute(@set.favorites.is_first_page?)
|
||||
assert(@set.favorites.is_last_page?)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "a favorite set for after the second most recent post" do
|
||||
setup do
|
||||
id = ::Favorite.where(:user_id => @user.id, :post_id => @post_1.id).first.id
|
||||
::Favorite.stubs(:records_per_page).returns(1)
|
||||
@set = PostSets::Favorite.new(@user.id, "a#{id}")
|
||||
end
|
||||
|
||||
context "a sequential paginator" do
|
||||
should "return the most recent element" do
|
||||
assert_equal(@post_3.id, @set.posts.first.id)
|
||||
end
|
||||
|
||||
should "know what page it's on" do
|
||||
assert(@set.favorites.is_first_page?)
|
||||
refute(@set.favorites.is_last_page?)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "a favorite set for page 2" do
|
||||
setup do
|
||||
::Favorite.stubs(:records_per_page).returns(1)
|
||||
@set = PostSets::Favorite.new(@user.id, 2)
|
||||
end
|
||||
|
||||
context "a numbered paginator" do
|
||||
should "return the second most recent element" do
|
||||
assert_equal(@post_1.id, @set.posts.first.id)
|
||||
end
|
||||
|
||||
should "know what page it's on" do
|
||||
refute(@set.favorites.is_first_page?)
|
||||
refute(@set.favorites.is_last_page?)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "a favorite set with no page specified" do
|
||||
setup do
|
||||
::Favorite.stubs(:records_per_page).returns(1)
|
||||
@set = PostSets::Favorite.new(@user.id)
|
||||
end
|
||||
|
||||
should "return the most recent element" do
|
||||
assert_equal(@post_3.id, @set.posts.first.id)
|
||||
end
|
||||
|
||||
should "know what page it's on" do
|
||||
assert(@set.favorites.is_first_page?)
|
||||
refute(@set.favorites.is_last_page?)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user