NAME
Prty::ContentProcessor::Type - Basisklasse für Entitäts-Typen
BASE CLASSES
DESCRIPTION
Diese Klasse ist die Basisklasse für alle Plugin-Klassen, die im ContentProcessor mit registerType() definiert werden.
Definition von Subklassen
Die Plugin-Klassen bilden eine Hierarchie von Klassen, an deren Spitze eine allgemeine, abstrakte Klasse steht (stehen sollte), die von der dieser Klasse abgeleitet ist:
package Yeah::Type;
use base qw/Prty::ContentProcessor::Type/;
__PACKAGE__->def(
ContentAllowed=>0,
Attributes=>[qw/
Name
/],
);
Ob der Abschnitt eines Typs einen Inhalt zulässt und welches die zulässigen Attribute sind, wird mit den Klassen-Attributen ContentAllowed
und Attributes
festgelegt. Obige Basisklassen-Definition vereinbart, dass per Default kein Content erlaubt ist und dass das Attribut Name
bei allen (Haupt-)Typen vorkommt.
Die abgeleiteten Klassen ergänzen die Attribut-Liste und überschreiben u.U. das ContentAllowed
-Attribut.
Die Methode "create"() erzeugt aus einem Abschnitts-Objekt eine Instanz des betreffenden Typs, eine sog. Entität, und setzt die für den ContentProcessor essentiellen Attribute (siehe Code der Methode). Die Methode wird in der Typ-Klasse überschrieben und von dort aus gerufen:
package Yeah::Type::Program::Shell;
use base qw/Yeah::Type::Program/;
__PACKAGE__->def(
Attributes=>[qw/
<Spezifische Attribute des Typs>
/],
);
sub create {
my ($class,$sec,$cop,$plg) = @_;
return $class->SUPER::create($sec,$cop,$plg,
<Eigenschaften der Entität>
);
}
Standard-Attribute
Die Basisklassenmethode erweitert das Objekt um grundlegende Informationen und Verküpfungen:
- processor
-
Referenz auf die Processor-Instanz. Diese gibt der Entität u.a. Zugriff auf alle anderen Entitäten.
- plugin
-
Referenz auf die Plugin-Definition. Diese wird von der Methode entityId() herangezogen um die Entity-Id zu generieren.
- testable
-
Attribut, das anzeigt, ob die Entität Programmcode repräsentiert und im Änderungsfall getestet werden kann.
Methoden
Ferner implementiert die Basisklasse folgende Methoden, die überschrieben werden können:
- entityId()
-
Liefert den eindeutigen Entitätsbezeichner. Die Basisklassenmethode setzt diesen aus dem Typ-Bezeichner und den Werten der @keyVal-Liste des Plugin zusammen. Kann überschrieben werden, wenn der Entitätsbezeichner anders gebildet werden soll.
- name()
-
Liefert den Namen der Entität. Die Basisklassenmethode erzeugt diesen durch geringfügige Änderungen aus dem Wert des Abschnitts-Attributs
Name:
. Kann überschrieben werden, wenn der Name anders hergeleitet werden soll.
oder überschrieben werden müssen
- addSubSection()
-
Ergänze die Entität um einen (Sub-)Abschnitt. Die Basisklassenmethode verarbeitet das Abschnitts-Objekt nicht. Die Methode wird überschrieben.
- files()
-
Liefert die Liste aller Ausgabe-Datei-Objekte der Entität. Die Basisklassenmethode liefert eine leere Liste. Die Methode wird überschrieben.
- pureCode()
-
Liefert bei einer testbaren Entität (s. Attribut
testable
) den Quelltext ohne Inline-Doku und Kommentare. Besteht der Quelltext aus mehreren Dateien (z.B. im Falle von C++), werden diese konkateniert geliefert, denn der Code muss nicht kompilierbar/ausführbar sein. Die Basisklassenmethode liefertundef
. Die Methode wird überschrieben.
METHODS
Erzeugung
create() - Wandele Abschnitts-Objekt in Entität
Synopsis
$ent = $class->create($sec,$cop,$plg,@keyVal);
Description
Erweitere Abschnitts-Objekt $sec und blesse es zu einer Entität.
Arguments
- $sec
-
Referenz auf Abschnitts-Objekt.
- $cop
-
Referenz auf ContentProcessor-Objekt.
- $plg
-
Referenz auf Plugin-Definition.
- @keyVal
-
Attribute, die der Entität hinzugefügt werden.
Returns
Zur Entität geblesstes Abschnitts-Objekt.
Objektmethoden
entityFile() - Dateiname der Entität
Synopsis
$file = $ent->entityFile;
$file = $ent->entityFile($dir);
Description
Liefere den Dateinamen der Entität. Dieser besteht aus der Entity-Id und der Entity-Extension. Wenn angegeben, wird diesem Dateinamen der Pfad $dir vorangestellt.
Arguments
Returns
Dateiname
entityId() - Eindeutiger Entitätsbezeichner
Synopsis
$entityId = $ent->entityId;
Description
Liefere einen eindeutigen Bezeichner für die Entität.
entityType() - Entitäts-Typ
Synopsis
$entityType = $ent->entityType;
Description
Liefere den Typ der Entität, wie er bei der bei der Registrierung der Entitäts-Klasse angegeben wurde.
Returns
Entitäts-Typ (String)
files() - Liste der Ausgebadateien
Synopsis
@files = $ent->files;
Description
Liefere die Liste der Dateien, die die Entität generiert. Diese Basisklassenmethode liefert eine leere Liste. Sie wird in Subklassen überschrieben.
name() - Name der Entität
Synopsis
$name = $ent->name;
Description
Liefere den Namen der Entität. Dies ist der Wert des Attributs Name:
, bereinigt um Besonderheiten:
ein Sigil am Namensanfang (z.B.
@@
) wird entferntGleichheitszeichen (
=
) innerhalb des Namens (z.B. bei Klassen) werden durch einen Slash (/
) ersetzt
pureCode() - Quelltext ohne Kommentare und Inline-Doku
Synopsis
$str = $ent->pureCode;
Intern
needsTest() - Liefere/Setze persistenten Test-Status
Synopsis
$needsTest = $ent->needsTest;
$needsTest = $ent->needsTest($state);
Description
Liefere/Setze den Test-Status der Entität $ent. Der Test-Status ist persistent und bleibt daher über Programmaufrufe hinweg erhalten.
Eine Entität besitzt einen von drei Test-Status:
- 0
-
Nichts zu tun. Die Entität braucht nicht getestet werden.
- 1
-
Der Code der Entität hat sich geändert. Die Entität und alle abhängigen Entitäten müssen getestet werden.
- 2
-
Nur die Entität selbst muss getestet werden. Die Entität selbst wurde nicht geändert, hängt aber von einer Entität ab, die geändert wurde, oder ihre Testdateien oder Testdaten wurden geändert, was keinen Test der abhängigen Entitäten erfordert.
Ohne Parameter aufgerufen, liefert die Methode den aktuellen Test-Status der Entität. Mit Parameter gerufen, setzt die Methode den Test-Status, wobei dieser persistent gespeichert wird.
Arguments
Returns
Test-Status der Entität
needsUpdate() - Liefere/Setze persistenten Änderungs-Status
Synopsis
$needsUpdate = $ent->needsUpdate;
$needsUpdate = $ent->needsUpdate($state);
Description
Liefere/Setze den Änderungs-Status der Entität $ent. Der Änderungs-Status ist persistent und bleibt daher über Programmaufrufe hinweg erhalten.
Eine Entität besitzt einen von zwei Änderungs-Status:
- 0
-
Nichts zu tun. Die Entität wurde nicht geändert.
- 1
-
Die Entitäts wurde geändert. Die Ausgabe-Dateien der Entität müssen neu generiert werden.
Ohne Parameter aufgerufen, liefert die Methode den aktuellen Änderungs-Status der Entität. Mit Parameter gerufen, setzt die Methode den Änderungs-Status, wobei dieser persistent gespeichert wird.
Arguments
Returns
Änderungs-Status der Entität
Intern
attributes() - Liste der zulässigen Abschnitts-Attribute
Synopsis
@attributes | $attributeA = $class->attributes;
Description
Ermittele die Liste der Namen der zulässigen Abschnitts-Attribute entlang der Klassenhierarchie und liefere diese zurück. Die Liste ist alphabetisch sortiert.
Returns
Liste der Namen der Abschnitts-Attribute. Im Skalar-Kontext wird eine Referenz auf die Liste geliefert.
contentAllowed() - Inhalt im Abschnitt erlaubt?
Synopsis
$bool = $class->contentAllowed;
Description
Ermittele, ob Abschnitte des Entitätstyps einen Inhalt haben dürfen. Wenn ja, liefert die Methode 1, andernfalls 0.
Returns
Boolscher Wert
VERSION
1.106
AUTHOR
Frank Seitz, http://fseitz.de/
COPYRIGHT
Copyright (C) 2017 Frank Seitz
LICENSE
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
3 POD Errors
The following errors were encountered while parsing the POD:
- Around line 465:
Expected text after =item, not a number
- Around line 470:
Expected text after =item, not a number
- Around line 541:
Expected text after =item, not a number