openscap_parser 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e421ccf596a13137a881d3e122bf990e01daeb8c22318bb4c09283264b0a5c11
4
- data.tar.gz: 5fedddd4b213a41902e7db014ea168090ab421ad507370bc3450277cabfe9356
3
+ metadata.gz: 6f10f20d16fca6f3b16000545209fcaac88b09f90543bc7e2d820aad743e74d3
4
+ data.tar.gz: 731820564df8192f546ab0b08b106a90288603c97801bbfbecd043b410223825
5
5
  SHA512:
6
- metadata.gz: 7a3ea53ee21055986e306269fe3793b574c5cf01e4f2ebd4e46b5c446b274fc791eecb16117962be2a9d0d86ddfdf35ebc9908abc1befee10381fc396d136f04
7
- data.tar.gz: 4d5ddbc06cc09a596a19157cc03cb13bbe1848f8d2725a11cf65f3d54ce0517e3c137944fb9dd2cef962aab5a76c731a29a59e075ee223a32f6a2c52dac1fb9b
6
+ metadata.gz: b9b787207f533bc039f38df9d6235e49aa22661c9f395f4f4802f8ae44e4cd9a461d3af76cf60af95b0163b268c835e163748ced0ade199619d29f718e6a78f3
7
+ data.tar.gz: b9806ee3729be9b7a8bcdaa06e7db80bb39a63e92922cc312fac3814f98a60e1c9599fe29e9590d45a55a0d5d0836e20d62009d3945c1727457e6b87c57a4bd3
@@ -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,19 @@ 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
+
49
55
  def to_h
50
- { :id => id, :title => title, :description => description }
56
+ {
57
+ :id => id,
58
+ :title => title,
59
+ :description => description,
60
+ :refined_values => refined_values
61
+ }
51
62
  end
52
63
  end
53
64
  end
@@ -63,7 +63,7 @@ module OpenscapParser
63
63
  end
64
64
 
65
65
  def rule_identifier
66
- @identifier ||= RuleIdentifier.new(parsed_xml: identifier_node)
66
+ @identifier ||= identifier_node && RuleIdentifier.new(parsed_xml: identifier_node)
67
67
  end
68
68
  alias :identifier :rule_identifier
69
69
 
@@ -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.0"
2
+ VERSION = "1.6.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.0
4
+ version: 1.6.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: 2022-12-12 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