about summary refs log tree commit diff
path: root/app/lib/bangtags.rb
diff options
context:
space:
mode:
authormultiple creatures <dev@multiple-creature.party>2019-07-15 13:34:05 -0500
committermultiple creatures <dev@multiple-creature.party>2019-07-15 14:12:24 -0500
commitcf3ec71aa564c7fe47ec79f8dd5f14e3bce0b85c (patch)
tree49a3356c4177157b377aeca223a7d1c1e2e3dc17 /app/lib/bangtags.rb
parent0a5eba734e6aa6a6e7e8f64b022af8ea129c9f5d (diff)
local visibility scope, chat scope+tags, unlisted tags
Diffstat (limited to 'app/lib/bangtags.rb')
-rw-r--r--app/lib/bangtags.rb25
1 files changed, 21 insertions, 4 deletions
diff --git a/app/lib/bangtags.rb b/app/lib/bangtags.rb
index 4f4452486..e106dc582 100644
--- a/app/lib/bangtags.rb
+++ b/app/lib/bangtags.rb
@@ -452,8 +452,9 @@ class Bangtags
             'group'       => :private,
 
             'unlisted'    => :unlisted,
-            'local'       => :unlisted,
-            'monsterpit'  => :unlisted,
+
+            'local'       => :local,
+            'monsterpit'  => :local,
 
             'public'      => :public,
             'world'       => :public,
@@ -552,9 +553,25 @@ class Bangtags
   end
 
   def add_tags(to_status, *tags)
-    records = []
-    valid_name = /^[[:word:]:_\-]*[[:alpha:]:_·\-][[:word:]:_\-]*$/
+    valid_name = /^[[:word:]:._\-]*[[:alpha:]:._·\-][[:word:]:._\-]*$/
     tags = tags.select {|t| t.present? && valid_name.match?(t)}.uniq
     ProcessHashtagsService.new.call(to_status, tags)
+    to_status.save
+  end
+
+  def del_tags(from_status, *tags)
+    valid_name = /^[[:word:]:._\-]*[[:alpha:]:._·\-][[:word:]:._\-]*$/
+    tags = tags.select {|t| t.present? && valid_name.match?(t)}.uniq
+    tags.map { |str| str.mb_chars.downcase }.uniq(&:to_s).each do |name|
+      name.gsub!(/[:.]+/, '.')
+      next if name.blank? || name == '.'
+      if name.ends_with?('.')
+        filtered_tags = from_status.tags.select { |t| t.name == name || t.name.starts_with?(name) }
+      else
+        filtered_tags = from_status.tags.select { |t| t.name == name }
+      end
+      from_status.tags.destroy(filtered_tags)
+    end
+    from_status.save
   end
 end