Class: Gitlab::Ci::Parsers::Coverage::SaxDocument
- Inherits:
-
Nokogiri::XML::SAX::Document
- Object
- Nokogiri::XML::SAX::Document
- Gitlab::Ci::Parsers::Coverage::SaxDocument
- Defined in:
- lib/gitlab/ci/parsers/coverage/sax_document.rb
Constant Summary collapse
- GO_SOURCE_PATTERN =
'/usr/local/go/src'
- MAX_SOURCES =
100
Instance Method Summary collapse
- #characters(node_content) ⇒ Object
- #end_element(node_name) ⇒ Object
- #error(error) ⇒ Object
-
#initialize(coverage_report, project_path, worktree_paths) ⇒ SaxDocument
constructor
A new instance of SaxDocument.
- #start_element(node_name, attrs = []) ⇒ Object
Constructor Details
#initialize(coverage_report, project_path, worktree_paths) ⇒ SaxDocument
Returns a new instance of SaxDocument.
11 12 13 14 15 16 17 18 19 |
# File 'lib/gitlab/ci/parsers/coverage/sax_document.rb', line 11 def initialize(coverage_report, project_path, worktree_paths) @coverage_report = coverage_report @project_path = project_path @paths = worktree_paths&.to_set @matched_filenames = [] @parsed_lines = [] @sources = [] end |
Instance Method Details
#characters(node_content) ⇒ Object
39 40 41 42 43 |
# File 'lib/gitlab/ci/parsers/coverage/sax_document.rb', line 39 def characters(node_content) if node_name == 'source' parse_source(node_content) end end |
#end_element(node_name) ⇒ Object
45 46 47 48 49 50 51 52 53 |
# File 'lib/gitlab/ci/parsers/coverage/sax_document.rb', line 45 def end_element(node_name) if node_name == "package" remove_matched_filenames elsif node_name == "class" && filename && parsed_lines.present? coverage_report.add_file(filename, Hash[parsed_lines]) self.filename = nil self.parsed_lines = [] end end |
#error(error) ⇒ Object
21 22 23 |
# File 'lib/gitlab/ci/parsers/coverage/sax_document.rb', line 21 def error(error) raise Cobertura::InvalidXMLError, "XML parsing failed with error: #{error}" end |
#start_element(node_name, attrs = []) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/gitlab/ci/parsers/coverage/sax_document.rb', line 25 def start_element(node_name, attrs = []) return unless node_name self.node_name = node_name node_attrs = Hash[attrs] if node_name == 'class' && node_attrs["filename"].present? self.filename = determine_filename(node_attrs["filename"]) self.matched_filenames << filename if filename elsif node_name == 'line' self.parsed_lines << parse_line(node_attrs) end end |