class ALD::Definition
Public: Access information in ALD
package definition files.
Constants
- SCHEMA_FILE
Internal: Path to the file containing the XML Schema
Definition
used for definition validation.- TOPLEVEL_ATTRIBUTES
Internal: The array of attributes which are defined in the root element of a definition. Each of these gets a dynamically defined method.
- XML_NAMESPACE
Internal: The XML namespace used by the definitions.
Public Class Methods
Public: Open a new definition file for analysis.
source - the source to read the definition from. This can be a
Nokogiri::XML::Document, a String or any object that responds to #read and #close.
Examples
definition = ALD::Definition.new('/path/to/def.xml')
Raises ALD::InvalidDefinitionError
if the supplied source is not a valid ALD
package definition.
# File lib/ALD/definition.rb, line 99 def initialize(source) if source.is_a? Nokogiri::XML::Document @document = source else @document = Nokogiri::XML(source) { |config| config.nonet } end raise InvalidDefinitionError unless valid? end
Internal: The XML Schema instance used for validation
Returns the Nokogiri::XML::Schema instance representing ::SCHEMA_FILE.
# File lib/ALD/definition.rb, line 17 def self.schema @schema ||= Nokogiri::XML::Schema(File.read(SCHEMA_FILE)) end
Public Instance Methods
Public: Get the defined item’s description.
Returns the description String.
# File lib/ALD/definition.rb, line 112 def description @document.xpath("//ald:description", 'ald' => XML_NAMESPACE)[0].text end
Public: Gets additional links this definition references
Returns an Array of Hashes, where each Hash has the keys ‘name’, ‘href’ and ‘description’-
# File lib/ALD/definition.rb, line 148 def links attribute_hash '//ald:links/ald:link', %w[name description href] end
Public: Get the XML string representing the definition
# File lib/ALD/definition.rb, line 162 def to_s @document.to_s end
Internal: Check if the definition is valid. Library consumers need not call this, as ::new
already does.
Returns true, if the definition is valid according to the schema, false otherwise.
# File lib/ALD/definition.rb, line 157 def valid? Definition.schema.valid?(@document) end
Private Instance Methods
Internal: Get an Array of attribute Hashes from a list of elements in the definition.
xpath - the XPath String pointing to the XML elements in the definition keys - the Array of keys to retrieve from the elements
Returns an Array of Hashes, where each Hash has all those of the given keys that were actual attributes on the relevant element.
# File lib/ALD/definition.rb, line 176 def attribute_hash(xpath, keys) @document.xpath(xpath, 'ald' => XML_NAMESPACE).map do |e| Hash[keys.map { |k| e.attribute_with_ns(k, XML_NAMESPACE) }.compact.map { |a| [a.node_name, a.value] }] end end