File tree 4 files changed +91
-0
lines changed
4 files changed +91
-0
lines changed Original file line number Diff line number Diff line change 1
1
# frozen_string_literal: true
2
2
require 'openscap_parser/xml_file'
3
3
require 'oval/definition_result'
4
+ require 'oval/definition'
4
5
5
6
module OpenscapParser
6
7
class OvalReport < XmlFile
@@ -11,5 +12,13 @@ def definition_results
11
12
def definition_result_nodes ( xpath = "./oval_results/results/system/definitions/definition" )
12
13
xpath_nodes ( xpath )
13
14
end
15
+
16
+ def definitions
17
+ @definitions ||= definition_nodes . map { |node | Oval ::Definition . new parsed_xml : node }
18
+ end
19
+
20
+ def definition_nodes ( xpath = "./oval_results/oval_definitions/definitions/definition" )
21
+ xpath_nodes ( xpath )
22
+ end
14
23
end
15
24
end
Original file line number Diff line number Diff line change
1
+ require "openscap_parser/xml_node"
2
+ require "oval/reference"
3
+
4
+ module Oval
5
+ class Definition < ::OpenscapParser ::XmlNode
6
+ def id
7
+ @id ||= @parsed_xml [ 'id' ]
8
+ end
9
+
10
+ def version
11
+ @version ||= @parsed_xml [ 'version' ]
12
+ end
13
+
14
+ def klass
15
+ @klass ||= @parsed_xml [ 'class' ]
16
+ end
17
+
18
+ def title
19
+ xml = @parsed_xml . at_xpath ( "./metadata/title" )
20
+ @title ||= xml && xml . text
21
+ end
22
+
23
+ def description
24
+ xml = @parsed_xml . at_xpath ( "./metadata/description" )
25
+ @description ||= xml && xml . text
26
+ end
27
+
28
+ def reference_nodes
29
+ @reference_nodes ||= @parsed_xml . xpath ( "./metadata/reference" )
30
+ end
31
+
32
+ def references
33
+ @references ||= reference_nodes . map { |node | Reference . new parsed_xml : node }
34
+ end
35
+
36
+ def to_h
37
+ {
38
+ :id => id ,
39
+ :version => version ,
40
+ :klass => klass ,
41
+ :title => title ,
42
+ :description => description ,
43
+ :references => references . map ( &:to_h )
44
+ }
45
+ end
46
+ end
47
+ end
Original file line number Diff line number Diff line change
1
+ require "openscap_parser/xml_node"
2
+
3
+ module Oval
4
+ class Reference < ::OpenscapParser ::XmlNode
5
+ def source
6
+ @source ||= @parsed_xml [ 'source' ]
7
+ end
8
+
9
+ def ref_id
10
+ @ref_id ||= @parsed_xml [ 'ref_id' ]
11
+ end
12
+
13
+ def ref_url
14
+ @ref_url ||= @parsed_xml [ 'ref_url' ]
15
+ end
16
+
17
+ def to_h
18
+ { :source => source , :ref_id => ref_id , :ref_url => ref_url }
19
+ end
20
+ end
21
+ end
Original file line number Diff line number Diff line change @@ -18,4 +18,18 @@ def setup
18
18
results = OpenscapParser ::OvalReport . new ( @invalid_report ) . definition_results
19
19
assert results . empty?
20
20
end
21
+
22
+ test 'should parse definitions' do
23
+ defs = OpenscapParser ::OvalReport . new ( @valid_report ) . definitions
24
+ refute defs . empty?
25
+ assert defs . last . id
26
+ assert defs . last . title
27
+ assert defs . last . description
28
+ refute_empty defs . last . references
29
+ end
30
+
31
+ test 'should return no definitions for invalid file' do
32
+ defs = OpenscapParser ::OvalReport . new ( @invalid_report ) . definitions
33
+ assert defs . empty?
34
+ end
21
35
end
You can’t perform that action at this time.
0 commit comments