diff options
Diffstat (limited to 'lib/gitlab/email/html_parser.rb')
-rw-r--r-- | lib/gitlab/email/html_parser.rb | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/gitlab/email/html_parser.rb b/lib/gitlab/email/html_parser.rb new file mode 100644 index 00000000000..51d8edb1b13 --- /dev/null +++ b/lib/gitlab/email/html_parser.rb @@ -0,0 +1,31 @@ +module Gitlab + module Email + class HTMLParser + def self.parse_reply(raw_body) + new(raw_body).filtered_text + end + + attr_reader :raw_body + def initialize(raw_body) + @raw_body = raw_body + end + + def document + @document ||= Nokogiri::HTML(raw_body) + end + + def filter_replies! + document.xpath('//blockquote').each { |n| n.replace('> ') } + document.xpath('//table').each { |n| n.remove } + end + + def filtered_html + @filtered_html ||= (filter_replies!; document.inner_html) + end + + def filtered_text + @filtered_text ||= Html2Text.convert(filtered_html) + end + end + end +end |