Abstract base class of all nodes in a configuration spec tree. Item is the base class for all of Section (collection) Value (an individual value).
Objects of this class are intended to form a tree with references in both directions, circular references ahead.
IMPORTANT: there are some naming conventions for fields that apply to all subclasses of this class:ObjectMethod
set(@what) / set(%what) @what
array of key-value pairs for attributes to set e.g. set(typename=> 'BLAH'). The array may be interpreted as a hash, so must be even-sized.
Note that all internal fields of this class use a leading underscore naming convention, while all dynamically-read attributes are all upper case with no leading underscore.
Note that the global $RAW_VALS=1 will supress calling of the parsers responsible to expanding attribute values.
When the same option is set twice in the parameters, the second value will take precedence. This allows the caller to declare defaults early in the list before appending options from other sources.ObjectMethod
clear(%what) set
.
ObjectMethod
append($key, $str) Concatenate $str to the string value of $key.
ObjectMethod
hasDeep($attrname) → $boolean Determine if this item (or any sub-item if this is a collection) has the given boolean attribute
ObjectMethod
getAllValueKeys() → @list Return a list of all the keys for value objects under this node.
ObjectMethod
find_also_dependencies([$root]) Find 'also' dependencies by scanning values.
'also' dependencies are checker dependencies that are inferred from the values of DISPLAY_IF and ENABLE_IF attributes. Some 'also' dependencies may 'also' be explicitly declared in the CHECK clause of an item.
'also' dependencies are used to trigger checks of other items when the value of an item they depend on changes.
$root
- root used to getValueObject for keys found
ObjectMethod
getPath() → @list Get the path down to a configuration item. The path is a list of titles (headlines and keys).
ObjectMethod
unparent() Unparent a configuration item. This only clears the parent of the node, it does not remove the node from the parent. After removing parents only the top-down structure remains, and methods that use the parent, such as getPath, will not work any more, so use with great caution.
The main purpose of this method is to prepare a spec node for isolated use (e.g. serialisation).
ObjectMethod
prune($depth) Prunes the subtree under $this to a maximum depth of $depth, discarding children under that point.
$depth = 0 will prune immediate children $depth = 1 will prune children-of-children
etc.
ObjectMethod
getSectionObject($head, $depth) → $item This gets the section object that has the heading $head and $this→{depth} == $depth below this item. If $depth is not given, will return the first headline that matches.
Subclasses must provide an implementation.
parent
to look up the
tree, and depth
to match the depth (the spec root is at depth 0).
An empty search matches the first thing found. If there are search terms, then the entire subtree is searched, but the shallowest matching node is returned. All search terms must be matched.
ObjectMethod
find(\%match) → @nodes Get a list of nodes that match the given search template. The template is a node structure with a subset of fields filled in that must be matched in a node for it to be returned.
Any fields can be used in searches and will match using eq, for example:headline
- title of a section,
typename
- type of a leaf spec entry,
keys
- keys of a spec entry,
desc
- descriptive text of a section or entry.
depth
- matches the depth of a node under the root (which is depth 0)
parent
- a structure that will be used to match a parent (the value should be another match hash that will match the parent),
ObjectMethod
search($re) → @nodes Get a list of nodes that match the given RE. Sections match on the headline, Values on the keys.
ObjectMethod
promoteSetting($setting) → $boolean ObjectMethod
getValueObject($keys) → $value Subclasses must define this method.
ObjectMethod
visit($visitor) → $boolean The default implementation just visits this item, and returns 1 if both the startVisit and the endVisit returned true.