7e6f6e1603
Enables frozens string for the following: * lib/gitlab/conflict/**/*.rb * lib/gitlab/cross_project_access/**/*.rb * lib/gitlab/cycle_analytics/**/*.rb * lib/gitlab/data_builder/**/*.rb * lib/gitlab/database/**/*.rb * lib/gitlab/dependency_linker/**/*.rb * lib/gitlab/diff/**/*.rb * lib/gitlab/downtime_check/**/*.rb * lib/gitlab/email/**/*.rb * lib/gitlab/etag_caching/**/*.rb Partially addresses gitlab-org/gitlab-ce#47424.
43 lines
1 KiB
Ruby
43 lines
1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
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.parse(raw_body)
|
|
end
|
|
|
|
def filter_replies!
|
|
document.xpath('//blockquote').each(&:remove)
|
|
document.xpath('//table').each(&:remove)
|
|
|
|
# bogus links with no href are sometimes added by outlook,
|
|
# and can result in Html2Text adding extra square brackets
|
|
# to the text, so we unwrap them here.
|
|
document.xpath('//a[not(@href)]').each do |link|
|
|
link.replace(link.children)
|
|
end
|
|
end
|
|
|
|
def filtered_html
|
|
@filtered_html ||= begin
|
|
filter_replies!
|
|
document.inner_html
|
|
end
|
|
end
|
|
|
|
def filtered_text
|
|
@filtered_text ||= Html2Text.convert(filtered_html)
|
|
end
|
|
end
|
|
end
|
|
end
|