class ApiParser
Parser for Email API
Public Class Methods
email_delim()
click to toggle source
Accessor for the supported email delimiter
# File lib/email_api/api/api_parser.rb, line 10 def self.email_delim @email_delim end
parse_email(*params)
click to toggle source
Parses parameter inputs into an EmailObject
using the supported notation
@param [Splat] params Raw Email Attribute Values @return [EmailObject] email_object Parsed email object
# File lib/email_api/api/api_parser.rb, line 65 def self.parse_email(*params) email_object = EmailObject.new return email_object if params.nil? || !params.is_a?(Array) || params.empty? to = cc = bcc = subject = content = nil from = params[0] to = params[1] if params.count > 1 cc = params[2] if params.count > 2 bcc = params[3] if params.count > 3 subj_raw = params[4] if params.count > 4 cont_raw = params[5] if params.count > 5 subject = nil if !subj_raw.nil? && (subj_raw.is_a?(String) || subj_raw.is_a?(Numeric)) subject = subj_raw end content = nil if !cont_raw.nil? && (cont_raw.is_a?(String) || cont_raw.is_a?(Numeric)) content = cont_raw end # Parse and assign Message Attributes email_object.from = parse_email_text(from) email_object.to = parse_email_text_arr(to) email_object.cc = parse_email_text_arr(cc) email_object.bcc = parse_email_text_arr(bcc) email_object.subject = (subject.nil? || subject.empty? ? nil : subject) email_object.content = (content.nil? || content.empty? ? nil : content) email_object end
Private Class Methods
parse_email_text(email_text)
click to toggle source
Parses raw text into custom EmailAddress
object
@param [String] email_text Raw text denoting email @return [Email Address] email_address
# File lib/email_api/api/api_parser.rb, line 18 def self.parse_email_text(email_text) return nil if email_text.nil? || !email_text.is_a?(String) restricted_chars = ',<>' # Try to parse correct format: "DISPLAY NAME <EMAIL ADDRESS>" name = nil email = email_text[/.*<([^>]*)/, 1] name = email_text.gsub(email, '') unless email.nil? name = name.delete(restricted_chars).strip unless name.nil? email = email.delete(restricted_chars).strip unless email.nil? # If only one or the other found, assign value to both fields name = email if (!email.nil? && !email.empty?) && (name.nil? || name.empty?) email = name if (!name.nil? && !name.empty?) && (email.nil? || email.empty?) # If neither found, take entire String as values name = email = email_text.delete(restricted_chars).strip if name.nil? && email.nil? EmailAddress.new(name, email) end
parse_email_text_arr(email_text_arr)
click to toggle source
Parse a String[] and returns an EmailAddres[]
@param [String email_text_arr Array of text, each being an email address @return [EmailAddress email_arr
# File lib/email_api/api/api_parser.rb, line 44 def self.parse_email_text_arr(email_text_arr) return nil if email_text_arr.nil? || !email_text_arr.is_a?(String) email_arr = [] # Split on email delimiter, parse each email split_arr = email_text_arr.split(/(?<=[#{email_delim}])/, -1) # Push value on through even if empty -> handled further down email_arr.push(parse_email_text(email_text_arr)) if split_arr.empty? split_arr.each do |email_text| email_arr.push(parse_email_text(email_text)) end email_arr = nil if !email_arr.nil? && email_arr.empty? email_arr end