fixes #1891
This commit is contained in:
@@ -9,6 +9,29 @@ class RelatedTagCalculator
|
|||||||
convert_hash_to_array(calculate_from_sample(tags, Danbooru.config.post_sample_size, category_constraint))
|
convert_hash_to_array(calculate_from_sample(tags, Danbooru.config.post_sample_size, category_constraint))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.calculate_from_post_set_to_array(post_set, category_constraint = nil)
|
||||||
|
convert_hash_to_array(calculate_from_post_set(post_set, category_constraint))
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.calculate_from_post_set(post_set, category_constraint = nil)
|
||||||
|
counts = Hash.new {|h, k| h[k] = 0}
|
||||||
|
|
||||||
|
post_set.posts.each do |post|
|
||||||
|
post.tag_array.each do |tag|
|
||||||
|
category = Tag.category_for(tag)
|
||||||
|
if category_constraint
|
||||||
|
if category == category_constraint
|
||||||
|
counts[tag] += 1
|
||||||
|
end
|
||||||
|
else
|
||||||
|
counts[tag] += 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
counts
|
||||||
|
end
|
||||||
|
|
||||||
def self.calculate_from_sample(tags, limit, category_constraint = nil)
|
def self.calculate_from_sample(tags, limit, category_constraint = nil)
|
||||||
counts = Hash.new {|h, k| h[k] = 0}
|
counts = Hash.new {|h, k| h[k] = 0}
|
||||||
|
|
||||||
|
|||||||
@@ -40,10 +40,14 @@ module PostSetPresenters
|
|||||||
if tag
|
if tag
|
||||||
tag.related_tag_array.map(&:first)
|
tag.related_tag_array.map(&:first)
|
||||||
else
|
else
|
||||||
[]
|
calculate_related_tags_from_post_set
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def calculate_related_tags_from_post_set
|
||||||
|
RelatedTagCalculator.calculate_from_post_set_to_array(post_set).map(&:first)
|
||||||
|
end
|
||||||
|
|
||||||
def tag_list_html(template)
|
def tag_list_html(template)
|
||||||
tag_set_presenter.tag_list_html(template)
|
tag_set_presenter.tag_list_html(template)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -14,6 +14,19 @@ class RelatedTagCalculatorTest < ActiveSupport::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
context "A related tag calculator" do
|
context "A related tag calculator" do
|
||||||
|
context "for a post set" do
|
||||||
|
setup do
|
||||||
|
FactoryGirl.create(:post, :tag_string => "aaa bbb ccc ddd")
|
||||||
|
FactoryGirl.create(:post, :tag_string => "aaa bbb ccc")
|
||||||
|
FactoryGirl.create(:post, :tag_string => "aaa bbb")
|
||||||
|
@post_set = PostSets::Post.new("aaa")
|
||||||
|
end
|
||||||
|
|
||||||
|
should "calculate the related tags" do
|
||||||
|
assert_equal({"aaa"=>3, "bbb"=>3, "ccc"=>2, "ddd"=>1}, RelatedTagCalculator.calculate_from_post_set(@post_set))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
should "calculate related tags for a tag" do
|
should "calculate related tags for a tag" do
|
||||||
posts = []
|
posts = []
|
||||||
posts << FactoryGirl.create(:post, :tag_string => "aaa bbb ccc ddd")
|
posts << FactoryGirl.create(:post, :tag_string => "aaa bbb ccc ddd")
|
||||||
|
|||||||
Reference in New Issue
Block a user