The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Prty::ContentProcessor::Type - Basisklasse für Entitäts-Typen

BASE CLASS

Prty::ContentProcessor::BaseType

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.

fileSource

Der gesamte Quelltext der Entität, wenn es sich um eine Datei-Entität [] handelt. Bei Sub-Entitäten () ein Leerstring.

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

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 liefert undef. 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

$dir

Verzeichnis, in dem sich die Datei befindet oder in das sie geschrieben wird.

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 Ausgabedateien

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.

fileSource() - Gesamter Quelltext

Synopsis

    $source = $ent->fileSource;

Description

Liefere den gesamten Quelltext der Entität, wie er in der Enttitätsdatei steht, einschließlich des Quelltexts der Sub-Entitäten.

Returns

Quelltext (String)

fileSourceRef() - Referenz auf gesamten Quelltext

Synopsis

    $sourceR = $ent->fileSourceRef;

Description

Wie $ent->"fileSource"(), nur dass eine Referenz auf den Quelltext geliefert wird.

Returns

Referenz auf Quelltext

appendFileSource() - Ergänze Quelltext

Synopsis

    $ent->appendFileSource($sec);

Description

Ergänze Attribut fileSource um den Quelltext des Abschnitts $sec.

Returns

nichts

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 entfernt

  • Gleichheitszeichen (=) 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

$state

Test-Status, der gesetzt wird.

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

$state

Änderungs-Status, der gesetzt wird.

Returns

Änderungs-Status der Entität

VERSION

1.119

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.