module OpenscapParser::Subs

Public Class Methods

included(base) click to toggle source
# File lib/openscap_parser/subs.rb, line 7
def self.included(base)
  base.class_eval do
    def subs
      return [] unless sub_nodes
      @subs ||= sub_nodes.map do |xml|
        Sub.new(parsed_xml: xml)
      end
    end

    def sub_nodes(xpath = './/sub')
      @sub_nodes ||= xpath_nodes(xpath)
    end

    def map_sub_nodes(children, set_values)
      children.map do |child|
        next child if child.name == 'text'
        next replace_sub(Sub.new(parsed_xml: child), set_values) if child.name == 'sub'
        child
      end
    end

    private

    def replace_sub(sub, set_values)
      set_value = set_values.find { |set_value| set_value.id == sub.id }
      return unless set_value
      set_value.parsed_xml.children.first
    end
  end
end

Public Instance Methods

map_sub_nodes(children, set_values) click to toggle source
# File lib/openscap_parser/subs.rb, line 20
def map_sub_nodes(children, set_values)
  children.map do |child|
    next child if child.name == 'text'
    next replace_sub(Sub.new(parsed_xml: child), set_values) if child.name == 'sub'
    child
  end
end
replace_sub(sub, set_values) click to toggle source
# File lib/openscap_parser/subs.rb, line 30
def replace_sub(sub, set_values)
  set_value = set_values.find { |set_value| set_value.id == sub.id }
  return unless set_value
  set_value.parsed_xml.children.first
end
sub_nodes(xpath = './/sub') click to toggle source
# File lib/openscap_parser/subs.rb, line 16
def sub_nodes(xpath = './/sub')
  @sub_nodes ||= xpath_nodes(xpath)
end
subs() click to toggle source
# File lib/openscap_parser/subs.rb, line 9
def subs
  return [] unless sub_nodes
  @subs ||= sub_nodes.map do |xml|
    Sub.new(parsed_xml: xml)
  end
end