ReadOnly, WriteOnly

added ReadOnly and WriteOnly params to meta functions that will override the setter and getter, respectively

prelim pester tests for potato for safety pass
This commit is contained in:
pblivingston 2025-12-09 19:21:06 -05:00
parent b128ee0625
commit b273aa7a51

View File

@ -1,6 +1,6 @@
function AddBoolMembers () { function AddBoolMembers () {
param( param(
[String[]]$PARAMS [String[]]$PARAMS, [Switch]$readOnly, [Switch]$writeOnly
) )
[hashtable]$Signatures = @{} [hashtable]$Signatures = @{}
foreach ($param in $PARAMS) { foreach ($param in $PARAMS) {
@ -10,13 +10,13 @@ function AddBoolMembers () {
$Signatures['Setter'] = "param ( [bool]`$arg )`n`$this.Setter('{0}', `$arg)" ` $Signatures['Setter'] = "param ( [bool]`$arg )`n`$this.Setter('{0}', `$arg)" `
-f $param -f $param
Addmember Addmember -ReadOnly:$readOnly -WriteOnly:$writeOnly
} }
} }
function AddFloatMembers () { function AddFloatMembers () {
param( param(
[String[]]$PARAMS, [String[]]$PARAMS, [Switch]$readOnly, [Switch]$writeOnly,
[int]$decimals = 2 [int]$decimals = 2
) )
[hashtable]$Signatures = @{} [hashtable]$Signatures = @{}
@ -27,13 +27,13 @@ function AddFloatMembers () {
$Signatures['Setter'] = "param ( [Single]`$arg )`n`$this.Setter('{0}', `$arg)" ` $Signatures['Setter'] = "param ( [Single]`$arg )`n`$this.Setter('{0}', `$arg)" `
-f $param -f $param
Addmember Addmember -ReadOnly:$readOnly -WriteOnly:$writeOnly
} }
} }
function AddIntMembers () { function AddIntMembers () {
param( param(
[String[]]$PARAMS [String[]]$PARAMS, [Switch]$readOnly, [Switch]$writeOnly
) )
[hashtable]$Signatures = @{} [hashtable]$Signatures = @{}
foreach ($param in $PARAMS) { foreach ($param in $PARAMS) {
@ -43,13 +43,13 @@ function AddIntMembers () {
$Signatures['Setter'] = "param ( [Int]`$arg )`n`$this.Setter('{0}', `$arg)" ` $Signatures['Setter'] = "param ( [Int]`$arg )`n`$this.Setter('{0}', `$arg)" `
-f $param -f $param
Addmember Addmember -ReadOnly:$readOnly -WriteOnly:$writeOnly
} }
} }
function AddStringMembers () { function AddStringMembers () {
param( param(
[String[]]$PARAMS [String[]]$PARAMS, [Switch]$readOnly, [Switch]$writeOnly
) )
[hashtable]$Signatures = @{} [hashtable]$Signatures = @{}
foreach ($param in $PARAMS) { foreach ($param in $PARAMS) {
@ -59,7 +59,7 @@ function AddStringMembers () {
$Signatures['Setter'] = "param ( [String]`$arg )`n`$this.Setter('{0}', `$arg)" ` $Signatures['Setter'] = "param ( [String]`$arg )`n`$this.Setter('{0}', `$arg)" `
-f $param -f $param
Addmember Addmember -ReadOnly:$readOnly -WriteOnly:$writeOnly
} }
} }
@ -97,6 +97,24 @@ function AddChannelMembers () {
} }
function Addmember { function Addmember {
param(
[Switch]$readOnly, [Switch]$writeOnly
)
if ($readOnly -and $writeOnly) {
throw "AddMember: cannot be both readOnly and writeOnly for '$param'"
}
# Override signatures based on mode
if ($readOnly) {
$Signatures['Setter'] = "return Write-Warning (`"ERROR: `$(`$this.identifier()).{0} is read only`")" `
-f $param
}
elseif ($writeOnly) {
$Signatures['Getter'] = "return Write-Warning (`"ERROR: `$(`$this.identifier()).{0} is write only`")" `
-f $param
}
$AddMemberParams = @{ $AddMemberParams = @{
Name = $param Name = $param
MemberType = 'ScriptProperty' MemberType = 'ScriptProperty'