Ferreteria/v0.6/clade/Sys/Data/aux/meta/InOut

From Woozle Writes Code
< Ferreteria‎ | v0.6‎ | clade‎ | Sys‎ | Data‎ | aux‎ | meta
Jump to navigation Jump to search
clade: Sys\Data\aux\meta\InOut
Clade Family
Fi InOut (none)
Clade Aliases
Alias Clade
Array* [c,i] Sys\FileSys\aux\Fi\Data
Base* [c,i] Sys\FileSys\Aspect\InOut\Fi
QStr* [c,i] Data\Mem\QVar\Str
SelfIface Sys\Data\aux\meta\InOut
SelfNode* [c,i] Sys\Data\aux\meta\Node
Subpages

Code

as of 2025-10-06

interface iInOut extends BaseIface {
    // DATA: values
    function DatabaseSlug(string $s=NULL)    : string;
    function TargetFileName(string $fn=NULL) : string;
    function SchemaName(string $s=NULL)      : string;
    function DataFormat(string $s=NULL)      : string;
    // DATA: object
    function TargetNode() : DataNodeIface;
}
class cInOut extends BaseClass implements SelfIface {

    // ++ CONFIG ++ //

    protected function ArrayClass() : string { return ArrayClass::class; }
    protected function NodeClass() : string { return SelfNodeClass::class; }

    // -- CONFIG -- //
    // ++ DATA: values ++ //

    // OVERRIDE: safe
    public function LetIt(int|string $snKey,mixed $vUpdate) : mixed { // updates value if not NULL; always returns latest value
        $oaData = $this->OAData();
        if (is_null($vUpdate)) {
            // no value given for setting, so attempt to retrieve:
          #echo $this->OAData()->ReflectThis()->Report();
            $os = QStrClass::FromOAValue($oaData,$snKey);
            $os = $oaData->GetItQ($snKey);
            if ($os->HasIt()) {
                $vRtn = $os->GetIt();
            } else {
                // No update and no value currently set: return NULL.
                $vRtn = NULL;
            }
        } else {
            // set the value, but return it too (for consistency):
          #echo $this->ReflectThis()->Report();
            $oaData->SetIt($snKey,$vUpdate);
            $vRtn = $vUpdate;
        }
        return $vRtn;
    }

    public function DatabaseSlug(string $s=NULL)    : string { return $this->LetIt(SelfNodeIface::sfDbaseSlug,$s); }
    public function TargetFileName(string $fn=NULL) : string { return $this->LetIt(SelfNodeIface::sfFileName,$fn); }
    public function SchemaName(string $s=NULL)      : string { return $this->LetIt(SelfNodeIface::sfDbaseSchema,$s); }
    /* DEBUG version
    public function SchemaName(string $s=NULL)      : string {
        echo $this->ReflectThis()->Report();
        #$ar = $this->GetVals();
        #$oa = new \Woozalia\Ferret\Sys\Diag\Util\cArray($ar);
        #echo $oa->DumpLines().'-----'.CRLF;
        return $this->LetIt(SelfNodeIface::sfDbaseSchema,$s);
    }
    */
    public function DataFormat(string $s=NULL)      : string { return $this->LetIt(SelfNodeIface::sfDataType,$s); }

    // ++ DATA: object ++ //

    public function TargetNode() : DataNodeIface {
        #echo $this->ReflectThis()->Report();
        $fn = $this->TargetFileName();
        $oIdent = $this->Node()->Ident();
        $fp = $oIdent->SpecPath();
        $fsTarg = $fp.'/'.$fn;  // TODO: a more rigorous way of handling spec assembly, relative paths, etc.
        $sc = $this->NodeClass();
        #echo "NODE CLASS: [$sc]".CRLF;
        $onTarg = ($sc)::FromSpec($fsTarg);
        #echo $onTarg->ReflectThis()->Report();
        return $onTarg;
    }

    // -- DATA -- //

}