File tree Expand file tree Collapse file tree 4 files changed +91
-0
lines changed
Expand file tree Collapse file tree 4 files changed +91
-0
lines changed Original file line number Diff line number Diff line change 11# frozen_string_literal: true
22require 'openscap_parser/xml_file'
33require 'oval/definition_result'
4+ require 'oval/definition'
45
56module OpenscapParser
67 class OvalReport < XmlFile
@@ -11,5 +12,13 @@ def definition_results
1112 def definition_result_nodes ( xpath = "./oval_results/results/system/definitions/definition" )
1213 xpath_nodes ( xpath )
1314 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
1423 end
1524end
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
1818 results = OpenscapParser ::OvalReport . new ( @invalid_report ) . definition_results
1919 assert results . empty?
2020 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
2135end
You can’t perform that action at this time.
0 commit comments