Class: EmailAssessor::Address

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

Constant Summary collapse

PROHIBITED_DOMAIN_PREFIXES =
[
  '.',
  '-',
].freeze
PROHIBITED_DOMAIN_CONTENT =
[
  '+',
  '!',
  '_',
  '/',
  ' ',
  '..',
  '-.',
  "'",
].freeze
PROHIBITED_DOMAIN_SUFFIXES =
[
  # none
].freeze
PROHIBITED_LOCAL_PREFIXES =
[
  '.',
].freeze
PROHIBITED_LOCAL_CONTENT =
[
  '..',
].freeze
PROHIBITED_LOCAL_SUFFIXES =
[
  '.',
].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(raw_address) ⇒ Address

Returns a new instance of Address.



86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/email_assessor/address.rb', line 86

def initialize(raw_address)
  @parse_error = false
  @raw_address = raw_address
  @address = nil
  @valid = nil
  @mx_servers = nil
  @domain_tokens = nil

  begin
    @address = Mail::Address.new(raw_address)
  rescue Mail::Field::ParseError
    @parse_error = true
  end
end

Instance Attribute Details

#parsedObject

Returns the value of attribute parsed.



8
9
10
# File 'lib/email_assessor/address.rb', line 8

def parsed
  @parsed
end

Class Method Details

.prohibited_domain_regexObject



43
44
45
46
47
48
49
# File 'lib/email_assessor/address.rb', line 43

def prohibited_domain_regex
  @prohibited_domain_content_regex ||= make_regex(
    prefixes: PROHIBITED_DOMAIN_PREFIXES,
    content: PROHIBITED_DOMAIN_CONTENT,
    suffixes: PROHIBITED_DOMAIN_SUFFIXES
  )
end

.prohibited_local_regexObject



51
52
53
54
55
56
57
# File 'lib/email_assessor/address.rb', line 51

def prohibited_local_regex
  @prohibited_local_content_regex ||= make_regex(
    prefixes: PROHIBITED_LOCAL_PREFIXES,
    content: PROHIBITED_LOCAL_CONTENT,
    suffixes: PROHIBITED_LOCAL_SUFFIXES
  )
end

Instance Method Details

#blacklisted?Boolean

Returns:

  • (Boolean)


121
122
123
# File 'lib/email_assessor/address.rb', line 121

def blacklisted?
  domain_in_list?(EmailAssessor.blacklisted_domains)
end

#disposable?Boolean

Returns:

  • (Boolean)


117
118
119
# File 'lib/email_assessor/address.rb', line 117

def disposable?
  domain_in_list?(EmailAssessor.disposable_domains)
end

#educational?Boolean

Returns:

  • (Boolean)


125
126
127
# File 'lib/email_assessor/address.rb', line 125

def educational?
  domain_in_list?(EmailAssessor.educational_domains)
end

#fastpass?Boolean

Returns:

  • (Boolean)


129
130
131
# File 'lib/email_assessor/address.rb', line 129

def fastpass?
  domain_in_list?(EmailAssessor.fastpass_domains)
end

#mx_serversObject



137
138
139
140
141
142
143
# File 'lib/email_assessor/address.rb', line 137

def mx_servers
  @mx_servers ||= Resolv::DNS.open do |dns|
    mx_servers = dns.getresources(@address.domain, Resolv::DNS::Resource::IN::MX)
    (mx_servers.any? && mx_servers) ||
      dns.getresources(@address.domain, Resolv::DNS::Resource::IN::A)
  end
end

#valid?Boolean

Returns:

  • (Boolean)


101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/email_assessor/address.rb', line 101

def valid?
  return @valid unless @valid.nil?
  return false if @parse_error

  @valid =
    if @address.domain && @address.address == @raw_address
      domain = @address.domain

      domain.include?('.') &&
        !domain.match?(self.class.prohibited_domain_regex) &&
        !@address.local.match?(self.class.prohibited_local_regex)
    else
      false
    end
end

#valid_mx?Boolean

Returns:

  • (Boolean)


133
134
135
# File 'lib/email_assessor/address.rb', line 133

def valid_mx?
  valid? && mx_servers.any?
end