Class: Redwood::LabelManager

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/sup/label.rb

Constant Summary collapse

RESERVED_LABELS =

labels that have special semantics. user will be unable to add/remove these via normal label mechanisms.

[ :starred, :spam, :draft, :unread, :killed, :sent, :deleted, :inbox, :attachment ]
HIDDEN_RESERVED_LABELS =

labels that will typically be hidden from the user

[ :starred, :unread, :attachment ]

Instance Method Summary collapse

Methods included from Singleton

included

Constructor Details

#initialize(fn) ⇒ LabelManager

Returns a new instance of LabelManager.



13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/sup/label.rb', line 13

def initialize fn
  @fn = fn
  labels =
    if File.exists? fn
      IO.readlines(fn).map { |x| x.chomp.intern }
    else
      []
    end
  @labels = {}
  @new_labels = {}
  @modified = false
  labels.each { |t| @labels[t] = true }
end

Instance Method Details

#<<(t) ⇒ Object

Raises:

  • (ArgumentError)


63
64
65
66
67
68
69
70
# File 'lib/sup/label.rb', line 63

def << t
  raise ArgumentError, "expecting a symbol" unless t.is_a? Symbol
  unless @labels.member?(t) || RESERVED_LABELS.member?(t)
    @labels[t] = true
    @new_labels[t] = true
    @modified = true
  end
end

#all_labelsObject

all labels user-defined and system, ordered nicely and converted to pretty strings. use #label_for to recover the original label.



32
33
34
35
# File 'lib/sup/label.rb', line 32

def all_labels
  ## uniq's only necessary here because of certain upgrade issues
  (RESERVED_LABELS + @labels.keys).uniq
end

#delete(t) ⇒ Object



72
73
74
75
76
# File 'lib/sup/label.rb', line 72

def delete t
  if @labels.delete(t)
    @modified = true
  end
end

#label_for(s) ⇒ Object



53
54
55
56
57
58
59
60
61
# File 'lib/sup/label.rb', line 53

def label_for s
  l = s.intern
  l2 = s.downcase.intern
  if RESERVED_LABELS.include? l2
    l2
  else
    l
  end
end

#new_label?(l) ⇒ Boolean

Returns:

  • (Boolean)


27
# File 'lib/sup/label.rb', line 27

def new_label? l; @new_labels.include?(l) end

#saveObject



78
79
80
81
82
# File 'lib/sup/label.rb', line 78

def save
  return unless @modified
  File.open(@fn, "w") { |f| f.puts @labels.keys.sort_by { |l| l.to_s } }
  @new_labels = {}
end

#string_for(l) ⇒ Object

reverse the label->string mapping, for convenience!



45
46
47
48
49
50
51
# File 'lib/sup/label.rb', line 45

def string_for l
  if RESERVED_LABELS.include? l
    l.to_s.capitalize
  else
    l.to_s
  end
end

#user_defined_labelsObject

all user-defined labels, ordered nicely and converted to pretty strings. use #label_for to recover the original label.



40
41
42
# File 'lib/sup/label.rb', line 40

def user_defined_labels
  @labels.keys
end