class Sisimai::Mail

Sisimai::Mail is a handler of UNIX mbox or Maildir for reading each mail. It is a wrapper class of Sisimai::Mail::Mbox, Sisimai::Mail::Maildir, and Sisimai::Mail::Memory classes.

Attributes

data[RW]
kind[R]

:path [String] path to mbox or Maildir/ :kind [String] Data type: mailbox, maildir, or stdin :data [Sisimai::Mail::] Object

path[R]

:path [String] path to mbox or Maildir/ :kind [String] Data type: mailbox, maildir, or stdin :data [Sisimai::Mail::] Object

Public Class Methods

new(argv1) click to toggle source

Constructor of Sisimai::Mail @param [String] argv1 Path to mbox or Maildir/ @return [Sisimai::Mail, Nil] Object or nil if the argument was wrong

# File lib/sisimai/mail.rb, line 17
def initialize(argv1)
  classname = nil
  parameter = { 'path' => argv1, 'kind' => nil, 'data' => nil }

  if argv1.is_a?(::String)
    # Path to mail or '<STDIN>' ?
    if argv1 == '<STDIN>'
      # Sisimai::Mail.new('<STDIN>')
      classname = self.class.to_s << '::STDIN'
      parameter['kind'] = 'stdin'
      parameter['path'] = '<STDIN>'
    else
      # The argumenet is a mailbox or a Maildir/.
      mediatype = argv1.include?("\n") ? 'memory' : File.ftype(argv1)

      if mediatype == 'file'
        # The argument is a file, it is an mbox or email file in Maildir/
        classname = self.class.to_s << '::Mbox'
        parameter['kind'] = 'mailbox'

      elsif mediatype == 'directory'
        # The agument is not a file, it is a Maildir/
        classname = self.class.to_s << '::Maildir'
        parameter['kind'] = 'maildir'

      elsif mediatype == 'memory'
        # The argument is an email string
        classname = self.class.to_s << '::Memory'
        parameter['kind'] = 'memory'
        parameter['path'] = 'MEMORY'
      end
    end
  elsif argv1.is_a?(IO)
    # Read from STDIN
    # The argument neither a mailbox nor a Maildir/.
    classname = self.class.to_s << '::STDIN'
    parameter['kind'] = 'stdin'
    parameter['path'] = '<STDIN>'
  end
  return nil unless classname

  classpath = classname.gsub('::', '/').downcase
  require classpath
  parameter['data'] = Module.const_get(classname).new(argv1)

  @path = parameter['path']
  @kind = parameter['kind']
  @data = parameter['data']
end

Public Instance Methods

read() click to toggle source

Alias method of Sisimai::Mail.data.read() @return [String] Contents of mbox/Maildir

# File lib/sisimai/mail.rb, line 69
def read
  return nil unless data
  return data.read
end