Prty::ContentProcessor::Type - Entität
Prty::ContentProcessor::BaseType
Diese Klasse ist die Basisklasse für alle Plugin-Klassen, die im ContentProcessor mit registerType() definiert werden.
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.
ContentAllowed
Attributes
Name
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> ); }
Die Basisklassenmethode erweitert das Objekt um grundlegende Informationen und Verküpfungen:
Referenz auf die Processor-Instanz. Diese gibt der Entität u.a. Zugriff auf alle anderen Entitäten.
Referenz auf die Plugin-Definition. Diese wird von der Methode entityId() herangezogen um die Entity-Id zu generieren.
Der gesamte Quelltext der Entität, wenn es sich um eine Datei-Entität [] handelt. Bei Sub-Entitäten () ein Leerstring.
Attribut, das anzeigt, ob die Entität Programmcode repräsentiert und im Änderungsfall getestet werden kann.
Ferner implementiert die Basisklasse folgende Methoden, die überschrieben werden können:
Liefert den eindeutigen Entitätsbezeichner. Die Basisklassenmethode setzt diesen aus dem Typ-Bezeichner und den Werten der @keyVal-Liste des Plugins zusammen. Kann überschrieben werden, wenn der Entitätsbezeichner anders gebildet werden soll.
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.
Name:
Oder überschrieben werden müssen:
Liefert die Liste aller Ausgabe-Datei-Objekte der Entität. Die Basisklassenmethode liefert eine leere Liste. Die Methode wird überschrieben.
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 liefert undef. Die Methode wird überschrieben.
testable
undef
$ent = $class->create($sec,$cop,$plg,@keyVal);
Referenz auf Abschnitts-Objekt.
Referenz auf ContentProcessor-Objekt.
Referenz auf Plugin-Definition.
Attribute, die der Entität hinzugefügt werden.
Zur Entität geblesstes Abschnitts-Objekt.
Erweitere Abschnitts-Objekt $sec und blesse es zu einer Entität.
$entityId = $ent->entityId;
Liefere einen eindeutigen Bezeichner für die Entität.
$entityType = $ent->entityType;
Entitäts-Typ (String)
Liefere den Typ der Entität, wie er bei der bei der Registrierung der Entitäts-Klasse angegeben wurde.
$name = $ent->name;
Liefere den Namen der Entität. Dies ist der Wert des Attributs Name:, bereinigt um Besonderheiten:
ein Sigil am Namensanfang (z.B. @@) wird entfernt
@@
Gleichheitszeichen (=) innerhalb des Namens (z.B. bei Klassen) werden durch einen Slash (/) ersetzt
=
/
$file = $ent->entityFile; $file = $ent->entityFile($dir);
Verzeichnis, in dem sich die Datei befindet oder in das sie geschrieben wird.
Dateiname
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.
$source = $ent->fileSource;
Quelltext (String)
Liefere den gesamten Quelltext der Entität, wie er in der Enttitätsdatei steht, einschließlich des Quelltexts der Sub-Entitäten.
$sourceR = $ent->fileSourceRef;
Referenz auf Quelltext
Wie $ent->"fileSource"(), nur dass eine Referenz auf den Quelltext geliefert wird.
$ent->appendFileSource($sec);
nichts
Ergänze Attribut fileSource um den Quelltext des Abschnitts $sec.
$str = $ent->pureCode;
@files = $ent->outputFiles;
Liefere die Liste der Dateien, die die Entität generiert. Diese Basisklassenmethode liefert eine leere Liste. Sie wird in Subklassen überschrieben.
$needsTest = $ent->needsTest; $needsTest = $ent->needsTest($state);
Test-Status, der gesetzt wird.
Test-Status der Entität
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:
Nichts zu tun. Die Entität braucht nicht getestet werden.
Der Code der Entität hat sich geändert. Die Entität und alle abhängigen Entitäten müssen getestet werden.
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.
$needsUpdate = $ent->needsUpdate; $needsUpdate = $ent->needsUpdate($state);
Änderungs-Status, der gesetzt wird.
Änderungs-Status der Entität
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:
Nichts zu tun. Die Entität wurde nicht geändert.
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.
1.127
Frank Seitz, http://fseitz.de/
Copyright (C) 2019 Frank Seitz
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Prty, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Prty
CPAN shell
perl -MCPAN -e shell install Prty
For more information on module installation, please visit the detailed CPAN module installation guide.