[Pools] Fix show/gallery for frozen string literals

Get rid of the presenters/post sets.
This commit is contained in:
Earlopain 2024-02-25 11:38:55 +01:00
parent 0381653e80
commit 930b4b905c
No known key found for this signature in database
GPG Key ID: 48860312319ADF61
11 changed files with 42 additions and 132 deletions

View File

@ -27,13 +27,15 @@ class PoolsController < ApplicationController
params[:limit] ||= CurrentUser.user.per_page
@pools = Pool.search(search_params).paginate(params[:page], :limit => params[:limit], :search_count => params[:search])
@post_set = PostSets::PoolGallery.new(@pools)
end
def show
@pool = Pool.find(params[:id])
@post_set = PostSets::Pool.new(@pool, params[:page])
respond_with(@pool)
respond_with(@pool) do |format|
format.html do
@posts = @pool.posts.paginate(params[:page], limit: params[:limit], total_count: @pool.post_ids.count)
end
end
end
def create

View File

@ -81,7 +81,7 @@ class PostsDecorator < ApplicationDecorator
def preview_html(t, options = {})
post = object
if post.nil?
return "<em>none</em>".html_safe
return ""
end
if !options[:show_deleted] && post.is_deleted? && options[:tags] !~ /(?:status:(?:all|any|deleted))|(?:deletedby:)|(?:delreason:)/i

View File

@ -1,34 +0,0 @@
module PostSets
class Pool < PostSets::Base
attr_reader :pool, :page
def initialize(pool, page = 1)
@pool = pool
@page = page
end
def limit
CurrentUser.user.per_page
end
def tag_array
["pool:#{pool.id}"]
end
def posts
@posts ||= pool.posts.paginate(page, limit: limit, total_count: pool.post_ids.count)
end
def tag_string
tag_array.join("")
end
def humanized_tag_string
"pool:#{pool.pretty_name}"
end
def presenter
@presenter ||= PostSetPresenters::Pool.new(self)
end
end
end

View File

@ -1,13 +0,0 @@
module PostSets
class PoolGallery < PostSets::Base
attr_reader :pools
def initialize(pools)
@pools = pools
end
def presenter
@presenter ||= ::PostSetPresenters::PoolGallery.new(self)
end
end
end

View File

@ -300,8 +300,8 @@ class Pool < ApplicationRecord
post_ids[n]
end
def cover_post_id
post_ids.first
def cover_post
Post.find_by(id: post_ids.first)
end
def create_version(updater: CurrentUser.user, updater_ip_addr: CurrentUser.ip_addr)

View File

@ -4,7 +4,7 @@ class PostPresenter < Presenter
def self.preview(post, options = {})
if post.nil?
return "<em>none</em>".html_safe
return ""
end
if !options[:show_deleted] && post.is_deleted? && options[:tags] !~ /(?:status:(?:all|any|deleted))|(?:deletedby:)|(?:delreason:)/i

View File

@ -1,24 +0,0 @@
module PostSetPresenters
class Pool < Base
attr_reader :post_set
delegate :posts, :to => :post_set
def initialize(post_set)
@post_set = post_set
end
def post_previews_html(template)
html = ""
if posts.empty?
return template.render("posts/blank")
end
posts.each do |post|
html << PostPresenter.preview(post, :pool_id => post_set.pool.id, show_cropped: true, show_deleted: true)
end
html.html_safe
end
end
end

View File

@ -1,29 +0,0 @@
module PostSetPresenters
class PoolGallery < Base
attr_accessor :post_set
delegate :pools, :to => :post_set
def initialize(post_set)
@post_set = post_set
end
def post_previews_html(template)
html = ""
if pools.empty?
return template.render("posts/blank")
end
pools.each do |pool|
if pool.cover_post_id
post = ::Post.find_by_id(pool.cover_post_id)
next if post.nil?
html << PostPresenter.preview(post, inline: true, link_target: pool, pool: pool, show_deleted: true)
html << "\n"
end
end
html.html_safe
end
end
end

View File

@ -1,16 +1,21 @@
<div id="c-pools">
<div id="a-gallery">
<%= render partial: "search", locals: {path: gallery_pools_path} %>
<%= render partial: "search", locals: { path: gallery_pools_path } %>
<%= render "posts/partials/common/inline_blacklist" %>
<h2>Pools</h2>
<section>
<%= @post_set.presenter.post_previews_html(self) %>
<%= numbered_paginator(@pools) %>
<% if @pools.none? %>
<%= render "posts/blank" %>
<% else %>
<% @pools.each do |pool| %>
<%= PostPresenter.preview(pool.cover_post, inline: true, link_target: pool, pool: pool, show_deleted: true) %>
<% end %>
<% end %>
</section>
<%= numbered_paginator(@pools) %>
</div>
</div>

View File

@ -2,7 +2,7 @@
<div id="a-show">
<h2>
<%= @pool.pretty_category %>:
<%= link_to @pool.pretty_name, posts_path(:tags => "pool:#{@pool.id}"), :class => "pool-category-#{@pool.category}" %>
<%= link_to @pool.pretty_name, posts_path(tags: "pool:#{@pool.id}"), class: "pool-category-#{@pool.category}" %>
</h2>
<div id="description" class="dtext-container">
@ -13,11 +13,16 @@
<div id="posts" class="user-disable-cropped-<%= Danbooru.config.enable_image_cropping? && CurrentUser.user.disable_cropped_thumbnails? %>">
<div id="posts-container">
<%= @post_set.presenter.post_previews_html(self) %>
<% if @posts.none? %>
<%= render "posts/blank" %>
<% else %>
<% @posts.each do |post| %>
<%= PostPresenter.preview(post, pool_id: @pool.id, show_cropped: true, show_deleted: true) %>
<% end %>
<% end %>
</div>
<%= numbered_paginator(@post_set.posts) %>
</div>
<%= numbered_paginator(@posts) %>
</div>
</div>

View File

@ -1,4 +1,4 @@
require 'test_helper'
require "test_helper"
module PostSets
class PoolTest < ActiveSupport::TestCase
@ -7,44 +7,42 @@ module PostSets
@user = create(:user)
CurrentUser.user = @user
@post_1 = create(:post)
@post_2 = create(:post)
@post_3 = create(:post)
@post1 = create(:post)
@post2 = create(:post)
@post3 = create(:post)
@pool = create(:pool)
@pool.add!(@post_2)
@pool.add!(@post_1)
@pool.add!(@post_3)
@pool.add!(@post2)
@pool.add!(@post1)
@pool.add!(@post3)
end
context "a post pool set for page 2" do
setup do
@set = PostSets::Pool.new(@pool, 2)
@set.stubs(:limit).returns(1)
@post_page = @pool.posts.paginate(2, limit: 1)
end
should "return the second element" do
assert_equal(1, @set.posts.size)
assert_equal(@post_1.id, @set.posts.first.id)
assert_equal(1, @post_page.size)
assert_equal(@post1, @post_page.first)
end
should "know the total number of pages" do
assert_equal(3, @set.posts.total_pages)
assert_equal(3, @post_page.total_pages)
end
should "know the current page" do
assert_equal(2, @set.posts.current_page)
assert_equal(2, @post_page.current_page)
end
end
context "a post pool set with no page specified" do
setup do
@set = PostSets::Pool.new(@pool)
@set.stubs(:limit).returns(1)
@post_page = @pool.posts.paginate(nil, limit: 1)
end
should "return the first element" do
assert_equal(1, @set.posts.size)
assert_equal(@post_2.id, @set.posts.first.id)
assert_equal(1, @post_page.size)
assert_equal(@post2, @post_page.first)
end
end
end