commit d47aacdda3ae3f356dd6658750bb4a5360e4d11c
parent 5fd1cbd9dcb291986e7f30a3414e7ec3f6d74e05
Author: William Morgan <wmorgan-sup@masanjin.net>
Date: Tue, 26 May 2009 14:39:40 -0700
enforce label uniqueness and internedness
This fixes some bugs where sources have an "inbox" label specified, which
was previously treated as different from the auto-applied :inbox label, etc.
Diffstat:
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/lib/sup/message.rb b/lib/sup/message.rb
@@ -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
diff --git a/lib/sup/util.rb b/lib/sup/util.rb
@@ -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