abide_dev_utils 0.11.0 → 0.11.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -14
  3. data/lib/abide_dev_utils/cem/benchmark.rb +330 -136
  4. data/lib/abide_dev_utils/cem/generate/coverage_report.rb +380 -0
  5. data/lib/abide_dev_utils/cem/generate/reference.rb +157 -33
  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 +51 -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 +3 -0
  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|