class ImapGuard::Query

Query is a neat DSL to help you generate IMAP search queries. @note All methods return self so they can be chained.

Public Instance Methods

before(date) click to toggle source

Messages whose internal date (disregarding time and timezone) is earlier than the specified date. @param date Depending of its type:

- [String]: uses it as is
- [Fixnum]: _n_ days before today
- [Date]: uses this date

@return [self]

# File lib/imap_guard/query.rb, line 106
def before(date)
  date = case date
         when String
           date
         when Integer
           (Date.today - date).strftime "%e-%b-%Y"
         when Date
           date.strftime "%e-%b-%Y"
         else
           raise ArgumentError, "#{date.inspect} is invalid."
         end

  self << "BEFORE" << date
end
cc(string) click to toggle source

Messages that contain the specified string in the envelope structure's CC field. @return [self]

# File lib/imap_guard/query.rb, line 95
def cc(string)
  self << "CC" << string
end
deleted() click to toggle source

Messages with the \Deleted flag set. @return [self]

# File lib/imap_guard/query.rb, line 33
def deleted
  self << "DELETED"
end
from(string) click to toggle source

Messages that contain the specified string in the envelope structure's FROM field. @return [self]

# File lib/imap_guard/query.rb, line 81
def from(string)
  self << "FROM" << string
end
not(search_key = nil) click to toggle source

Messages that do not match the specified search key. @param search_key Optional search key to pass to NOT @example

not.deleted   #=> ["NOT", "DELETED"]
not(:deleted) #=> ["NOT", "DELETED"]

@return [self]

# File lib/imap_guard/query.rb, line 65
def not(search_key = nil)
  self << "NOT"
  send(search_key) if search_key
  self
end
or(search_key1 = nil, search_key2 = nil) click to toggle source

Messages that match either search key. @param search_key1 Optional search key to pass to OR @param search_key2 Optional search key to pass to OR @note Reverse polish notation is expected,

i.e. OR <search-key1> <search-key2>

@example

or.unanswered.unflagged     #=> ["OR", "UNANSWERED", "UNFLAGGED"]
or(:unanswered, :unflagged) #=> ["OR", "UNANSWERED", "UNFLAGGED"]

@return [self]

# File lib/imap_guard/query.rb, line 46
def or(search_key1 = nil, search_key2 = nil)
  self << "OR"

  if search_key1 && search_key2
    send(search_key1)
    send(search_key2)
  elsif search_key1 || search_key2
    raise ArgumentError, "You must give either zero or two arguments."
  end

  self
end
seen() click to toggle source

Messages that have the \Seen flag set. @return [self]

# File lib/imap_guard/query.rb, line 9
def seen
  self << "SEEN"
end
subject(string) click to toggle source

Messages that contain the specified string in the envelope structure's SUBJECT field. @return [self]

# File lib/imap_guard/query.rb, line 74
def subject(string)
  self << "SUBJECT" << string
end
to(string) click to toggle source

Messages that contain the specified string in the envelope structure's TO field. @return [self]

# File lib/imap_guard/query.rb, line 88
def to(string)
  self << "TO" << string
end
unanswered() click to toggle source

Messages that do not have the \Answered flag set. @return [self]

# File lib/imap_guard/query.rb, line 21
def unanswered
  self << "UNANSWERED"
end
unflagged() click to toggle source

Messages that do not have the \Flagged flag set. @return [self]

# File lib/imap_guard/query.rb, line 27
def unflagged
  self << "UNFLAGGED"
end
unseen() click to toggle source

Messages that do not have the \Seen flag set. @return [self]

# File lib/imap_guard/query.rb, line 15
def unseen
  self << "UNSEEN"
end