Class: EmailReplyParser::Email
- Inherits:
-
Object
- Object
- EmailReplyParser::Email
- Defined in:
- lib/email_reply_parser.rb
Overview
An Email instance represents a parsed body String.
Instance Attribute Summary collapse
-
#fragments ⇒ Object
readonly
Emails have an Array of Fragments.
Instance Method Summary collapse
-
#read(text, from_address = "") ⇒ Object
Splits the given text into a list of Fragments.
-
#visible_text ⇒ Object
Public: Gets the combined text of the visible fragments of the email body.
Instance Attribute Details
#fragments ⇒ Object (readonly)
Emails have an Array of Fragments.
60 61 62 |
# File 'lib/email_reply_parser.rb', line 60 def fragments @fragments end |
Instance Method Details
#read(text, from_address = "") ⇒ Object
Splits the given text into a list of Fragments. This is roughly done by reversing the text and parsing from the bottom to the top. This way we can check for ‘On <date>, <author> wrote:’ lines above quoted blocks.
text - A String email body. from_address - from address of the email (optional)
Returns this same Email instance.
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/email_reply_parser.rb', line 77 def read(text, from_address = "") @fragments = [] # parse out the from name if one exists and save for use later @from_name_raw = parse_raw_name_from_address(from_address) @from_name_normalized = normalize_name(@from_name_raw) @from_email = parse_email_from_address(from_address) text = normalize_text(text) # The text is reversed initially due to the way we check for hidden # fragments. text = text.reverse # This determines if any 'visible' Fragment has been found. Once any # visible Fragment is found, stop looking for hidden ones. @found_visible = false # This instance variable points to the current Fragment. If the matched # line fits, it should be added to this Fragment. Otherwise, finish it # and start a new Fragment. @fragment = nil # Use the StringScanner to pull out each line of the email content. @scanner = StringScanner.new(text) while line = @scanner.scan_until(/\n/n) scan_line(line) end # Be sure to parse the last line of the email. if (last_line = @scanner.rest.to_s).size > 0 scan_line(last_line, true) end # Finish up the final fragment. Finishing a fragment will detect any # attributes (hidden, signature, reply), and join each line into a # string. finish_fragment @scanner = @fragment = nil self end |
#visible_text ⇒ Object
Public: Gets the combined text of the visible fragments of the email body.
Returns a String.
65 66 67 |
# File 'lib/email_reply_parser.rb', line 65 def visible_text fragments.select{|f| !f.hidden?}.map{|f| f.to_s}.join("\n").rstrip end |