Class: Sisimai::Mail

Inherits:
Object
  • Object
show all
Defined in:
lib/sisimai/mail.rb,
lib/sisimai/mail/mbox.rb,
lib/sisimai/mail/stdin.rb,
lib/sisimai/mail/memory.rb,
lib/sisimai/mail/maildir.rb

Overview

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.

Defined Under Namespace

Classes: Maildir, Mbox, Memory, STDIN

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(argv1) ⇒ Sisimai::Mail, Nil

Constructor of Sisimai::Mail

Parameters:

  • argv1 (String)

    Path to mbox or Maildir/



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
61
# File 'lib/sisimai/mail.rb', line 14

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 Maildij/
        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

Instance Attribute Details

#dataObject

Returns the value of attribute data.



9
10
11
# File 'lib/sisimai/mail.rb', line 9

def data
  @data
end

#kindObject (readonly)

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



8
9
10
# File 'lib/sisimai/mail.rb', line 8

def kind
  @kind
end

#pathObject (readonly)

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



8
9
10
# File 'lib/sisimai/mail.rb', line 8

def path
  @path
end

Instance Method Details

#readString

Alias method of Sisimai::Mail.data.read()

Returns:

  • (String)

    Contents of mbox/Maildir



65
66
67
68
# File 'lib/sisimai/mail.rb', line 65

def read
  return "" if data.nil?
  return data.read
end