Skip to content

Commit 8eeb6a5

Browse files
akofinkdLobatog
authored andcommitted
Organize XmlNode vs. XmlFile types (#19)
Signed-off-by: Andrew Kofink <akofink@redhat.com>
1 parent f9c2d54 commit 8eeb6a5

29 files changed

+399
-334
lines changed

lib/openscap_parser.rb

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,22 @@
11
# frozen_string_literal: true
2+
3+
require 'openscap_parser/version'
24
require 'openscap_parser/util'
35
require 'openscap_parser/benchmarks'
6+
require 'openscap_parser/test_results'
47
require 'openscap_parser/profiles'
5-
require 'openscap_parser/profile'
6-
require 'openscap_parser/rule'
7-
require 'openscap_parser/rule_result'
8-
require 'openscap_parser/rule_results'
98
require 'openscap_parser/rules'
10-
require 'openscap_parser/version'
11-
require 'openscap_parser/xml_report'
12-
require 'openscap_parser/datastream'
9+
require 'openscap_parser/rule_results'
10+
require 'openscap_parser/tailorings'
11+
12+
require 'openscap_parser/xml_file'
13+
require 'openscap_parser/datastream_file'
14+
require 'openscap_parser/test_result_file'
15+
require 'openscap_parser/tailoring_file'
1316

1417
require 'date'
1518
require 'railtie' if defined?(Rails)
1619

1720
module OpenscapParser
1821
class Error < StandardError; end
19-
20-
class Base
21-
include OpenscapParser::XMLReport
22-
include OpenscapParser::Profiles
23-
include OpenscapParser::Rules
24-
include OpenscapParser::RuleResults
25-
include OpenscapParser::TestResult
26-
27-
def initialize(report)
28-
parsed_xml(report)
29-
end
30-
end
3122
end

lib/openscap_parser/benchmark.rb

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,12 @@
88

99
# Mimics openscap-ruby Benchmark interface
1010
module OpenscapParser
11-
class Benchmark
11+
class Benchmark < XmlNode
1212
include OpenscapParser::Util
13-
include OpenscapParser::XmlFile
1413
include OpenscapParser::Rules
1514
include OpenscapParser::RuleReferences
1615
include OpenscapParser::Profiles
1716

18-
def initialize(parsed_xml: nil)
19-
@parsed_xml = parsed_xml
20-
end
21-
2217
def id
2318
@id ||= @parsed_xml['id']
2419
end
Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,12 @@
33
require 'openscap_parser/benchmarks'
44

55
module OpenscapParser
6-
class Datastream
7-
include OpenscapParser::XmlFile
6+
# A class to represent a datastream (-ds.xml) XmlFile
7+
class DatastreamFile < XmlFile
88
include OpenscapParser::Benchmarks
99

10-
def initialize(report)
11-
parsed_xml report
12-
end
13-
1410
def valid?
1511
return true if @parsed_xml.root.name == 'data-stream-collection' && namespaces.keys.include?('xmlns:ds')
16-
return true if @parsed_xml.root.name == 'Tailoring' && namespaces.keys.include?('xmlns:xccdf')
1712
false
1813
end
1914
end

lib/openscap_parser/profile.rb

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,34 @@
11
module OpenscapParser
2-
class Profile
3-
def initialize(profile_xml: nil)
4-
@profile_xml = profile_xml
2+
class Profile < XmlNode
3+
def id
4+
@id ||= @parsed_xml['id']
55
end
66

7-
def id
8-
@id ||= @profile_xml['id']
7+
def extends_profile_id
8+
@extends ||= @parsed_xml['extends']
99
end
1010

1111
def title
12-
@title ||= @profile_xml.at_css('title') &&
13-
@profile_xml.at_css('title').text
12+
@title ||= @parsed_xml.at_css('title') &&
13+
@parsed_xml.at_css('title').text
1414
end
15+
alias :name :title
1516

1617
def description
17-
@description ||= @profile_xml.at_css('description') &&
18-
@profile_xml.at_css('description').text
18+
@description ||= @parsed_xml.at_css('description') &&
19+
@parsed_xml.at_css('description').text
1920
end
2021

2122
def selected_rule_ids
22-
id_refs = @profile_xml.xpath("select[@selected='true']/@idref")
23-
id_refs && id_refs.map(&:text)
23+
@selected_rule_ids ||= @parsed_xml.xpath("select[@selected='true']/@idref") &&
24+
@parsed_xml.xpath("select[@selected='true']/@idref").map(&:text)
25+
end
26+
27+
def set_values
28+
@set_values ||= @parsed_xml.xpath("set-value") &&
29+
@parsed_xml.xpath("set-value").map do |set_value|
30+
[set_value['idref'], set_value.text]
31+
end.to_h
2432
end
2533

2634
def to_h

lib/openscap_parser/profiles.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# frozen_string_literal: true
22

3+
require 'openscap_parser/profile'
4+
35
module OpenscapParser
46
# Methods related to saving profiles and finding which hosts
57
# they belong to
@@ -8,7 +10,7 @@ def self.included(base)
810
base.class_eval do
911
def profiles
1012
@profiles ||= profile_nodes.map do |profile_node|
11-
OpenscapParser::Profile.new(profile_xml: profile_node)
13+
OpenscapParser::Profile.new(parsed_xml: profile_node)
1214
end
1315
end
1416

lib/openscap_parser/rule.rb

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,43 +6,38 @@
66

77
# Mimics openscap-ruby Rule interface
88
module OpenscapParser
9-
class Rule
9+
class Rule < XmlNode
1010
include OpenscapParser::Util
11-
include OpenscapParser::XmlFile
1211
include OpenscapParser::RuleReferences
1312

14-
def initialize(parsed_xml: nil)
15-
@parsed_xml = parsed_xml
16-
end
17-
1813
def id
19-
@id ||= @parsed_xml['id']
14+
@id ||= parsed_xml['id']
2015
end
2116

2217
def selected
23-
@selected ||= @parsed_xml['selected']
18+
@selected ||= parsed_xml['selected']
2419
end
2520

2621
def severity
27-
@severity ||= @parsed_xml['severity']
22+
@severity ||= parsed_xml['severity']
2823
end
2924

3025
def title
31-
@title ||= @parsed_xml.at_css('title') &&
32-
@parsed_xml.at_css('title').text
26+
@title ||= parsed_xml.at_css('title') &&
27+
parsed_xml.at_css('title').text
3328
end
3429

3530
def description
3631
@description ||= newline_to_whitespace(
37-
@parsed_xml.at_css('description') &&
38-
@parsed_xml.at_css('description').text || ''
32+
parsed_xml.at_css('description') &&
33+
parsed_xml.at_css('description').text || ''
3934
)
4035
end
4136

4237
def rationale
4338
@rationale ||= newline_to_whitespace(
44-
@parsed_xml.at_css('rationale') &&
45-
@parsed_xml.at_css('rationale').text || ''
39+
parsed_xml.at_css('rationale') &&
40+
parsed_xml.at_css('rationale').text || ''
4641
)
4742
end
4843

@@ -52,12 +47,12 @@ def rule_reference_nodes(xpath = "reference")
5247
end
5348

5449
def rule_identifier
55-
@identifier ||= RuleIdentifier.new(identifier_xml: identifier_node)
50+
@identifier ||= RuleIdentifier.new(parsed_xml: identifier_node)
5651
end
5752
alias :identifier :rule_identifier
5853

5954
def identifier_node
60-
@identifier_node ||= @parsed_xml.at_xpath('ident')
55+
@identifier_node ||= parsed_xml.at_xpath('ident')
6156
end
6257
end
6358
end

lib/openscap_parser/rule_identifier.rb

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,13 @@
22

33
# RuleIdentifier interface as an object
44
module OpenscapParser
5-
class RuleIdentifier
6-
def initialize(identifier_xml: nil)
7-
@identifier_xml = identifier_xml
8-
end
9-
5+
class RuleIdentifier < XmlNode
106
def label
11-
@label ||= @identifier_xml && @identifier_xml.text
7+
@label ||= @parsed_xml && @parsed_xml.text
128
end
139

1410
def system
15-
@system ||= @identifier_xml && @identifier_xml['system']
11+
@system ||= @parsed_xml && @parsed_xml['system']
1612
end
1713
end
1814
end

lib/openscap_parser/rule_reference.rb

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,13 @@
22

33
# RuleReference interface as an object
44
module OpenscapParser
5-
class RuleReference
6-
def initialize(reference_xml: nil)
7-
@reference_xml = reference_xml
8-
end
9-
5+
class RuleReference < XmlNode
106
def href
11-
@href ||= @reference_xml && @reference_xml['href']
7+
@href ||= @parsed_xml && @parsed_xml['href']
128
end
139

1410
def label
15-
@label ||= @reference_xml && @reference_xml.text
11+
@label ||= @parsed_xml && @parsed_xml.text
1612
end
1713
end
1814
end

lib/openscap_parser/rule_references.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def rule_reference_strings
1616

1717
def rule_references
1818
@rule_references ||= rule_reference_nodes.map do |node|
19-
OpenscapParser::RuleReference.new(reference_xml: node)
19+
OpenscapParser::RuleReference.new(parsed_xml: node)
2020
end.uniq do |reference|
2121
[reference.label, reference.href]
2222
end

lib/openscap_parser/rule_result.rb

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,27 @@
11
# frozen_string_literal: true
22

33
module OpenscapParser
4-
class RuleResult
5-
attr_accessor :id, :result
4+
class RuleResult < XmlNode
5+
def id
6+
@id ||= parsed_xml['idref']
7+
end
8+
9+
def time
10+
@time ||= parsed_xml['time']
11+
end
12+
13+
def severity
14+
@severity ||= parsed_xml['severity']
15+
end
16+
17+
def weight
18+
@weight ||= parsed_xml['weight']
19+
end
20+
21+
def result
22+
@result ||= parsed_xml.at_xpath('result') &&
23+
parsed_xml.at_xpath('result').text || ''
24+
end
625
end
726
end
827

0 commit comments

Comments
 (0)