Class: Archsight::Annotations::EmailRecipient

Inherits:
Object
  • Object
show all
Defined in:
lib/archsight/annotations/email_recipient.rb

Overview

Custom type for email recipient validation Accepts: “Name <email@domain.com>” or “email@domain.com” Rejects: “Name” (no email)

Constant Summary collapse

EMAIL_PATTERN =

RFC 5322 simplified email pattern

/\A[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\z/
RECIPIENT_PATTERN =

Email recipient format: “Display Name <email@domain.com>”

/\A.+\s+<([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})>\z/

Class Method Summary collapse

Class Method Details

.extract_email(value) ⇒ Object



25
26
27
28
29
30
31
32
33
34
# File 'lib/archsight/annotations/email_recipient.rb', line 25

def self.extract_email(value)
  return nil if value.nil?

  str = value.to_s.strip
  if (match = str.match(RECIPIENT_PATTERN))
    match[1]
  elsif str.match?(EMAIL_PATTERN)
    str
  end
end

.valid?(value) ⇒ Boolean

Returns:

  • (Boolean)


12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/archsight/annotations/email_recipient.rb', line 12

def self.valid?(value)
  return false if value.nil? || value.to_s.strip.empty?

  str = value.to_s.strip
  # Check if it's a full recipient format "Name <email>"
  return true if str.match?(RECIPIENT_PATTERN)

  # Check if it's just an email address
  return true if str.match?(EMAIL_PATTERN)

  false
end