This commit is contained in:
r888888888
2013-07-24 18:12:44 -07:00
parent b94d6e1693
commit c0921d0590
3 changed files with 41 additions and 1 deletions

View File

@@ -9,6 +9,29 @@ class RelatedTagCalculator
convert_hash_to_array(calculate_from_sample(tags, Danbooru.config.post_sample_size, category_constraint))
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)
counts = Hash.new {|h, k| h[k] = 0}

View File

@@ -40,10 +40,14 @@ module PostSetPresenters
if tag
tag.related_tag_array.map(&:first)
else
[]
calculate_related_tags_from_post_set
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)
tag_set_presenter.tag_list_html(template)
end

View File

@@ -14,6 +14,19 @@ class RelatedTagCalculatorTest < ActiveSupport::TestCase
end
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
posts = []
posts << FactoryGirl.create(:post, :tag_string => "aaa bbb ccc ddd")