abide_dev_utils 0.11.0 → 0.12.1

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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +18 -31
  3. data/lib/abide_dev_utils/cem/benchmark.rb +335 -136
  4. data/lib/abide_dev_utils/cem/generate/coverage_report.rb +380 -0
  5. data/lib/abide_dev_utils/cem/generate/reference.rb +238 -35
  6. data/lib/abide_dev_utils/cem/generate.rb +5 -4
  7. data/lib/abide_dev_utils/cem/hiera_data/mapping_data/map_data.rb +110 -0
  8. data/lib/abide_dev_utils/cem/hiera_data/mapping_data/mixins.rb +46 -0
  9. data/lib/abide_dev_utils/cem/hiera_data/mapping_data.rb +146 -0
  10. data/lib/abide_dev_utils/cem/hiera_data/resource_data/control.rb +127 -0
  11. data/lib/abide_dev_utils/cem/hiera_data/resource_data/parameters.rb +90 -0
  12. data/lib/abide_dev_utils/cem/hiera_data/resource_data/resource.rb +102 -0
  13. data/lib/abide_dev_utils/cem/hiera_data/resource_data.rb +310 -0
  14. data/lib/abide_dev_utils/cem/hiera_data.rb +7 -0
  15. data/lib/abide_dev_utils/cem/mapping/mapper.rb +161 -34
  16. data/lib/abide_dev_utils/cem/validate/resource_data.rb +33 -0
  17. data/lib/abide_dev_utils/cem/validate.rb +10 -0
  18. data/lib/abide_dev_utils/cem.rb +0 -1
  19. data/lib/abide_dev_utils/cli/cem.rb +20 -2
  20. data/lib/abide_dev_utils/dot_number_comparable.rb +75 -0
  21. data/lib/abide_dev_utils/errors/cem.rb +10 -0
  22. data/lib/abide_dev_utils/ppt/class_utils.rb +1 -1
  23. data/lib/abide_dev_utils/ppt/code_gen/data_types.rb +64 -0
  24. data/lib/abide_dev_utils/ppt/code_gen/generate.rb +15 -0
  25. data/lib/abide_dev_utils/ppt/code_gen/resource.rb +59 -0
  26. data/lib/abide_dev_utils/ppt/code_gen/resource_types/base.rb +93 -0
  27. data/lib/abide_dev_utils/ppt/code_gen/resource_types/class.rb +17 -0
  28. data/lib/abide_dev_utils/ppt/code_gen/resource_types/manifest.rb +16 -0
  29. data/lib/abide_dev_utils/ppt/code_gen/resource_types/parameter.rb +16 -0
  30. data/lib/abide_dev_utils/ppt/code_gen/resource_types/strings.rb +13 -0
  31. data/lib/abide_dev_utils/ppt/code_gen/resource_types.rb +6 -0
  32. data/lib/abide_dev_utils/ppt/code_gen.rb +15 -0
  33. data/lib/abide_dev_utils/ppt/code_introspection.rb +102 -0
  34. data/lib/abide_dev_utils/ppt/hiera.rb +4 -1
  35. data/lib/abide_dev_utils/ppt/puppet_module.rb +2 -1
  36. data/lib/abide_dev_utils/ppt.rb +3 -0
  37. data/lib/abide_dev_utils/version.rb +1 -1
  38. data/lib/abide_dev_utils/xccdf/parser/helpers.rb +146 -0
  39. data/lib/abide_dev_utils/xccdf/parser/objects.rb +87 -144
  40. data/lib/abide_dev_utils/xccdf/parser.rb +5 -0
  41. data/lib/abide_dev_utils/xccdf/utils.rb +89 -0
  42. data/lib/abide_dev_utils/xccdf.rb +193 -63
  43. metadata +27 -3
  44. data/lib/abide_dev_utils/cem/coverage_report.rb +0 -348
@@ -0,0 +1,146 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AbideDevUtils
4
+ module XCCDF
5
+ module Parser
6
+ module Helpers
7
+ # Provides helper methods for working with XCCDF element children
8
+ module ElementChildren
9
+ def search_children
10
+ @search_children ||= SearchChildren.new(children)
11
+ end
12
+
13
+ # Implements methods that allow for searching an XCCDF Element's children
14
+ class SearchChildren
15
+ attr_reader :children
16
+
17
+ def initialize(children)
18
+ @children = children
19
+ end
20
+
21
+ def recursive_select_children(children_to_search = children, &block)
22
+ search_hits = []
23
+ children_to_search.each do |child|
24
+ found = yield child
25
+ if found
26
+ search_hits << child
27
+ elsif child.respond_to?(:children)
28
+ search_hits << recursive_select_children(child.children, &block)
29
+ end
30
+ end
31
+ search_hits.flatten.compact.uniq
32
+ end
33
+
34
+ def recursive_find_child(children_to_search = children, &block)
35
+ rescursive_select_children(children_to_search, &block).first
36
+ end
37
+
38
+ def find_children_that_respond_to(method, recurse: false)
39
+ return recursive_select_children { |child| child.respond_to?(method) } if recurse
40
+
41
+ children.select { |c| c.respond_to?(method.to_sym) }
42
+ end
43
+
44
+ def find_children_by_class(klass, recurse: false)
45
+ return recursive_select_children { |child| child.instance_of?(klass) } if recurse
46
+
47
+ children.select { |child| child.instance_of?(klass) }
48
+ end
49
+
50
+ def find_child_by_class(klass, recurse: false)
51
+ return recursive_find_child { |child| child.is_a?(klass) } if recurse
52
+
53
+ find_children_by_class(klass).first
54
+ end
55
+
56
+ def find_children_by_xpath(xpath, recurse: false)
57
+ return recursive_select_children { |child| child.xpath == xpath } if recurse
58
+
59
+ children.select { |child| child.xpath == xpath }
60
+ end
61
+
62
+ def find_child_by_xpath(xpath, recurse: false)
63
+ return recursive_find_child { |child| child.xpath == xpath } if recurse
64
+
65
+ find_children_by_xpath(xpath).first
66
+ end
67
+
68
+ def find_children_by_attribute(attribute, recurse: false)
69
+ pr = proc do |child|
70
+ next unless child.instance_of?(AbideDevUtils::XCCDF::Parser::Objects::AttributeValue)
71
+
72
+ child.attribute == attribute
73
+ end
74
+ return recursive_select_children(&pr) if recurse
75
+
76
+ children.select(&pr)
77
+ end
78
+
79
+ def find_child_by_attribute(attribute, recurse: false)
80
+ find_children_by_attribute(attribute, recurse: recurse).first
81
+ end
82
+
83
+ def find_children_by_attribute_value(attribute, value, recurse: false)
84
+ pr = proc do |child|
85
+ next unless child.instance_of?(AbideDevUtils::XCCDF::Parser::Objects::AttributeValue)
86
+
87
+ child.attribute == attribute && child.value == value
88
+ end
89
+ return recursive_select_children(&pr) if recurse
90
+
91
+ children.select(&pr)
92
+ end
93
+
94
+ def find_child_by_attribute_value(attribute, value, recurse: false)
95
+ find_children_by_attribute_value(attribute, value, recurse: recurse).first
96
+ end
97
+ end
98
+ end
99
+
100
+ # Provides helper methods for working with XML xpaths
101
+ module XPath
102
+ def find_element
103
+ FindElement
104
+ end
105
+
106
+ # Implements class methods to help with finding elements via XPath
107
+ class FindElement
108
+ def self.xpath(element, path)
109
+ elem = namespace_safe_xpath(element, path)
110
+ return named_xpath(element, path) if elem.nil?
111
+
112
+ elem
113
+ end
114
+
115
+ def self.at_xpath(element, path)
116
+ elem = namespace_safe_at_xpath(element, path)
117
+ return named_at_xpath(element, path) if elem.nil?
118
+
119
+ elem
120
+ end
121
+
122
+ def self.namespace_safe_xpath(element, path)
123
+ element.xpath(path)
124
+ rescue Nokogiri::XML::XPath::SyntaxError
125
+ named_xpath(element, path)
126
+ end
127
+
128
+ def self.namespace_safe_at_xpath(element, path)
129
+ element.at_xpath(path)
130
+ rescue Nokogiri::XML::XPath::SyntaxError
131
+ named_at_xpath(element, path)
132
+ end
133
+
134
+ def self.named_xpath(element, path)
135
+ element.xpath("*[name()='#{path}']")
136
+ end
137
+
138
+ def self.named_at_xpath(element, path)
139
+ element.at_xpath("*[name()='#{path}']")
140
+ end
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end
146
+ end
@@ -3,6 +3,7 @@
3
3
  require 'digest'
4
4
  require_relative './objects/digest_object'
5
5
  require_relative './objects/numbered_object'
6
+ require_relative './helpers'
6
7
 
7
8
  module AbideDevUtils
8
9
  module XCCDF
@@ -12,6 +13,9 @@ module AbideDevUtils
12
13
  # Base class for XCCDF element objects
13
14
  class ElementBase
14
15
  include AbideDevUtils::XCCDF::Parser::Objects::DigestObject
16
+ include AbideDevUtils::XCCDF::Parser::Helpers::ElementChildren
17
+ include AbideDevUtils::XCCDF::Parser::Helpers::XPath
18
+ extend AbideDevUtils::XCCDF::Parser::Helpers::XPath
15
19
  attr_reader :children, :child_labels, :link_labels
16
20
 
17
21
  def initialize(*_args, **_kwargs)
@@ -25,12 +29,21 @@ module AbideDevUtils
25
29
 
26
30
  # For subclasses that are associated with a specific
27
31
  # XCCDF element, this method returns the element's
28
- # xpath. Must be overridden by subclasses that
32
+ # xpath name. Must be overridden by subclasses that
29
33
  # implement this method.
30
34
  def self.xpath
31
35
  nil
32
36
  end
33
37
 
38
+ # For subclasses that are associated with a specific
39
+ # XCCDF element that has valid namespace prefix,
40
+ # this method returns that namespaces. May be
41
+ # overridden by subclasses if they have a different
42
+ # valid namespace prefix.
43
+ def self.xmlns
44
+ 'xccdf'
45
+ end
46
+
34
47
  # Takes the last segment of the class name, splits on captial letters,
35
48
  # and returns a downcased string joined by dashes. This gives us the
36
49
  # XCCDF element type. Example: 'AbideDevUtils::XCCDF::Parser::Objects::ComplexCheck'
@@ -66,6 +79,8 @@ module AbideDevUtils
66
79
  found
67
80
  end
68
81
  @label_method_values[label_str]
82
+ elsif search_children.respond_to?(method_name)
83
+ search_children.send(method_name, *args, &block)
69
84
  else
70
85
  super
71
86
  end
@@ -93,83 +108,6 @@ module AbideDevUtils
93
108
  @label
94
109
  end
95
110
 
96
- def recursive_select_children(children_to_search = children, &block)
97
- search_hits = []
98
- children_to_search.each do |child|
99
- found = yield child
100
- if found
101
- search_hits << child
102
- elsif child.respond_to?(:children)
103
- search_hits << recursive_select_children(child.children, &block)
104
- end
105
- end
106
- search_hits.flatten.compact.uniq
107
- end
108
-
109
- def recursive_find_child(children_to_search = children, &block)
110
- rescursive_select_children(children_to_search, &block).first
111
- end
112
-
113
- def find_children_that_respond_to(method, recurse: false)
114
- return recursive_select_children { |child| child.respond_to?(method) } if recurse
115
-
116
- children.select { |c| c.respond_to?(method.to_sym) }
117
- end
118
-
119
- def find_children_by_class(klass, recurse: false)
120
- return recursive_select_children { |child| child.instance_of?(klass) } if recurse
121
-
122
- children.select { |child| child.instance_of?(klass) }
123
- end
124
-
125
- def find_child_by_class(klass, recurse: false)
126
- return recursive_find_child { |child| child.is_a?(klass) } if recurse
127
-
128
- find_children_by_class(klass).first
129
- end
130
-
131
- def find_children_by_xpath(xpath, recurse: false)
132
- return recursive_select_children { |child| child.xpath == xpath } if recurse
133
-
134
- children.select { |child| child.xpath == xpath }
135
- end
136
-
137
- def find_child_by_xpath(xpath, recurse: false)
138
- return recursive_find_child { |child| child.xpath == xpath } if recurse
139
-
140
- find_children_by_xpath(xpath).first
141
- end
142
-
143
- def find_children_by_attribute(attribute, recurse: false)
144
- pr = proc do |child|
145
- next unless child.instance_of?(AbideDevUtils::XCCDF::Parser::Objects::AttributeValue)
146
-
147
- child.attribute == attribute
148
- end
149
- return recursive_select_children(&pr) if recurse
150
-
151
- children.select(&pr)
152
- end
153
-
154
- def find_child_by_attribute(attribute, recurse: false)
155
- find_children_by_attribute(attribute, recurse: recurse).first
156
- end
157
-
158
- def find_children_by_attribute_value(attribute, value, recurse: false)
159
- pr = proc do |child|
160
- next unless child.instance_of?(AbideDevUtils::XCCDF::Parser::Objects::AttributeValue)
161
-
162
- child.attribute == attribute && child.value == value
163
- end
164
- return recursive_select_children(&pr) if recurse
165
-
166
- children.select(&pr)
167
- end
168
-
169
- def find_child_by_attribute_value(attribute, value, recurse: false)
170
- find_children_by_attribute_value(attribute, value, recurse: recurse).first
171
- end
172
-
173
111
  def add_link(object)
174
112
  @links << object
175
113
  @link_labels << object.label unless @link_labels.include?(object.label)
@@ -187,22 +125,10 @@ module AbideDevUtils
187
125
  default
188
126
  end
189
127
 
190
- def namespace_safe_xpath(element, path)
191
- element.xpath(path)
192
- rescue Nokogiri::XML::XPath::SyntaxError
193
- element.xpath("*[name()='#{path}']")
194
- end
195
-
196
- def namespace_safe_at_xpath(element, path)
197
- element.at_xpath(path)
198
- rescue Nokogiri::XML::XPath::SyntaxError
199
- element.at_xpath("*[name()='#{path}']")
200
- end
201
-
202
128
  def add_child(klass, element, *args, **kwargs)
203
129
  return if element.nil?
204
130
 
205
- real_element = klass.xpath.nil? ? element : namespace_safe_at_xpath(element, klass.xpath)
131
+ real_element = klass.xpath.nil? ? element : find_element.at_xpath(element, klass.xpath)
206
132
  return if real_element.nil?
207
133
 
208
134
  obj = new_object(klass, real_element, *args, **kwargs)
@@ -219,7 +145,7 @@ module AbideDevUtils
219
145
  def add_children(klass, element, *args, **kwargs)
220
146
  return if element.nil?
221
147
 
222
- real_elements = klass.xpath.nil? ? element : namespace_safe_xpath(element, klass.xpath)
148
+ real_elements = klass.xpath.nil? ? element : find_element.xpath(element, klass.xpath)
223
149
  return if real_elements.nil?
224
150
 
225
151
  real_elements.each do |e|
@@ -294,11 +220,11 @@ module AbideDevUtils
294
220
  end
295
221
 
296
222
  def self.xpath
297
- 'xccdf:title'
223
+ 'title'
298
224
  end
299
225
 
300
226
  def to_s
301
- find_child_by_class(ShortText).to_s
227
+ search_children.find_child_by_class(ShortText).to_s
302
228
  end
303
229
  end
304
230
 
@@ -310,11 +236,11 @@ module AbideDevUtils
310
236
  end
311
237
 
312
238
  def self.xpath
313
- 'xccdf:description'
239
+ 'description'
314
240
  end
315
241
 
316
242
  def to_s
317
- find_child_by_class(LongText).to_s
243
+ search_children.find_child_by_class(LongText).to_s
318
244
  end
319
245
  end
320
246
 
@@ -325,7 +251,7 @@ module AbideDevUtils
325
251
  def initialize(element)
326
252
  super
327
253
  add_child(AttributeValue, element, 'id')
328
- @id = find_child_by_attribute('id').value.to_s
254
+ @id = search_children.find_child_by_attribute('id').value.to_s
329
255
  end
330
256
 
331
257
  def to_s
@@ -340,7 +266,7 @@ module AbideDevUtils
340
266
  def initialize(element)
341
267
  super
342
268
  add_child(AttributeValue, element, 'idref')
343
- @idref = find_child_by_attribute('idref').value.to_s
269
+ @idref = search_children.find_child_by_attribute('idref').value.to_s
344
270
  end
345
271
 
346
272
  def to_s
@@ -356,7 +282,7 @@ module AbideDevUtils
356
282
  end
357
283
 
358
284
  def self.xpath
359
- 'xccdf:select'
285
+ 'select'
360
286
  end
361
287
  end
362
288
 
@@ -378,7 +304,7 @@ module AbideDevUtils
378
304
  end
379
305
 
380
306
  def self.xpath
381
- 'xccdf:Profile'
307
+ 'Profile'
382
308
  end
383
309
  end
384
310
 
@@ -389,7 +315,7 @@ module AbideDevUtils
389
315
 
390
316
  def initialize(element)
391
317
  super
392
- @number = to_s[/group_([0-9]+\.)+[0-9]+|group_([0-9]+)/].gsub(/group_/, '')
318
+ @number = to_s[/group_([0-9]+\.)+[0-9]+|group_([0-9]+)/]&.gsub(/group_/, '')
393
319
  add_child(Title, element)
394
320
  add_child(Description, element)
395
321
  add_children(Group, element)
@@ -397,7 +323,7 @@ module AbideDevUtils
397
323
  end
398
324
 
399
325
  def self.xpath
400
- 'xccdf:Group'
326
+ 'Group'
401
327
  end
402
328
  end
403
329
 
@@ -410,11 +336,11 @@ module AbideDevUtils
410
336
  end
411
337
 
412
338
  def self.xpath
413
- 'xccdf:check-export'
339
+ 'check-export'
414
340
  end
415
341
 
416
342
  def to_s
417
- [find_child_by_attribute('export-name').to_s, find_child_by_attribute('value-id').to_s].join('|')
343
+ [search_children.find_child_by_attribute('export-name').to_s, search_children.find_child_by_attribute('value-id').to_s].join('|')
418
344
  end
419
345
  end
420
346
 
@@ -427,11 +353,11 @@ module AbideDevUtils
427
353
  end
428
354
 
429
355
  def self.xpath
430
- 'xccdf:check-content-ref'
356
+ 'check-content-ref'
431
357
  end
432
358
 
433
359
  def to_s
434
- [find_child_by_attribute('href').to_s, find_child_by_attribute('name').to_s].join('|')
360
+ [search_children.find_child_by_attribute('href').to_s, search_children.find_child_by_attribute('name').to_s].join('|')
435
361
  end
436
362
  end
437
363
 
@@ -445,7 +371,7 @@ module AbideDevUtils
445
371
  end
446
372
 
447
373
  def self.xpath
448
- 'xccdf:check'
374
+ 'check'
449
375
  end
450
376
  end
451
377
 
@@ -484,7 +410,7 @@ module AbideDevUtils
484
410
  end
485
411
 
486
412
  def self.xpath
487
- 'xccdf:ident'
413
+ 'ident'
488
414
  end
489
415
 
490
416
  def to_s
@@ -503,7 +429,7 @@ module AbideDevUtils
503
429
  end
504
430
 
505
431
  def self.xpath
506
- 'xccdf:complex-check'
432
+ 'complex-check'
507
433
  end
508
434
  end
509
435
 
@@ -514,18 +440,24 @@ module AbideDevUtils
514
440
  add_child(ShortText, element['title'])
515
441
  add_child(ShortText, element['urn'])
516
442
  new_implementation_groups(element)
517
- add_child(ShortText, namespace_safe_at_xpath(element, 'controls:asset_type').text)
518
- add_child(ShortText, namespace_safe_at_xpath(element, 'controls:security_function').text)
443
+ add_child(ShortText, find_element.at_xpath(element, 'asset_type').text)
444
+ add_child(ShortText, find_element.at_xpath(element, 'security_function').text)
519
445
  end
520
446
 
521
447
  def self.xpath
522
- 'controls:safeguard'
448
+ 'safeguard'
449
+ end
450
+
451
+ def self.xmlns
452
+ 'controls'
523
453
  end
524
454
 
525
455
  private
526
456
 
527
457
  def new_implementation_groups(element)
528
- igroup = namespace_safe_at_xpath(element, 'controls:implementation_groups')
458
+ igroup = find_element.at_xpath(element, 'implementation_groups')
459
+ return if igroup.nil? || igroup.empty?
460
+
529
461
  add_child(ShortText, igroup['ig1']) if igroup['ig1']
530
462
  add_child(ShortText, igroup['ig2']) if igroup['ig2']
531
463
  add_child(ShortText, igroup['ig3']) if igroup['ig3']
@@ -541,7 +473,11 @@ module AbideDevUtils
541
473
  end
542
474
 
543
475
  def self.xpath
544
- 'controls:framework'
476
+ 'framework'
477
+ end
478
+
479
+ def self.xmlns
480
+ 'controls'
545
481
  end
546
482
  end
547
483
 
@@ -549,15 +485,22 @@ module AbideDevUtils
549
485
  class MetadataCisControls < ElementBase
550
486
  def initialize(element, parent: nil)
551
487
  super
552
- add_child(AttributeValue, element, 'xmlns:controls')
488
+ add_child(AttributeValue, element, 'controls')
553
489
  add_children(MetadataCisControlsFramework, element)
554
490
  end
555
491
 
556
492
  def self.xpath
557
- 'controls:cis_controls'
493
+ 'cis_controls'
494
+ end
495
+
496
+ def self.xmlns
497
+ 'controls'
558
498
  end
559
499
  end
560
500
 
501
+ # class MetadataNotes < ElementBase
502
+ # def initialize()
503
+
561
504
  # Class for XCCDF rule metadata element
562
505
  class Metadata < ElementBase
563
506
  def initialize(element, parent: nil)
@@ -566,7 +509,7 @@ module AbideDevUtils
566
509
  end
567
510
 
568
511
  def self.xpath
569
- 'xccdf:metadata'
512
+ 'metadata'
570
513
  end
571
514
  end
572
515
 
@@ -582,7 +525,7 @@ module AbideDevUtils
582
525
  end
583
526
 
584
527
  def self.xpath
585
- 'xccdf:rationale'
528
+ 'rationale'
586
529
  end
587
530
 
588
531
  def to_s
@@ -598,15 +541,15 @@ module AbideDevUtils
598
541
  end
599
542
 
600
543
  def digest
601
- @digest ||= find_child_by_class(LongText).digest
544
+ @digest ||= search_children.find_child_by_class(LongText).digest
602
545
  end
603
546
 
604
547
  def self.xpath
605
- 'xccdf:fixtext'
548
+ 'fixtext'
606
549
  end
607
550
 
608
551
  def to_s
609
- find_child_by_class(LongText).to_s
552
+ search_children.find_child_by_class(LongText).to_s
610
553
  end
611
554
  end
612
555
 
@@ -632,7 +575,7 @@ module AbideDevUtils
632
575
  end
633
576
 
634
577
  def self.xpath
635
- 'xccdf:Rule'
578
+ 'Rule'
636
579
  end
637
580
  end
638
581
 
@@ -644,15 +587,15 @@ module AbideDevUtils
644
587
  add_child(AttributeValue, element, 'type')
645
588
  add_child(Title, element)
646
589
  add_child(Description, element)
647
- add_child(ShortText, element.at_xpath('xccdf:value'))
590
+ add_child(ShortText, find_element.at_xpath(element, 'value'))
648
591
  end
649
592
 
650
593
  def self.xpath
651
- 'xccdf:Value'
594
+ 'Value'
652
595
  end
653
596
 
654
597
  def to_s
655
- find_child_by_class(Title).to_s
598
+ search_children.find_child_by_class(Title).to_s
656
599
  end
657
600
  end
658
601
 
@@ -665,13 +608,13 @@ module AbideDevUtils
665
608
  end
666
609
 
667
610
  def self.xpath
668
- 'xccdf:status'
611
+ 'status'
669
612
  end
670
613
 
671
614
  def to_s
672
615
  [
673
- "Status:#{find_child_by_class(ShortText)}",
674
- "Date:#{find_child_by_class(AttributeValue)}",
616
+ "Status:#{search_children.find_child_by_class(ShortText)}",
617
+ "Date:#{search_children.find_child_by_class(AttributeValue)}",
675
618
  ].join('|')
676
619
  end
677
620
  end
@@ -684,11 +627,11 @@ module AbideDevUtils
684
627
  end
685
628
 
686
629
  def self.xpath
687
- 'xccdf:version'
630
+ 'version'
688
631
  end
689
632
 
690
633
  def to_s
691
- find_child_by_class(ShortText).to_s
634
+ search_children.find_child_by_class(ShortText).to_s
692
635
  end
693
636
  end
694
637
 
@@ -700,11 +643,11 @@ module AbideDevUtils
700
643
  end
701
644
 
702
645
  def self.xpath
703
- 'xccdf:platform'
646
+ 'platform'
704
647
  end
705
648
 
706
649
  def to_s
707
- find_child_by_class(AttributeValue).to_s
650
+ search_children.find_child_by_class(AttributeValue).to_s
708
651
  end
709
652
  end
710
653
 
@@ -714,25 +657,25 @@ module AbideDevUtils
714
657
 
715
658
  def initialize(element)
716
659
  super
717
- element = element.at_xpath('xccdf:Benchmark')
718
- raise 'No Benchmark element found' if element.nil?
660
+ elem = find_element.at_xpath(element, 'Benchmark')
661
+ raise 'No Benchmark element found' if elem.nil?
719
662
 
720
- add_child(Status, element)
721
- add_child(Title, element)
722
- add_child(Description, element)
723
- add_child(Platform, element)
724
- add_child(Version, element)
725
- add_children(Profile, element)
726
- add_children(Group, element)
727
- add_children(Value, element)
663
+ add_child(Status, elem)
664
+ add_child(Title, elem)
665
+ add_child(Description, elem)
666
+ add_child(Platform, elem)
667
+ add_child(Version, elem)
668
+ add_children(Profile, elem)
669
+ add_children(Group, elem)
670
+ add_children(Value, elem)
728
671
  end
729
672
 
730
673
  def self.xpath
731
- 'xccdf:Benchmark'
674
+ 'Benchmark'
732
675
  end
733
676
 
734
677
  def to_s
735
- [find_child_by_class(Title).to_s, find_child_by_class(Version).to_s].join(' ')
678
+ [search_children.find_child_by_class(Title).to_s, search_children.find_child_by_class(Version).to_s].join(' ')
736
679
  end
737
680
  end
738
681
  end
@@ -9,6 +9,7 @@ module AbideDevUtils
9
9
  module Parser
10
10
  def self.parse(file_path)
11
11
  doc = AbideDevUtils::Files::Reader.read(file_path)
12
+ doc.remove_namespaces!
12
13
  benchmark = AbideDevUtils::XCCDF::Parser::Objects::Benchmark.new(doc)
13
14
  Linker.resolve_links(benchmark)
14
15
  benchmark
@@ -24,6 +25,8 @@ module AbideDevUtils
24
25
  end
25
26
 
26
27
  def self.link_profile_rules(benchmark)
28
+ return unless benchmark.respond_to?(:profile)
29
+
27
30
  rules = benchmark.find_children_by_class(AbideDevUtils::XCCDF::Parser::Objects::Rule, recurse: true)
28
31
  benchmark.profile.each do |profile|
29
32
  profile.xccdf_select.each do |sel|
@@ -36,6 +39,8 @@ module AbideDevUtils
36
39
  end
37
40
 
38
41
  def self.link_rule_values(benchmark)
42
+ return unless benchmark.respond_to?(:value)
43
+
39
44
  rules = benchmark.find_children_by_class(AbideDevUtils::XCCDF::Parser::Objects::Rule, recurse: true)
40
45
  benchmark.value.each do |value|
41
46
  rules.each do |rule|