Class: MailAddress::Address

Inherits:
Object
  • Object
show all
Defined in:
lib/mail_address/address.rb

Constant Summary collapse

ATEXT =
'[\-\w\s!#$%&\'*+/=?^`{|}~]'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(phrase, address, original) ⇒ Address

Returns a new instance of Address.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/mail_address/address.rb', line 7

def initialize(phrase, address, original)
  @address = address
  @phrase = phrase
  @original = original

  ###  validate afterwords
  # parse failed or invalid address
  unless (@address && @original.include?(@address)) && Address._check_address_with_regex(@address)
    @address = nil
  end

  # invalid address
  @phrase = original if @address.nil?
end

Instance Attribute Details

#addressObject

Returns the value of attribute address.



5
6
7
# File 'lib/mail_address/address.rb', line 5

def address
  @address
end

#originalObject

Returns the value of attribute original.



5
6
7
# File 'lib/mail_address/address.rb', line 5

def original
  @original
end

#phraseObject

Returns the value of attribute phrase.



5
6
7
# File 'lib/mail_address/address.rb', line 5

def phrase
  @phrase
end

Instance Method Details

#format(enquote = false) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/mail_address/address.rb', line 24

def format(enquote = false)
  addr = []
  return @original.gsub(/[;,]/, '') if @address.nil?

  email_address = enquote ? quoted_address : @address

  if !@phrase.nil? && @phrase.length > 0
    # if @phrase.match(/\A\(/) && @phrase.match(/\)\z/)
    #   addr.push(email_address) if [email protected]? && @address.length > 0
    #   addr.push(@phrase)
    # else
      addr.push(
        @phrase.match(/^(?:#{ATEXT})+$/) ? @phrase
        : @phrase.match(/(?<!\\)"/)      ? @phrase
        : %Q("#{@phrase}")
        )
      addr.push "<#{email_address}>" if !@address.nil? && @address.length > 0
    # end
  elsif !@address.nil? && @address.length > 0
    addr.push(email_address)
  end
  addr.join(' ')
end

#hostObject



54
55
56
57
58
# File 'lib/mail_address/address.rb', line 54

def host
  addr = @address || '';
  i = addr.rindex('@')
  i.nil? ? nil : addr[i + 1 .. -1]
end

#nameObject



48
49
50
51
52
# File 'lib/mail_address/address.rb', line 48

def name
  phrase = @phrase.dup
  name   = Address._extract_name(phrase)
  name.length > 0 ? name : nil
end

#quoted_addressObject



66
67
68
69
70
71
72
73
74
# File 'lib/mail_address/address.rb', line 66

def quoted_address
  if @address
    local_part = self.user.gsub(/(\A"|"\z)/, '')
    if local_part.include?('..') || local_part.end_with?('.')
      return "\"#{local_part}\"@#{self.host}"
    end
  end
  @address
end

#userObject



60
61
62
63
64
# File 'lib/mail_address/address.rb', line 60

def user
  addr = @address || '';
  i = addr.rindex('@')
  i.nil? ? addr : addr[0 ... i]
end