Module: Griddler::EmailParser
- Defined in:
- lib/griddler/email_parser.rb
Class Method Summary collapse
- .extract_email_address(full_address) ⇒ Object
- .extract_headers(raw_headers) ⇒ Object
- .extract_name(full_address) ⇒ Object
- .extract_reply_body(body) ⇒ Object
- .parse_address(full_address) ⇒ Object
- .regex_split_points ⇒ Object
- .remove_reply_portion(body) ⇒ Object
- .reply_delimeter_regex ⇒ Object
- .split_address(email_address) ⇒ Object
Class Method Details
.extract_email_address(full_address) ⇒ Object
62 63 64 |
# File 'lib/griddler/email_parser.rb', line 62 def self.extract_email_address(full_address) full_address.split('<').last.delete('>').strip end |
.extract_headers(raw_headers) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/griddler/email_parser.rb', line 42 def self.extract_headers(raw_headers) if raw_headers.is_a?(Hash) raw_headers else header_fields = Mail::Header.new(raw_headers).fields header_fields.inject({}) do |header_hash, header_field| header_hash[header_field.name.to_s] = header_field.value.to_s header_hash end end end |
.extract_name(full_address) ⇒ Object
66 67 68 69 70 71 72 |
# File 'lib/griddler/email_parser.rb', line 66 def self.extract_name(full_address) full_address = full_address.strip name = full_address.split('<').first.strip if name.present? && name != full_address name end end |
.extract_reply_body(body) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/griddler/email_parser.rb', line 27 def self.extract_reply_body(body) if body.blank? "" else remove_reply_portion(body) .split(/[\r]*\n/) .reject do |line| line =~ /^[[:space:]]+>/ || line =~ /^[[:space:]]*Sent from my / end. join("\n"). strip end end |
.parse_address(full_address) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/griddler/email_parser.rb', line 14 def self.parse_address(full_address) email_address = extract_email_address(full_address) name = extract_name(full_address) token, host = split_address(email_address) { token: token, host: host, email: email_address, full: full_address, name: name, } end |
.regex_split_points ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/griddler/email_parser.rb', line 78 def self.regex_split_points [ reply_delimeter_regex, /^[[:space:]]*[-]+[[:space:]]*Original Message[[:space:]]*[-]+[[:space:]]*$/i, /^[[:space:]]*--[[:space:]]*$/, /^[[:space:]]*\>?[[:space:]]*On.*\r?\n?.*wrote:\r?\n?$/, /^On.*<\n?.*>.*\n?wrote:$/, /On.*wrote:/, /\*?From:.*$/i, /^[[:space:]]*\d{4}[-\/]\d{1,2}[-\/]\d{1,2}[[:space:]].*[[:space:]]<.*>?$/i ] end |
.remove_reply_portion(body) ⇒ Object
91 92 93 94 95 |
# File 'lib/griddler/email_parser.rb', line 91 def self.remove_reply_portion(body) regex_split_points.inject(body) do |result, split_point| result.split(split_point).first || "" end end |
.reply_delimeter_regex ⇒ Object
57 58 59 60 |
# File 'lib/griddler/email_parser.rb', line 57 def self.reply_delimeter_regex delimiter = Array(Griddler.configuration.reply_delimiter).join('|') %r{#{delimiter}} end |
.split_address(email_address) ⇒ Object
74 75 76 |
# File 'lib/griddler/email_parser.rb', line 74 def self.split_address(email_address) email_address.try :split, '@' end |