TagSetPresenter: refactor humanized_essential_tag_string.

Move Post#humanized_essential_tag_string to TagSetPresenter#humanized_essential_tag_string.

This allows humanized_essential_tag_string to reuse the same set of tags
already fetched by the tag set presenter for the sidebar.

This avoids fetching the tag categories from memcache again (via
Post#typed_tags) when we're already fetched the tags once before.

This also means it's no longer necessary to cache humanized_essential_tag_string
itself in memcache, since it can be generated as quickly as the sidebar taglist.
This commit is contained in:
evazion
2018-09-30 20:39:12 -05:00
parent 739bb1270c
commit 88a177e1d5
5 changed files with 34 additions and 35 deletions

View File

@@ -36,7 +36,6 @@ class Post < ApplicationRecord
after_save :create_version
after_save :update_parent_on_save
after_save :apply_post_metatags
after_save :expire_essential_tag_string_cache
after_commit :delete_files, :on => :destroy
after_commit :remove_iqdb_async, :on => :destroy
after_commit :update_iqdb_async, :on => :create
@@ -936,36 +935,6 @@ class Post < ApplicationRecord
end
end
def expire_essential_tag_string_cache
Cache.delete("hets-#{id}")
end
def humanized_essential_tag_string
@humanized_essential_tag_string ||= Cache.get("hets-#{id}", 1.hour.to_i) do
string = []
TagCategory.humanized_list.each do |category|
typetags = typed_tags(category) - TagCategory.humanized_mapping[category]["exclusion"]
if TagCategory.humanized_mapping[category]["slice"] > 0
typetags = typetags.slice(0,TagCategory.humanized_mapping[category]["slice"]) + (typetags.length > TagCategory.humanized_mapping[category]["slice"] ? ["others"] : [])
end
if TagCategory.humanized_mapping[category]["regexmap"] != //
typetags = typetags.map do |tag|
tag.match(TagCategory.humanized_mapping[category]["regexmap"])[1]
end
end
if typetags.any?
if category != "copyright" || typed_tags("character").any?
string << TagCategory.humanized_mapping[category]["formatstr"] % typetags.to_sentence
else
string << typetags.to_sentence
end
end
end
string.empty? ? "##{id}" : string.join(" ").tr("_", " ")
end
end
TagCategory.categories.each do |category|
define_method("tag_string_#{category}") do
typed_tags(category).join(" ")