openscap_parser 1.5.1 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7726cf3e8cf53af20cb73fbddef5c95e92ca2a748e0da3a229a015918b382d34
4
- data.tar.gz: f9ebf783cce54e930970ea94da5819dc50e638ec3cc91ae3c38d5e2deb705f24
3
+ metadata.gz: ce0283dd70cb4bd3915601b3b8af328c6204a6e726944e3e500c0349c077d573
4
+ data.tar.gz: d550c9a264579c57668a39e83cb1294aab294caabc7e2a07232f55f4d4d09031
5
5
  SHA512:
6
- metadata.gz: 05e6983a1a1ce75fc9fa216a078df30be423ab56e81e863eba5ce0cab837f8e0a4de23550981dc61162d0bba9113e6b065c83103cff76714b418d3d2941083b2
7
- data.tar.gz: 6a0340c5bd19e82b3aee053d19ebccf3a0fdb0bc0287d32145ce5380417adabbaf03b85d2702a9b7830d286a3ca6af21f32d353a4265e7a807f4209428c5c184
6
+ metadata.gz: ce05d654865ec030cb866c4b48da4dd3b0ded8b2884825745f525dc7ea396f2aebbf8bef29e6f04f5dac5c5440f256db706743ee056ca00706def25297ff02d3
7
+ data.tar.gz: 463109c35f867f37ab57e96d59c0360e4af4d91ecf73c14b813b1b9fe1294f9b4ca5364a4521ac40b5ef551c33fa6da631c1655580da60328f664d0f64e36377
@@ -6,7 +6,7 @@ require 'openscap_parser/rules'
6
6
  require 'openscap_parser/profiles'
7
7
  require 'openscap_parser/rule_references'
8
8
  require 'openscap_parser/groups'
9
- require 'openscap_parser/value_definitions'
9
+ require 'openscap_parser/values'
10
10
 
11
11
  # Mimics openscap-ruby Benchmark interface
12
12
  module OpenscapParser
@@ -16,7 +16,7 @@ module OpenscapParser
16
16
  include OpenscapParser::RuleReferences
17
17
  include OpenscapParser::Profiles
18
18
  include OpenscapParser::Groups
19
- include OpenscapParser::ValueDefinitions
19
+ include OpenscapParser::Values
20
20
 
21
21
  def id
22
22
  @id ||= @parsed_xml['id']
@@ -46,8 +46,40 @@ module OpenscapParser
46
46
  @parsed_xml.xpath("select[@selected='true']/@idref").map(&:text)
47
47
  end
48
48
 
49
+ def refined_values
50
+ @refined_values ||= @parsed_xml.xpath("refine-value").each_with_object({}) do |element, rv|
51
+ rv[element.at_xpath('@idref').text] = element.at_xpath('@selector').text
52
+ end
53
+ end
54
+
55
+ def refined_rules(attribute)
56
+ @refined_rules ||= @parsed_xml.xpath("refine-rule[@#{attribute}]").each_with_object({}) do |element, rr|
57
+ rr[element.at_xpath('@idref').text] = element.at_xpath("@#{attribute}")&.text
58
+ end
59
+ end
60
+
61
+ def refined_rule_severity
62
+ refined_rules('severity')
63
+ end
64
+
65
+ def refined_rule_role
66
+ refined_rules('role')
67
+ end
68
+
69
+ def refined_rule_weight
70
+ refined_rules('weight')
71
+ end
72
+
49
73
  def to_h
50
- { :id => id, :title => title, :description => description }
74
+ {
75
+ :id => id,
76
+ :title => title,
77
+ :description => description,
78
+ :refined_values => refined_values,
79
+ :refined_rule_severity => refined_rule_severity,
80
+ :refined_rule_role => refined_rule_role,
81
+ :refined_rule_weight => refined_rule_weight
82
+ }
51
83
  end
52
84
  end
53
85
  end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+ module OpenscapParser
3
+ class Value < XmlNode
4
+ include OpenscapParser::Util
5
+
6
+ def id
7
+ @id ||= parsed_xml['id']
8
+ end
9
+
10
+ def description
11
+ @description ||= newline_to_whitespace(parsed_xml.at_css('description')&.text)
12
+ end
13
+
14
+ def title
15
+ @title ||= parsed_xml.at_css('title')&.text
16
+ end
17
+
18
+ def type
19
+ @type ||= parsed_xml['type'] || 'string'
20
+ end
21
+
22
+ def generic_selector(type, selector = nil)
23
+ cache = instance_variable_get("@#{type}")
24
+
25
+ unless cache
26
+ element_name = type.to_s.sub('_', '-')
27
+ cache = parsed_xml.xpath(element_name).each_with_object({}) do |element, elements|
28
+ elements[element.at_xpath('@selector')&.text.presence] = element&.text
29
+ end
30
+ instance_variable_set("@#{type}", cache)
31
+ end
32
+
33
+ return cache[selector] if selector
34
+
35
+ cache[nil] || cache.values.first
36
+ end
37
+
38
+ def upper_bound(selector = nil)
39
+ generic_selector(:upper_bound, selector)
40
+ end
41
+
42
+ def lower_bound(selector = nil)
43
+ generic_selector(:lower_bound, selector)
44
+ end
45
+
46
+ def value(selector = nil)
47
+ generic_selector(:value, selector)
48
+ end
49
+
50
+ def to_h
51
+ {
52
+ :id => id,
53
+ :title => title,
54
+ :description => description,
55
+ :type => type,
56
+ :lower_bound => lower_bound,
57
+ :upper_bound => upper_bound
58
+ }
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'openscap_parser/value'
4
+
5
+ module OpenscapParser
6
+ # Methods related to parsing values
7
+ module Values
8
+ def self.included(base)
9
+ base.class_eval do
10
+ def values
11
+ @values ||= value_nodes.map do |vdn|
12
+ Value.new(parsed_xml: vdn)
13
+ end
14
+ end
15
+
16
+ def value_nodes(xpath = ".//Value")
17
+ xpath_nodes(xpath)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,3 +1,3 @@
1
1
  module OpenscapParser
2
- VERSION = "1.5.1"
2
+ VERSION = "1.7.0"
3
3
  end
@@ -7,7 +7,7 @@ require 'openscap_parser/test_results'
7
7
  require 'openscap_parser/profiles'
8
8
  require 'openscap_parser/rules'
9
9
  require 'openscap_parser/groups'
10
- require 'openscap_parser/value_definitions'
10
+ require 'openscap_parser/values'
11
11
  require 'openscap_parser/rule_results'
12
12
  require 'openscap_parser/tailorings'
13
13
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openscap_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Lobato Garcia
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-12-05 00:00:00.000000000 Z
12
+ date: 2023-02-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -176,8 +176,8 @@ files:
176
176
  - lib/openscap_parser/test_result_file.rb
177
177
  - lib/openscap_parser/test_results.rb
178
178
  - lib/openscap_parser/util.rb
179
- - lib/openscap_parser/value_definition.rb
180
- - lib/openscap_parser/value_definitions.rb
179
+ - lib/openscap_parser/value.rb
180
+ - lib/openscap_parser/values.rb
181
181
  - lib/openscap_parser/version.rb
182
182
  - lib/openscap_parser/xml_file.rb
183
183
  - lib/openscap_parser/xml_node.rb
@@ -1,58 +0,0 @@
1
- # frozen_string_literal: true
2
- module OpenscapParser
3
- class ValueDefinition < XmlNode
4
- include OpenscapParser::Util
5
-
6
- def id
7
- @id ||= parsed_xml['id']
8
- end
9
-
10
- def description
11
- @description ||= newline_to_whitespace(parsed_xml.at_css('description')&.text)
12
- end
13
-
14
- def title
15
- @title ||= parsed_xml.at_css('title')&.text
16
- end
17
-
18
- def type
19
- @type ||= parsed_xml['type'] || 'string'
20
- end
21
-
22
- def lower_bound
23
- @lower_bound ||= begin
24
- lower_bound_element = parsed_xml.at_xpath("lower-bound[@selector='']") || parsed_xml.at_xpath('lower-bound[not(@selector)]')
25
- lower_bound_element&.text
26
- end
27
- end
28
-
29
- def upper_bound
30
- @upper_bound ||= begin
31
- upper_bound_element = parsed_xml.at_xpath("upper-bound[@selector='']") || parsed_xml.at_xpath('upper-bound[not(@selector)]')
32
- upper_bound_element&.text
33
- end
34
- end
35
-
36
- def default_value
37
- # The default value is the value element with a empty or absent @selector
38
- # If there is no value element with an empty or absent @selector, the first value in
39
- # the top down processing shall be the default element
40
- @default_value ||= begin
41
- value_element = parsed_xml.at_xpath("value[@selector='']") || parsed_xml.at_xpath('value[not(@selector)]') || parsed_xml.xpath("value")[0]
42
- value_element&.text
43
- end
44
- end
45
-
46
- def to_h
47
- {
48
- :id => id,
49
- :title => title,
50
- :description => description,
51
- :type => type,
52
- :lower_bound => lower_bound,
53
- :upper_bound => upper_bound,
54
- :default_value => default_value
55
- }
56
- end
57
- end
58
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'openscap_parser/value_definition'
4
-
5
- module OpenscapParser
6
- # Methods related to parsing values
7
- module ValueDefinitions
8
- def self.included(base)
9
- base.class_eval do
10
- def value_definitions
11
- @value_definitions ||= value_definition_nodes.map do |vdn|
12
- ValueDefinition.new(parsed_xml: vdn)
13
- end
14
- end
15
-
16
- def value_definition_nodes(xpath = ".//Value")
17
- xpath_nodes(xpath)
18
- end
19
- end
20
- end
21
- end
22
- end