VBCommons/utility/API_Config.cls
2024-06-07 20:46:40 +03:00

104 lines
2.5 KiB
OpenEdge ABL

VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
END
Attribute VB_Name = "API_Config"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
' ================ Ðàáîòà êîíôèãóðàöèÿìè =============
' Shared module version: 20220727
' Tested in: TestCommons
' Depends on: API_JSON
' Required reference: Scripting, API_JSON
Option Explicit
Private Const JSON_IDENT_SIZE_SPACES = 4
Private data_ As Scripting.Dictionary
Private Sub Class_Initialize()
Call Clear
End Sub
Public Function Contains(sKey$) As Boolean
Contains = data_.Exists(sKey)
End Function
Public Function GetValue(sKey$, Optional iDefault As Variant = vbNullString) As Variant
If Not Contains(sKey) Then _
GoTo RETURN_DEFAULT
If VBA.VarType(data_(sKey)) = vbObject Then
Set GetValue = data_(sKey)
Exit Function
Else
GetValue = data_(sKey)
If GetValue <> "" Then _
Exit Function
End If
RETURN_DEFAULT:
If VBA.VarType(iDefault) = vbObject Then
Set GetValue = iDefault
Else
GetValue = iDefault
End If
End Function
Public Function SetValue(sKey$, newVal As Variant)
If VBA.VarType(newVal) = vbObject Then
Set data_.Item(sKey) = newVal
Else
data_.Item(sKey) = newVal
End If
End Function
Public Function RemoveKey(sKey$)
If data_.Exists(sKey) Then _
Call data_.Remove(sKey)
End Function
Public Function Clear()
Set data_ = New Scripting.Dictionary
End Function
' Scan configuration from JSON file
' Requires: sFile - path to valid UTF-8 JSON file
Public Function LoadFromFile(sFile$) As Boolean
Dim iParser As New API_JSON
Dim newData As Object: Set newData = iParser.LoadFromFile(sFile)
LoadFromFile = Not newData Is Nothing
If LoadFromFile Then _
Set data_ = newData
End Function
' Scan configuration from JSON string
Public Function LoadFromJSON(sJson$) As Boolean
LoadFromJSON = False
Dim iParser As New API_JSON
On Error GoTo RETURN_FALSE
Set data_ = iParser.Parse(sJson)
LoadFromJSON = True
RETURN_FALSE:
On Error GoTo 0
End Function
Public Function SaveToFile(sFile$, Optional bMultiline As Boolean = True) As Boolean
Dim iParser As New API_JSON
If bMultiline Then _
Call iParser.SetupMultiline(JSON_IDENT_SIZE_SPACES)
SaveToFile = iParser.SaveToFile(sFile, data_)
End Function
Public Function SaveToJSON(Optional bMultiline As Boolean = False) As String
Dim iParser As New API_JSON
If bMultiline Then _
Call iParser.SetupMultiline(JSON_IDENT_SIZE_SPACES)
SaveToJSON = iParser.CreateJSON(data_)
End Function