Class: ImapGuard::Query

Inherits:
Array
  • Object
show all
Defined in:
lib/imap_guard/query.rb

Overview

Note:

All methods return self so they can be chained.

Query is a neat DSL to help you generate IMAP search queries.

Instance Method Summary collapse

Instance Method Details

#before(date) ⇒ self

Messages whose internal date (disregarding time and timezone) is earlier than the specified date.

Parameters:

  • date

    Depending of its type:

    • [String]: uses it as is

    • [Fixnum]: n days before today

    • [Date]: uses this date

Returns:

  • (self)


104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/imap_guard/query.rb', line 104

def before date
  case date
  when String
    # noop, uses it as is
  when Fixnum
    date = (Date.today - date).strftime '%e-%b-%Y'
  when Date
    date = date.strftime '%e-%b-%Y'
  else
    raise ArgumentError, "#{date.inspect} is invalid."
  end

  self << 'BEFORE' << date
end

#cc(string) ⇒ self

Messages that contain the specified string in the envelope structure’s CC field.

Returns:

  • (self)


93
94
95
# File 'lib/imap_guard/query.rb', line 93

def cc string
  self << 'CC' << string
end

#deletedself

Messages with the \Deleted flag set.

Returns:

  • (self)


31
32
33
# File 'lib/imap_guard/query.rb', line 31

def deleted
  self << 'DELETED'
end

#from(string) ⇒ self

Messages that contain the specified string in the envelope structure’s FROM field.

Returns:

  • (self)


79
80
81
# File 'lib/imap_guard/query.rb', line 79

def from string
  self << 'FROM' << string
end

#not(search_key = nil) ⇒ self

Messages that do not match the specified search key.

Examples:

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

Parameters:

  • search_key (defaults to: nil)

    Optional search key to pass to NOT

Returns:

  • (self)


63
64
65
66
67
# File 'lib/imap_guard/query.rb', line 63

def not search_key = nil
  self << 'NOT'
  send(search_key) if search_key
  self
end

#or(search_key1 = nil, search_key2 = nil) ⇒ self

Note:

Reverse polish notation is expected, i.e. OR <search-key1> <search-key2>

Messages that match either search key.

Examples:

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

Parameters:

  • search_key1 (defaults to: nil)

    Optional search key to pass to OR

  • search_key2 (defaults to: nil)

    Optional search key to pass to OR

Returns:

  • (self)


44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/imap_guard/query.rb', line 44

def or search_key1 = nil, search_key2 = nil
  self << 'OR'

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

  self
end

#seenself

Messages that have the \Seen flag set.

Returns:

  • (self)


7
8
9
# File 'lib/imap_guard/query.rb', line 7

def seen
  self << 'SEEN'
end

#subject(string) ⇒ self

Messages that contain the specified string in the envelope structure’s SUBJECT field.

Returns:

  • (self)


72
73
74
# File 'lib/imap_guard/query.rb', line 72

def subject string
  self << 'SUBJECT' << string
end

#to(string) ⇒ self

Messages that contain the specified string in the envelope structure’s TO field.

Returns:

  • (self)


86
87
88
# File 'lib/imap_guard/query.rb', line 86

def to string
  self << 'TO' << string
end

#unansweredself

Messages that do not have the \Answered flag set.

Returns:

  • (self)


19
20
21
# File 'lib/imap_guard/query.rb', line 19

def unanswered
  self << 'UNANSWERED'
end

#unflaggedself

Messages that do not have the \Flagged flag set.

Returns:

  • (self)


25
26
27
# File 'lib/imap_guard/query.rb', line 25

def unflagged
  self << 'UNFLAGGED'
end

#unseenself

Messages that do not have the \Seen flag set.

Returns:

  • (self)


13
14
15
# File 'lib/imap_guard/query.rb', line 13

def unseen
  self << 'UNSEEN'
end