class OpenSCAP::Xccdf::Item

Public Class Methods

build(t) click to toggle source
# File lib/openscap/xccdf/item.rb, line 12
def self.build(t)
  raise OpenSCAP::OpenSCAPError, "Cannot initialize #{self.class.name} with #{t}" \
    unless t.is_a?(FFI::Pointer)

  # This is Abstract base class that enables you to build its child
  case OpenSCAP.xccdf_item_get_type t
  when :group
    OpenSCAP::Xccdf::Group.new t
  when :rule
    OpenSCAP::Xccdf::Rule.new t
  else
    raise OpenSCAP::OpenSCAPError, "Unknown #{self.class.name} type: #{OpenSCAP.xccdf_item_get_type t}"
  end
end
new(t) click to toggle source
# File lib/openscap/xccdf/item.rb, line 27
def initialize(t)
  if self.class == OpenSCAP::Xccdf::Item
    raise OpenSCAP::OpenSCAPError, "Cannot initialize #{self.class.name} abstract base class."
  end

  @raw = t
end

Public Instance Methods

description(prefered_lang = nil) click to toggle source
# File lib/openscap/xccdf/item.rb, line 46
def description(prefered_lang = nil)
  textlist = OpenSCAP::TextList.new(OpenSCAP.xccdf_item_get_description(@raw))
  description = textlist.plaintext(prefered_lang)
  textlist.destroy
  description
end
destroy() click to toggle source
# File lib/openscap/xccdf/item.rb, line 75
def destroy
  OpenSCAP.xccdf_item_free @raw
  @raw = nil
end
id() click to toggle source
# File lib/openscap/xccdf/item.rb, line 35
def id
  OpenSCAP.xccdf_item_get_id @raw
end
rationale(prefered_lang = nil) click to toggle source
# File lib/openscap/xccdf/item.rb, line 53
def rationale(prefered_lang = nil)
  textlist = OpenSCAP::TextList.new(OpenSCAP.xccdf_item_get_rationale(@raw))
  rationale = textlist.plaintext(prefered_lang)
  textlist.destroy
  rationale
end
references() click to toggle source
# File lib/openscap/xccdf/item.rb, line 60
def references
  refs = []
  refs_it = OpenSCAP.xccdf_item_get_references(@raw)
  while OpenSCAP.oscap_reference_iterator_has_more refs_it
    ref = OpenSCAP::Xccdf::Reference.new(OpenSCAP.oscap_reference_iterator_next(refs_it))
    refs << ref
  end
  OpenSCAP.oscap_reference_iterator_free refs_it
  refs
end
sub_items() click to toggle source
# File lib/openscap/xccdf/item.rb, line 71
def sub_items
  @sub_items ||= sub_items_init
end
title(prefered_lang = nil) click to toggle source
# File lib/openscap/xccdf/item.rb, line 39
def title(prefered_lang = nil)
  textlist = OpenSCAP::TextList.new(OpenSCAP.xccdf_item_get_title(@raw))
  title = textlist.plaintext(prefered_lang)
  textlist.destroy
  title
end

Private Instance Methods

sub_items_init() click to toggle source
# File lib/openscap/xccdf/item.rb, line 82
def sub_items_init
  collect = {}
  items_it = OpenSCAP.xccdf_item_get_content @raw
  while OpenSCAP.xccdf_item_iterator_has_more items_it
    item_p = OpenSCAP.xccdf_item_iterator_next items_it
    item = OpenSCAP::Xccdf::Item.build item_p
    collect.merge! item.sub_items
    collect[item.id] = item
  end
  OpenSCAP.xccdf_item_iterator_free items_it
  collect
end