Class: Maildir::Message
- Inherits:
-
Object
- Object
- Maildir::Message
- Includes:
- Comparable
- Defined in:
- lib/maildir/message.rb
Constant Summary collapse
- COLON =
COLON seperates the unique name from the info
':'
- INFO =
The default info, to which flags are appended
"2,"
- FLAG_NAMES =
{ :passed => 'P', :replied => 'R', :seen => 'S', :trashed => 'T', :draft => 'D', :flagged => 'F' }
- @@serializer =
The serializer processes data before it is written to disk and after reading from disk. Default serializer
Maildir::Serializer::Base.new
Instance Attribute Summary collapse
-
#dir ⇒ Object
readonly
Returns the value of attribute dir.
-
#info ⇒ Object
Returns the value of attribute info.
-
#unique_name ⇒ Object
readonly
Returns the value of attribute unique_name.
Class Method Summary collapse
-
.create(maildir, data) ⇒ Object
Create a new message in maildir with data.
-
.serializer ⇒ Object
Get the serializer.
-
.serializer=(serializer) ⇒ Object
Set the serializer.
Instance Method Summary collapse
-
#<=>(message) ⇒ Object
Compares messages by their paths.
-
#add_flag(flag) ⇒ Object
Adds a flag to a message.
-
#atime ⇒ Object
Returns the message’s atime, or false if the file doesn’t exist.
-
#data ⇒ Object
Returns the message’s data from disk.
-
#destroy ⇒ Object
Deletes the message path and freezes the message object.
-
#filename ⇒ Object
Returns the filename of the message.
-
#flags ⇒ Object
Returns an array of single letter flags applied to the message.
-
#flags=(*flags) ⇒ Object
Sets the flags on a message.
-
#initialize(maildir, key = nil) ⇒ Message
constructor
Create a new, unwritten message or instantiate an existing message.
-
#inspect ⇒ Object
Friendly inspect method.
-
#key ⇒ Object
Returns the key to identify the message.
-
#mtime ⇒ Object
Returns the message’s mtime, or false if the file doesn’t exist.
-
#path ⇒ Object
Returns the full path to the message.
-
#process ⇒ Object
Move a message from new to cur, add info.
-
#remove_flag(flag) ⇒ Object
Removes a flag from a message.
-
#serializer ⇒ Object
Returns the class’ serializer.
-
#utime(atime, mtime) ⇒ Object
Updates the modification and access time.
-
#write(data) ⇒ Object
Writes data to disk.
Constructor Details
#initialize(maildir, key = nil) ⇒ Message
44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/maildir/message.rb', line 44 def initialize(maildir, key=nil) @maildir = maildir if key.nil? @dir = :tmp @unique_name = Maildir::UniqueName.create else parse_key(key) end unless Maildir::SUBDIRS.include? dir raise ArgumentError, "State must be in #{Maildir::SUBDIRS.inspect}" end end |
Instance Attribute Details
#dir ⇒ Object (readonly)
Returns the value of attribute dir.
35 36 37 |
# File 'lib/maildir/message.rb', line 35 def dir @dir end |
#info ⇒ Object
Returns the value of attribute info.
35 36 37 |
# File 'lib/maildir/message.rb', line 35 def info @info end |
#unique_name ⇒ Object (readonly)
Returns the value of attribute unique_name.
35 36 37 |
# File 'lib/maildir/message.rb', line 35 def unique_name @unique_name end |
Class Method Details
.create(maildir, data) ⇒ Object
14 15 16 17 18 |
# File 'lib/maildir/message.rb', line 14 def self.create(maildir, data) = self.new(maildir) .write(data) end |
.serializer ⇒ Object
Get the serializer
26 27 28 |
# File 'lib/maildir/message.rb', line 26 def self.serializer @@serializer end |
.serializer=(serializer) ⇒ Object
Set the serializer
31 32 33 |
# File 'lib/maildir/message.rb', line 31 def self.serializer=(serializer) @@serializer = serializer end |
Instance Method Details
#<=>(message) ⇒ Object
Compares messages by their paths. If message is a different class, return nil. Otherwise, return 1, 0, or -1.
61 62 63 64 65 66 |
# File 'lib/maildir/message.rb', line 61 def <=>() # Return nil if comparing different classes return nil unless self.class === self.path <=> .path end |
#add_flag(flag) ⇒ Object
Adds a flag to a message. Returns the message’s key if successful, false otherwise.
136 137 138 |
# File 'lib/maildir/message.rb', line 136 def add_flag(flag) self.flags = (flags << flag.upcase) end |
#atime ⇒ Object
Returns the message’s atime, or false if the file doesn’t exist.
174 175 176 |
# File 'lib/maildir/message.rb', line 174 def atime guard { File.atime(path) } end |
#data ⇒ Object
Returns the message’s data from disk. If the path doesn’t exist, freeze’s the object and raises Errno:ENOENT
163 164 165 |
# File 'lib/maildir/message.rb', line 163 def data guard(true) { serializer.load(path) } end |
#destroy ⇒ Object
Deletes the message path and freezes the message object
184 185 186 187 |
# File 'lib/maildir/message.rb', line 184 def destroy guard { File.delete(path) } freeze end |
#filename ⇒ Object
Returns the filename of the message
147 148 149 |
# File 'lib/maildir/message.rb', line 147 def filename [unique_name, info].compact.join(COLON) end |
#flags ⇒ Object
Returns an array of single letter flags applied to the message
124 125 126 |
# File 'lib/maildir/message.rb', line 124 def flags @info.sub(INFO,'').split('') end |
#flags=(*flags) ⇒ Object
Sets the flags on a message. Returns the message’s key if successful, false otherwise.
130 131 132 |
# File 'lib/maildir/message.rb', line 130 def flags=(*flags) self.info = INFO + sort_flags(flags.flatten.join('')) end |
#inspect ⇒ Object
Friendly inspect method
69 70 71 |
# File 'lib/maildir/message.rb', line 69 def inspect "#<#{self.class} key=#{key} maildir=#{@maildir.inspect}>" end |
#key ⇒ Object
Returns the key to identify the message
152 153 154 |
# File 'lib/maildir/message.rb', line 152 def key File.join(dir.to_s, filename) end |
#mtime ⇒ Object
Returns the message’s mtime, or false if the file doesn’t exist.
179 180 181 |
# File 'lib/maildir/message.rb', line 179 def mtime guard { File.mtime(path) } end |
#path ⇒ Object
Returns the full path to the message
157 158 159 |
# File 'lib/maildir/message.rb', line 157 def path File.join(@maildir.path, key) end |
#process ⇒ Object
Move a message from new to cur, add info. Returns the message’s key
94 95 96 |
# File 'lib/maildir/message.rb', line 94 def process rename(:cur, INFO) end |
#remove_flag(flag) ⇒ Object
Removes a flag from a message. Returns the message’s key if successful, false otherwise.
142 143 144 |
# File 'lib/maildir/message.rb', line 142 def remove_flag(flag) self.flags = flags.delete_if{|f| f == flag.upcase} end |
#serializer ⇒ Object
Returns the class’ serializer
74 75 76 |
# File 'lib/maildir/message.rb', line 74 def serializer @@serializer end |
#utime(atime, mtime) ⇒ Object
Updates the modification and access time. Returns 1 if successful, false otherwise.
169 170 171 |
# File 'lib/maildir/message.rb', line 169 def utime(atime, mtime) guard { File.utime(atime, mtime, path) } end |
#write(data) ⇒ Object
Writes data to disk. Can only be called on messages instantiated without a key (which haven’t been written to disk). After successfully writing to disk, rename the message to the new dir
Returns the message’s key
83 84 85 86 87 88 89 90 |
# File 'lib/maildir/message.rb', line 83 def write(data) raise "Can only write to messages in tmp" unless :tmp == @dir # Write out contents to tmp serializer.dump(data, path) rename(:new) end |