|
1 | 1 | # frozen_string_literal: true |
2 | 2 |
|
3 | 3 | require 'openscap_parser/rule_identifier' |
4 | | -require 'openscap_parser/rule_reference' |
| 4 | +require 'openscap_parser/rule_references' |
| 5 | +require 'openscap_parser/xml_file' |
5 | 6 |
|
6 | 7 | # Mimics openscap-ruby Rule interface |
7 | 8 | module OpenscapParser |
8 | 9 | class Rule |
9 | | - def initialize(rule_xml: nil) |
10 | | - @rule_xml = rule_xml |
| 10 | + include OpenscapParser::Util |
| 11 | + include OpenscapParser::XmlFile |
| 12 | + include OpenscapParser::RuleReferences |
| 13 | + |
| 14 | + def initialize(parsed_xml: nil) |
| 15 | + @parsed_xml = parsed_xml |
11 | 16 | end |
12 | 17 |
|
13 | 18 | def id |
14 | | - @id ||= @rule_xml['id'] |
| 19 | + @id ||= @parsed_xml['id'] |
15 | 20 | end |
16 | 21 |
|
17 | 22 | def selected |
18 | | - @selected ||= @rule_xml['selected'] |
| 23 | + @selected ||= @parsed_xml['selected'] |
19 | 24 | end |
20 | 25 |
|
21 | 26 | def severity |
22 | | - @severity ||= @rule_xml['severity'] |
| 27 | + @severity ||= @parsed_xml['severity'] |
23 | 28 | end |
24 | 29 |
|
25 | 30 | def title |
26 | | - @title ||= @rule_xml.at_css('title') && |
27 | | - @rule_xml.at_css('title').text |
| 31 | + @title ||= @parsed_xml.at_css('title') && |
| 32 | + @parsed_xml.at_css('title').text |
28 | 33 | end |
29 | 34 |
|
30 | 35 | def description |
31 | 36 | @description ||= newline_to_whitespace( |
32 | | - @rule_xml.at_css('description') && |
33 | | - @rule_xml.at_css('description').text || '' |
| 37 | + @parsed_xml.at_css('description') && |
| 38 | + @parsed_xml.at_css('description').text || '' |
34 | 39 | ) |
35 | 40 | end |
36 | 41 |
|
37 | 42 | def rationale |
38 | 43 | @rationale ||= newline_to_whitespace( |
39 | | - @rule_xml.at_css('rationale') && |
40 | | - @rule_xml.at_css('rationale').text || '' |
| 44 | + @parsed_xml.at_css('rationale') && |
| 45 | + @parsed_xml.at_css('rationale').text || '' |
41 | 46 | ) |
42 | 47 | end |
43 | 48 |
|
44 | | - def references |
45 | | - @references ||= reference_nodes.map do |node| |
46 | | - RuleReference.new(reference_xml: node) |
47 | | - end |
48 | | - end |
49 | | - |
50 | | - def reference_nodes |
51 | | - @reference_nodes ||= @rule_xml.xpath('reference') |
| 49 | + alias :rule_reference_nodes_old :rule_reference_nodes |
| 50 | + def rule_reference_nodes(xpath = "reference") |
| 51 | + rule_reference_nodes_old(xpath) |
52 | 52 | end |
53 | 53 |
|
54 | | - def identifier |
55 | | - @identifier ||= RuleIdentifier.new(identifier_xml: @identifier_node) |
| 54 | + def rule_identifier |
| 55 | + @identifier ||= RuleIdentifier.new(identifier_xml: identifier_node) |
56 | 56 | end |
| 57 | + alias :identifier :rule_identifier |
57 | 58 |
|
58 | 59 | def identifier_node |
59 | | - @identifier_node ||= @rule_xml.at_xpath('ident') |
60 | | - end |
61 | | - |
62 | | - private |
63 | | - |
64 | | - def newline_to_whitespace(string) |
65 | | - string.gsub(/ *\n+/, " ").strip |
| 60 | + @identifier_node ||= @parsed_xml.at_xpath('ident') |
66 | 61 | end |
67 | 62 | end |
68 | 63 | end |
0 commit comments