# File lib/openscap/xccdf/item.rb, line 21 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
# File lib/openscap/xccdf/item.rb, line 35 def initialize(t) if self.class == OpenSCAP::Xccdf::Item raise OpenSCAP::OpenSCAPError, "Cannot initialize #{self.class.name} abstract base class." end @raw = t end
# File lib/openscap/xccdf/item.rb, line 53 def description(prefered_lang = nil) textlist = OpenSCAP::TextList.new(OpenSCAP.xccdf_item_get_description(@raw)) description = textlist.plaintext(prefered_lang) textlist.destroy description end
# File lib/openscap/xccdf/item.rb, line 82 def destroy OpenSCAP.xccdf_item_free @raw @raw = nil end
# File lib/openscap/xccdf/item.rb, line 42 def id OpenSCAP.xccdf_item_get_id @raw end
# File lib/openscap/xccdf/item.rb, line 60 def rationale(prefered_lang = nil) textlist = OpenSCAP::TextList.new(OpenSCAP.xccdf_item_get_rationale(@raw)) rationale = textlist.plaintext(prefered_lang) textlist.destroy rationale end
# File lib/openscap/xccdf/item.rb, line 67 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
# File lib/openscap/xccdf/item.rb, line 78 def sub_items @sub_items ||= sub_items_init end
# File lib/openscap/xccdf/item.rb, line 46 def title(prefered_lang = nil) textlist = OpenSCAP::TextList.new(OpenSCAP.xccdf_item_get_title(@raw)) title = textlist.plaintext(prefered_lang) textlist.destroy title end
# File lib/openscap/xccdf/item.rb, line 89 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