Ferreteria/v0.6/clade/Sys/Data/aux/meta/InOut
Jump to navigation
Jump to search
| ||||||||||||||||||||||
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 -- //
}