File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 22require 'openscap_parser/profiles'
33require 'openscap_parser/rule'
44require 'openscap_parser/rule_result'
5+ require 'openscap_parser/rule_results'
56require 'openscap_parser/rules'
67require 'openscap_parser/version'
78require 'openscap_parser/xml_report'
@@ -16,6 +17,7 @@ class Base
1617 include OpenscapParser ::XMLReport
1718 include OpenscapParser ::Profiles
1819 include OpenscapParser ::Rules
20+ include OpenscapParser ::RuleResults
1921
2022 def initialize ( report )
2123 report_xml ( report )
@@ -32,14 +34,5 @@ def start_time
3234 def end_time
3335 @end_time ||= DateTime . parse ( test_result_node [ 'end-time' ] )
3436 end
35-
36- def rule_results
37- @rule_results ||= test_result_node . search ( 'rule-result' ) . map do |rr |
38- rule_result_oscap = RuleResult . new
39- rule_result_oscap . id = rr . attributes [ 'idref' ] . value
40- rule_result_oscap . result = rr . search ( 'result' ) . first . text
41- rule_result_oscap
42- end
43- end
4437 end
4538end
Original file line number Diff line number Diff line change 11# frozen_string_literal: true
2+ require 'openscap_parser/test_result'
23
34module OpenscapParser
45 # Methods related to saving profiles and finding which hosts
56 # they belong to
67 module Profiles
8+ include TestResult
9+
710 def self . included ( base )
811 base . class_eval do
912 def profiles
@@ -18,10 +21,6 @@ def profile_node
1821 @report_xml . at_xpath ( ".//Profile\
1922 [contains('#{ test_result_node [ 'id' ] } ', @id)]")
2023 end
21-
22- def test_result_node
23- @test_result_node ||= @report_xml . at_css ( 'TestResult' )
24- end
2524 end
2625 end
2726 end
Original file line number Diff line number Diff line change @@ -20,11 +20,15 @@ def title
2020 end
2121
2222 def description
23- @description ||= @rule_xml . at_css ( 'description' ) . text . delete ( "\n " )
23+ rule_node ||= @rule_xml . at_css ( 'description' )
24+ @description ||= newline_to_whitespace ( rule_node . text ) if rule_node && rule_node . text
2425 end
2526
2627 def rationale
27- @rationale ||= @rule_xml . at_css ( 'rationale' ) . children . text . delete ( "\n " )
28+ rationale_node ||= @rule_xml . at_css ( 'rationale' )
29+ @rationale ||= newline_to_whitespace ( rationale_node . children . text ) if rationale_node &&
30+ rationale_node . children &&
31+ rationale_node . children . text
2832 end
2933
3034 def references
@@ -35,10 +39,15 @@ def references
3539
3640 def identifier
3741 @identifier ||= {
38- label : @rule_xml . at_css ( 'ident' ) & .text ,
42+ label : @rule_xml . at_css ( 'ident' ) && @rule_xml . at_css ( 'ident' ) . text ,
3943 system : ( ident = @rule_xml . at_css ( 'ident' ) ) && ident [ 'system' ]
4044 }
4145 end
46+
47+ private
48+
49+ def newline_to_whitespace ( string )
50+ string . gsub ( / *\n +/ , " " ) . strip
51+ end
4252 end
4353end
44-
Original file line number Diff line number Diff line change 1+ # frozen_string_literal: true
2+ require 'openscap_parser/test_result'
3+
4+ module OpenscapParser
5+ module RuleResults
6+ include TestResult
7+
8+ def self . included ( base )
9+ base . class_eval do
10+ def rule_results
11+ @rule_results ||= test_result_node . search ( 'rule-result' ) . map do |rr |
12+ rule_result_oscap = RuleResult . new
13+ rule_result_oscap . id = rr . attributes [ 'idref' ] . value
14+ rule_result_oscap . result = rr . search ( 'result' ) . first . text
15+ rule_result_oscap
16+ end
17+ end
18+ end
19+ end
20+ end
21+ end
Original file line number Diff line number Diff line change 1+ # frozen_string_literal: true
2+
3+ module OpenscapParser
4+ module TestResult
5+ def self . included ( base )
6+ base . class_eval do
7+ private
8+
9+ def test_result_node
10+ @test_result_node ||= @report_xml . at_css ( 'TestResult' )
11+ end
12+ end
13+ end
14+ end
15+ end
Original file line number Diff line number Diff line change @@ -42,4 +42,5 @@ Gem::Specification.new do |spec|
4242 spec . add_development_dependency "minitest" , "~> 5.0"
4343 spec . add_development_dependency "shoulda-context"
4444 spec . add_development_dependency "pry"
45+ spec . add_development_dependency "pry-byebug"
4546end
Original file line number Diff line number Diff line change @@ -69,5 +69,23 @@ def setup
6969
7070 assert_equal references , rule . references
7171 end
72+
73+ should 'parse rule description without newlines' do
74+ rule = @report_parser . rule_objects . find do |rule_obj |
75+ rule_obj . id == 'xccdf_org.ssgproject.content_rule_service_atd_disabled'
76+ end
77+
78+ desc = <<~DESC . gsub ( "\n " , ' ' ) . strip
79+ The at and batch commands can be used to
80+ schedule tasks that are meant to be executed only once. This allows delayed
81+ execution in a manner similar to cron, except that it is not
82+ recurring. The daemon atd keeps track of tasks scheduled via
83+ at and batch, and executes them at the specified time.
84+ The atd service can be disabled with the following command:
85+ $ sudo systemctl disable atd.service
86+ DESC
87+
88+ assert_equal desc , rule . description
89+ end
7290 end
7391end
You can’t perform that action at this time.
0 commit comments