Prty::ContentProcessor - Prozessor für Abschnitts-Dateien
Prty::Hash
use Prty::ContentProcessor; $cop = Prty::ContentProcessor->new('.mytool'); $cop->registerType('MyTool::Program::Shell','.mprg','[Program]',Language=>'Shell'); ... $cop->load(@paths)->generate($dir)->test;
Ein Objekt der Klasse repräsentiert einen Prozessor für Entitäts-Dateien. Die Dateien bestehen aus einer Folge von Abschnitten, die von einem Abschnitts-Parser (s. Klasse Prty::Section::Parser) geparsed und zu Abschnitts-Objekten instantiiert werden.
Der Prozessor delegiert die Verarbeitung der Abschnitts-Objekte an die per registerType() registierten Entitäts-Klassen (Plugin-Schnittstelle). Diese bauen aus den Abschnitts-Objekten Entitäts-Strukturen auf, aus denen die Ausgabedateien generiert werden.
Der Umfang an Ausgaben wird mit der Konstruktor-Option -verbosity=>$level eingestellt. Default ist 1.
Die Methode msg() schreibt eine Ausgabe nach STDERR. Der erste Parameter gibt den Verbosity-Level an. Ist dieser größer als der eingestellte Verbosity-Level, unterbleibt die Ausgabe. Ist als Level 0 angegeben, erfolgt die Ausgabe immer:
$cop->msg(0,...);
Alle Entitäts-Definitionen im Storage in eine einzige Datei $file schreiben (z.B. für Refactoring):
$cop->load->join($file);
Alle Entitäts-Definitionen im Storage in eine Verzeichnisstruktur mit Wurzelverzeichnis $dir übertragen (z.B. um die Dateien einzeln zu editieren):
$cop->fetch->($dir);
Alle Entitäten im Storage vom Typ $type auflisten:
$cop->load; for my $ent ($cop->entities($type)) { $cop->msg(0,$ent->name); }
$cop = $class->new($storageDir,@opt);
Instantiiere ein ContentProcessor-Objekt und liefere eine Referenz auf dieses Objekt zurück.
Der Name des Storage-Verzeichnisses ohne Verzeichnisanteil, z.B. '.storage'.
Dateien, die der ContentProcessor verarbeitet. Hinzu kommen die Erweiterungen, die die per registerType() hinzugefügten Entitäts-Typen definieren. Die Extension wird ohne Punkt angegeben.
Erzeuge und initialisiere Storage.
Umfang der Laufzeit-Meldungen.
ContentProcessor-Objekt
$cop->registerType($pluginClass,$extension,$sectionType,@keyVal); $cop->registerType($pluginClass,$extension); # universelles Plugin
Registriere Plugin-Klasse $pluginClass für Abschnitts-Objekte mit Identifier $sectionType und den Eigenschaften @keyVal. Die Plugin-Klasse wird automatisch geladen, falls sie noch nicht vorhanden ist (sie kann für Tests also auch "inline" definiert werden).
Die Plugin-Definition wird intern auf einem Hash-Objekt gespeichert, das vom ContentProcessor mit den instantiierten Entitten verknüpft wird.
Ein Universelles Plugin kann definiert werden, indem nur $pluginClass und $extension angegeben werden. An diese Plugin-Klasse werden alle (Haupt-)Abschnitts-Objekte delegiert, für die kein Plugin definiert ist. Logischerweise kann es höchstens ein Universelles Plugin geben. Für ein Universelles Plugin findet keine Attribut-Validierung in der der Basisklassenmethode create() statt.
Name der Plugin-Klasse, z.B. 'Program::Shell'.
Datei-Erweiterung für Dateien dieses Typs, ohne Punkt, z.B. 'prg'.
Abschnitts-Bezeichner ohne Klammerung, z.B. 'Program'.
Abschnitts-Attribute, die über den Abschnitts-Bezeichner hinaus den Dateityp kennzeichnen, z.B. Language=>'Shell'.
nichts
$cop = $cop->commit;
Vergleiche die Entitäten gegen den Storage und übertrage die Veränderungen dorthin. Geänderte Entitäten werden in der in der Datenbank als geändert gekennzeichnet.
ContentProcessor-Objekt (für Method-Chaining)
$cop = $cop->generate($dir);
Generiere in Zielverzeichnis $dir die Ausgabe-Dateien aller Entitäten.
$cop = $cop->load; $cop = $cop->load(@paths);
Lade die Entitäts-Dateien der Pfade @paths. Ist @path leer, also kein Path angegeben, werden die Entitäts-Dateien aus dem Storage geladen.
Die Methode kann beliebig oft aufgerufen werden, aber nur der erste Aufruf lädt, alle weiteren Aufrufe sind Null-Operationen.
Liste der Verzeichnisse und Dateien. Pfad '-' bedeutet STDIN.
$cop = $cop->fetch($dir,$layout);
Übertrage alle Entitäts-Definitionen in Verzeichnis $dir (oder STDOUT, s.u.) gemäß dem Layout $layout. Per Differenzbildung wird dabei ein konsistenter Stand hergestellt. Existiert Verzeichnis $dir nicht, wird es angelegt. Andernfalls wird eine Rückfrage gestellt, ob das Verzeichnis überschrieben werden soll (siehe auch Option --overwrite).
Wird als Verzeichnis ein Bindestrich (-) angegeben, werden die Daten nach STDOUT geschrieben.
Die Methode bezieht die zu schreibenden Dateien von der Methode "fetchFiles"(), an die der Parameter $layout weiter gereicht wird. Die Methode kann in abgeleiteten Klassen überschrieben werden, um andere Strukturen zu generieren.
Verzeichnis, in das die Entitäts-Definitionen kopiert werden.
Bezeichnung für das Verzeichnis-Layout. Wird von der von fetchFiles() der Basisklasse nicht genutzt und daher hier nicht dokumentiert. Siehe Dokumentation bei den Subklassen.
Stelle keine Rückfrage, wenn Verzeichnis $dir bereits existiert.
$cop = $cop->test;
@entities | $entityA = $cop->entities; @entities | $entityA = $cop->entities($type);
Liefere die Liste aller geladenen Entities oder aller geladenen Entities vom Typ $type. Bei der Abfrage der Entities eines Typs werden die Entities nach Name sortiert geliefert.
Abschnitts-Typ.
Liste von Entitäten. Im Skalarkontext eine Referenz auf die Liste.
@files = $cop->fetchFiles; @files = $cop->fetchFiles($layout);
Liefere die Liste der Dateien, die von der Methode "fetch"() geschrieben werden. Jede Datei wird durch ein zweielementiges Array repräsentiert, bestehend aus einem Datei-Pfad und dem Datei-Inhalt. Der Datei-Inhalt kann als String oder String-Referenz angegeben sein.
Diese (Basisklassen-)Methode liefert für jede Entität die Datei-Definiton
[$ent->entityFile, $ent->sourceRef]
Damit erzeugt die Methode fetch() die gleiche Struktur wie der ContentProcessor im Storage-Verzeichnis def.
Die Methode kann in abgeleiteten Klassen überschrieben werden, um die Verzeichnisstruktur zu ändern und/oder den Inhalt der Dateien anders zusammenzustellen (z.B. mehrere Entity-Definitionen in einer Datei zusammenzufassen). In abgeleiteten Klassen können verschiedene Layouts können durch das Argument $layout unterschieden werden.
Array mit zweielementigen Arrays
$str = $cop->info;
Liefere eine Informationszeile mit statistischen Informationen, die am Ende der Verarbeitung ausgegeben werden kann.
Zeichenkette
@types | $typeA = $cop->entityTypes;
Liefere die Liste der Abschnitts-Typen, die per registerType() registriert wurden.
Liste von Abschnitts-Typen. Im Skalarkontext eine Referenz auf die Liste.
$regex = $cop->extensionRegex;
Liefere den regulären Ausdruck, der die Dateinamen matcht, die vom ContentProcessor verarbeitet werden. Der Regex wird genutzt, wenn ein Verzeichnis nach Eingabe-Dateien durchsucht wird.
kopilierter Regex
@files | $fileA = $cop->findFiles($dir);
Das Verzeichnis, das nach Dateien durchsucht wird
Liste der Datei-Pfade. Im Skalarkontext eine Referenz auf die Liste.
$cop->msg($level,$msg);
Text, der ausgegeben werden soll.
$plg = $cop->plugin($sec);
Ermittele das Plugin zu Abschnitts-Objekt $sec. Existiert kein Plugin zu dem Abschnitts-Objekt, liefere undef.
undef
Abschnitts-Objekt
Plugin-Objekt
$state = $cop->state($ent); $state = $cop->state($ent,$state);
Liefere/Setze den persistenten Status der Entität $ent. Der Entitäts-Status ist persistent und bleibt daher über Programmaufrufe hinweg erhalten.
Eine Entität besitzt einen von vier Status:
Nichts zu tun. Die Entität wurde nicht geändert.
Die Entitäts-Datei wurde geändert. Die Ausgabe-Dateien der Entität müssen neu generiert 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 Zustand der Entität. Mit Parameter gerufen, setzt die Methode den Zustand, wobei dieser persistent gespeichert wird.
$h = $cop->stateDb;
Liefere eine Referenz auf den persistenten Hash, der den Status von Entitäten speichert.
$path = $cop->storage; $path = $cop->storage($subPath);
Liefere den Pfad des Storage, ggf. ergänzt um den Sub-Pfad $subPath.
Ein Sub-Pfad innerhalb des Storage.
Pfad
1.098
Frank Seitz, http://fseitz.de/
Copyright (C) 2016 Frank Seitz
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:
Expected text after =item, not a number
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.