From a47b1daaebea09ca07ca93079e530f26cfeef914 Mon Sep 17 00:00:00 2001 From: multiple creatures Date: Sun, 5 May 2019 23:04:23 -0500 Subject: Implement scoped tags; use `local:` and `self:` scopes for community and personal tags, respectively. --- app/services/process_hashtags_service.rb | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'app/services/process_hashtags_service.rb') diff --git a/app/services/process_hashtags_service.rb b/app/services/process_hashtags_service.rb index fb89f6c5b..4257d9231 100644 --- a/app/services/process_hashtags_service.rb +++ b/app/services/process_hashtags_service.rb @@ -2,19 +2,26 @@ class ProcessHashtagsService < BaseService def call(status, tags = []) - tags = Extractor.extract_hashtags(status.text) if status.network? + tags = Extractor.extract_hashtags(status.text) if tags.blank? && status.local? records = [] tags.map { |str| str.mb_chars.downcase }.uniq(&:to_s).each do |name| - tag = Tag.where(name: name).first_or_create(name: name) + component_indices = name.size.times.select {|i| name[i] == ':'} + component_indices << name.size - 1 + component_indices.each do |i| + frag = name[0..i] + tag = Tag.where(name: frag).first_or_create(name: frag) - status.tags << tag - records << tag + status.tags << tag - TrendingTags.record_use!(tag, status.account, status.created_at) if status.distributable? + next if tag.local || tag.private + + records << tag + TrendingTags.record_use!(tag, status.account, status.created_at) if status.distributable? + end end - return unless status.public_visibility? || status.unlisted_visibility? + return unless status.distributable? status.account.featured_tags.where(tag_id: records.map(&:id)).each do |featured_tag| featured_tag.increment(status.created_at) -- cgit