Class: ActiveMailbox::Message

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/active_mailbox/message.rb

Overview

The ActiveMailbox::Message class represents an Asterisk voicemail

Constant Summary collapse

MaximumAge =

Maximum age before a Message is considered stale (30 days)

2592000
InfoFileKeys =

Values from Asterisk’s message info file (eg: msg0001.txt) that are used by this class

%w[callerid origdate duration]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(info_file, folder) ⇒ Message

Returns a new instance of Message.



23
24
25
26
27
28
29
30
# File 'lib/active_mailbox/message.rb', line 23

def initialize(info_file, folder)
  unless File.exists?(info_file)
    raise ActiveMailbox::Errors::MessageNotFound, "#{info_file} does not exist"
  end
  @folder    = folder
  @info_file = info_file
  parse_data!
end

Instance Attribute Details

#folderObject (readonly)

Returns the value of attribute folder.



21
22
23
# File 'lib/active_mailbox/message.rb', line 21

def folder
  @folder
end

Instance Method Details

#<=>(other) ⇒ Object

Compare messages by the number in the name



49
50
51
# File 'lib/active_mailbox/message.rb', line 49

def <=>(other)
  number <=> other.number
end

#callerid_nameObject

The caller’s name (from CallerID)



81
82
83
# File 'lib/active_mailbox/message.rb', line 81

def callerid_name
  @callerid_name ||= @callerid.gsub(/(.*)\s*\<.*\>/, '\1').strip
end

#callerid_numberObject

The caller’s phone number (from CallerID)



74
75
76
# File 'lib/active_mailbox/message.rb', line 74

def callerid_number
  @callerid_number ||= @callerid.gsub(/.*\<(.*)\>/, '\1')
end

#destroy!Object

Destroy this Message’s wav and txt files



56
57
58
59
60
61
62
# File 'lib/active_mailbox/message.rb', line 56

def destroy!
  [txt, wav].each do |file|
    File.unlink(file)
  end
ensure
  @folder.reload_messages = true
end

#durationObject

The duration of this Message (in seconds)



88
89
90
# File 'lib/active_mailbox/message.rb', line 88

def duration
  @duration
end

#nameObject

The name of this message (ex: msg0001)



35
36
37
# File 'lib/active_mailbox/message.rb', line 35

def name
  @name ||= path.split('/').last
end

#numberObject

The number pulled from name



42
43
44
# File 'lib/active_mailbox/message.rb', line 42

def number
  @number ||= (num = name.match(/([0-9]{4})$/) and num[1].to_i)
end

#pathObject

Returns msgXXXX



109
110
111
# File 'lib/active_mailbox/message.rb', line 109

def path
  @msg ||= txt.sub('.txt', '')
end

#stale?Boolean

Checks if this message is stale

Returns:

  • (Boolean)


116
117
118
# File 'lib/active_mailbox/message.rb', line 116

def stale?
  @stale ||= Time.now.to_i - timestamp.to_i > MaximumAge
end

#timestampObject

The time the Message was left



67
68
69
# File 'lib/active_mailbox/message.rb', line 67

def timestamp
  @timestamp ||= Time.parse(@origdate)
end

#txtObject

The file path to this Message’s txt file



102
103
104
# File 'lib/active_mailbox/message.rb', line 102

def txt
  @info_file
end

#wavObject

The file path to this Message’s wav file



95
96
97
# File 'lib/active_mailbox/message.rb', line 95

def wav
  @wav ||= @info_file.sub(/txt$/, 'wav')
end