Artigo
· 21 hr atrás 4min de leitura

Expanda a capacidade do ObjectScript de processar YAML

A linguagem ObjectScript possui um suporte incrível a JSON por meio de classes como %DynamicObject e %JSON.Adaptor. Esse suporte se deve à imensa popularidade do formato JSON em relação ao domínio anterior do XML. O JSON trouxe menos verbosidade à representação de dados e aumentou a legibilidade para humanos que precisavam interpretar conteúdo JSON. Para reduzir ainda mais a verbosidade e aumentar a legibilidade, o formato YAML foi criado. O formato YAML, muito fácil de ler, rapidamente se tornou o formato mais popular para representar configurações e parametrizações, devido à sua legibilidade e verbosidade mínima. Embora o XML raramente seja usado para parametrização e configuração, com o YAML, o JSON está gradualmente se limitando a ser um formato de troca de dados, em vez de ser usado para configurações, parametrizações e representações de metadados. Agora, tudo isso é feito com YAML. Portanto, a linguagem primária das tecnologias InterSystems precisa de amplo suporte para processamento YAML, no mesmo nível que para JSON e XML. Por esse motivo, lancei um novo pacote para tornar o ObjectScript um poderoso processador YAML. O nome do pacote é yaml-adaptor.

Vamos começar instalando o pacote

1. Se for de IPM, abra o IRIS Terminal e execute:

USER>zpm “install yaml-adaptor”

2. Se for de Docker, Clone/git pull o repositório do yaml-adaptor em uma pasta local:

$ git clone https://github.com/yurimarx/yaml-adaptor.git

3. Abra o terminal na pasta e execute:

$ docker-compose build

4. Execute o IRIS container do projeto:

$ docker-compose up -d

Por que usar o pacote?

Com este pacote, você poderá interoperar, ler, escrever e transformar YAML em DynamicObjects, JSON e XML bidirecionalmente. Este pacote permite ler e gerar dados, configurações e parametrizações nos formatos mais populares do mercado de forma dinâmica, com pouco código, alto desempenho e em tempo real.

O pacote em ação!

É muito simples. As capacidades são:

1. Converter de YAML string para JSON string

ClassMethod TestYamlToJson() As %Status
{
    Set sc = $$$OK
    set yamlContent = ""_$CHAR(10)_
        "user:"_$CHAR(10)_
        "    name: 'Jane Doe'"_$CHAR(10)_
        "    age: 30"_$CHAR(10)_
        "    roles:"_$CHAR(10)_
        "    - 'admin'"_$CHAR(10)_
        "    - 'editor'"_$CHAR(10)_
        "database:"_$CHAR(10)_
        "    host: 'localhost'"_$CHAR(10)_
        "    port: 5432"_$CHAR(10)_
        ""
    Do ##class(dc.yamladapter.YamlUtil).yamlToJson(yamlContent, .jsonContent)
    Set jsonObj = {}.%FromJSON(jsonContent)
    Write jsonObj.%ToJSON()

    Return sc
}

2. Gerar arquivo YAML de um arquivo JSON 

ClassMethod TestYamlFileToJsonFile() As %Status
{

    Set sc = $$$OK
    Set yamlFile = "/tmp/samples/sample.yaml"
    Set jsonFile = "/tmp/samples/sample_result.json"
    Write ##class(dc.yamladapter.YamlUtil).yamlFileToJsonFile(yamlFile,jsonFile)
    

    Return sc
}

3. Converter de JSON string para YAML string

ClassMethod TestJsonToYaml() As %Status
{
    Set sc = $$$OK
    set jsonContent = "{""user"":{""name"":""Jane Doe"",""age"":30,""roles"":[""admin"",""editor""]},""database"":{""host"":""localhost"",""port"":5432}}"
    Do ##class(dc.yamladapter.YamlUtil).jsonToYaml(jsonContent, .yamlContent)
    Write yamlContent

    Return sc
}

4. Gerar arquivo JSON de um arquivo YAML 

ClassMethod TestJsonFileToYamlFile() As %Status
{

    Set sc = $$$OK
    Set jsonFile = "/tmp/samples/sample.json"
    Set yamlFile = "/tmp/samples/sample_result.yaml"
    Write ##class(dc.yamladapter.YamlUtil).jsonFileToYamlFile(jsonFile, yamlFile)
    

    Return sc
}

5. Carregar um objeto dinâmico a partir de YAML string ou arquivos YAML 

ClassMethod TestYamlFileToDynamicObject() As %Status
{
    Set sc = $$$OK
    Set yamlFile = "/tmp/samples/sample.yaml"
    Set dynamicYaml = ##class(YamlAdaptor).CreateFromFile(yamlFile)

    Write "Title: "_dynamicYaml.title, !
    Write "Version: "_dynamicYaml.version, !

    Return sc
}

6. Gerar YAML de objetos dinâmicos

ClassMethod TestDynamicObjectToYaml() As %Status
{
    Set sc = $$$OK
    Set dynaObj = {}
    Set dynaObj.project = "Project A"
    Set dynaObj.version = "1.0"
    Set yamlContent = ##class(YamlAdaptor).CreateYamlFromDynamicObject(dynaObj)

    Write yamlContent

    Return sc
}

7. Gerar arquivo XML de arquivo YAML

ClassMethod TestXmlFileToYamlFile() As %Status
{

    Set sc = $$$OK
    Set xmlFile = "/tmp/samples/sample.xml"
    Set yamlFile = "/tmp/samples/sample_xml_result.yaml"
    Write ##class(dc.yamladapter.YamlUtil).xmlFileToYamlFile(xmlFile, yamlFile)
    

    Return sc
}

8. Gerar arquivo YAML de arquivo XML

ClassMethod TestYamlFileToXmlFile() As %Status
{

    Set sc = $$$OK
    Set yamlFile = "/tmp/samples/sample.yaml"
    Set xmlFile = "/tmp/samples/sample_result.xml"
    Write ##class(dc.yamladapter.YamlUtil).yamlFileToXmlFile(yamlFile, "sample", xmlFile)
    

    Return sc
}
Discussão (0)1
Entre ou crie uma conta para continuar