]> git.cworth.org Git - sup/commitdiff
enforce label uniqueness and internedness
authorWilliam Morgan <wmorgan-sup@masanjin.net>
Tue, 26 May 2009 21:39:40 +0000 (14:39 -0700)
committerWilliam Morgan <wmorgan-sup@masanjin.net>
Tue, 26 May 2009 21:42:59 +0000 (14:42 -0700)
This fixes some bugs where sources have an "inbox" label specified, which
was previously treated as different from the auto-applied :inbox label, etc.

lib/sup/message.rb
lib/sup/util.rb

index bd2016510313309d756c8e094c15564ddbdd31fd..bedc03dfebafba33749cc641759852e812e2f66d 100644 (file)
@@ -50,7 +50,7 @@ class Message
     @snippet = opts[:snippet]
     @snippet_contains_encrypted_content = false
     @have_snippet = !(opts[:snippet].nil? || opts[:snippet].empty?)
-    @labels = [] + (opts[:labels] || [])
+    @labels = (opts[:labels] || []).to_set_of_symbols
     @dirty = false
     @encrypted = false
     @chunks = nil
@@ -172,7 +172,7 @@ class Message
   def has_label? t; @labels.member? t; end
   def add_label t
     return if @labels.member? t
-    @labels.push t
+    @labels = (@labels + [t]).to_set_of_symbols
     @dirty = true
   end
   def remove_label t
@@ -186,7 +186,7 @@ class Message
   end
 
   def labels= l
-    @labels = l
+    @labels = l.to_set_of_symbols
     @dirty = true
   end
 
index c54a2c0db2b47efdc547000cc0ed9f8974536960..c26b4dbe9a3fe5207d34be9067394d571c36c979 100644 (file)
@@ -403,6 +403,10 @@ class Array
 
   def last= e; self[-1] = e end
   def nonempty?; !empty? end
+
+  def to_set_of_symbols
+    map { |x| x.is_a?(Symbol) ? x : x.intern }.uniq
+  end
 end
 
 class Time