Class: Gmail::Mailbox

Inherits:
Object show all
Defined in:
lib/gmail/mailbox.rb

Constant Summary collapse

MAILBOX_ALIASES =
{
  :all    => ['ALL'],
  :unread => ['UNSEEN'], #'UNREAD'],
  :read   => ['SEEN'], #'READ']
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(gmail, name = "INBOX") ⇒ Mailbox

Returns a new instance of Mailbox.



11
12
13
14
# File 'lib/gmail/mailbox.rb', line 11

def initialize(gmail, name="INBOX")
  @name  = name
  @gmail = gmail
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



9
10
11
# File 'lib/gmail/mailbox.rb', line 9

def name
  @name
end

Instance Method Details

#count(*args) ⇒ Object

This is a convenience method that really probably shouldn’t need to exist, but it does make code more readable, if seriously all you want is the count of messages.

Examples

gmail.inbox.count(:all)
gmail.inbox.count(:unread, :from => "[email protected]")
gmail.mailbox("Test").count(:all, :after => Time.now-(20*24*3600))


75
76
77
# File 'lib/gmail/mailbox.rb', line 75

def count(*args)
  emails(*args).size
end

#emails(*args, &block) ⇒ Object Also known as: mails, search, find, filter

Returns list of emails which meets given criteria.

Examples

gmail.inbox.emails(:all)
gmail.inbox.emails(:unread, :from => "[email protected]")
gmail.inbox.emails(:all, :after => Time.now-(20*24*3600))
gmail.mailbox("Test").emails(:read)

gmail.mailbox("Test") do |box| 
  box.emails(:read)
  box.emails(:unread) do |email|
    ... do something with each email...
  end
end


31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/gmail/mailbox.rb', line 31

def emails(*args, &block)
  args << :all if args.size == 0

  if args.first.is_a?(Symbol) 
    search = MAILBOX_ALIASES[args.shift]
    opts = args.first.is_a?(Hash) ? args.first : {}
    
    opts[:after]      and search.concat ['SINCE', opts[:after].to_imap_date]
    opts[:before]     and search.concat ['BEFORE', opts[:before].to_imap_date]
    opts[:on]         and search.concat ['ON', opts[:on].to_imap_date]
    opts[:from]       and search.concat ['FROM', opts[:from]]
    opts[:to]         and search.concat ['TO', opts[:to]]
    opts[:subject]    and search.concat ['SUBJECT', opts[:subject]]
    opts[:label]      and search.concat ['LABEL', opts[:label]]
    opts[:attachment] and search.concat ['HAS', 'attachment']
    opts[:search]     and search.concat [opts[:search]]
    
    @gmail.mailbox(name) do
      @gmail.conn.uid_search(search).collect do |uid| 
        message = (messages[uid] ||= Message.new(self, uid))
        block.call(message) if block_given?
        message
      end
    end
  elsif args.first.is_a?(Hash)
    emails(:all, args.first)
  else
    raise ArgumentError, "Invalid search criteria"
  end
end

#inspectObject



84
85
86
# File 'lib/gmail/mailbox.rb', line 84

def inspect
  "#<Gmail::Mailbox#{'0x%04x' % (object_id << 1)} name=#{@name}>"
end

#messagesObject

Cached messages.



80
81
82
# File 'lib/gmail/mailbox.rb', line 80

def messages
  @messages ||= {}
end

#to_sObject



88
89
90
# File 'lib/gmail/mailbox.rb', line 88

def to_s
  name
end