abstract Path<T>(String)
package util.kit.path
A classe Path<T>
é responsável por manipular padrões de caminhos (URLs ou caminhos de sistema)
que podem conter parâmetros tipados.
Responsabilidades:
- Análise de padrões: Processa strings de caminho e extrai seus componentes e parâmetros.
- Correspondência de caminhos: Verifica se um caminho corresponde ao padrão definido.
- Extração de dados: Extrai valores tipados de parâmetros a partir de caminhos.
- Construção de caminhos: Constrói caminhos baseados em objetos de dados.
Exemplo de uso:
// Definindo um caminho com parâmetros
var userPath:Path<{id:Int, name:String}> = '/users/{id:Int}/{name:String}';
// Verificando se um caminho corresponde ao padrão
var matchResult = userPath.match('/users/42/john');
// Extraindo parâmetros de um caminho
var userData = userPath.extract('/users/42/john'); // {id: 42, name: "john"}
// Construindo um caminho a partir de dados
var path = userPath.build({id: 42, name: "john"}); // "/users/42/john"
Tipos suportados:
Os seguintes tipos são suportados para parâmetros em caminhos:
- Int: Valores inteiros (ex: {id:Int}
aceita "42", "0", "-10")
- String: Valores de texto (ex: {name:String}
aceita qualquer texto)
- Float: Números decimais (ex: {price:Float}
aceita "42.99", "0.5")
- Bool: Valores booleanos (ex: {active:Bool}
aceita "true" ou "false")
Sintaxe para definir um parâmetro: {nome:Tipo}
Methods
build(this:String, data:T):String
Constrói uma string de caminho substituindo os parâmetros pelos valores correspondentes no objeto de dados fornecido.
Exemplo:
// Definir um caminho com múltiplos tipos de parâmetros
var path:Path<{id:Int, name:String, active:Bool}> = '/users/{id:Int}/{name:String}/status/{active:Bool}';
// Construir um caminho a partir de um objeto
var url = path.build({id: 42, name: "john doe", active: true});
// "/users/42/john%20doe/status/true"
// Valores não fornecidos recebem valores padrão
var url2 = path.build({id: 123});
// "/users/123//status/false"
Parameters:
data | Um objeto contendo os valores para os parâmetros definidos no caminho. |
---|
Returns:
Uma string representando o caminho construído com os dados fornecidos.
extract(this:String, path:String):T
Extrai os valores dos parâmetros de um caminho e os retorna como um objeto tipado.
Exemplo:
// Definir um caminho com parâmetros de diferentes tipos
var path:Path<{id:Int, balance:Float, premium:Bool}> = '/account/{id:Int}/{balance:Float}/type/{premium:Bool}';
// Extrair valores de um caminho real
var data = path.extract('/account/1001/1250.75/type/true');
// {id: 1001, balance: 1250.75, premium: true}
// Com um caminho que não corresponde ao padrão
var invalid = path.extract('/account/abc/1250.75/type/true');
// null (porque "abc" não é um Int válido)
Parameters:
path | A string de caminho da qual os dados serão extraídos. |
---|
Returns:
Um objeto tipado contendo os valores extraídos dos parâmetros, ou null se o caminho não corresponder ao padrão.
match(this:String, toMatch:String):PathMatchData
Verifica se uma string de caminho corresponde ao padrão definido nesta instância. Se houver correspondência, extrai os valores dos parâmetros no caminho.
Exemplo:
// Verificar correspondência com parâmetros
var path:Path<Dynamic> = '/users/{id:Int}/{name:String}';
var result = path.match('/users/42/john');
// {matched: true, params: [{param: "id", value: 42, type: INT}, {param: "name", value: "john", type: STRING}]}
// Verificar uma correspondência inválida
var invalidResult = path.match('/users/abc/john');
// {matched: false, params: []} (falha porque "abc" não é um Int válido)
Parameters:
toMatch | A string de caminho que será verificada contra o padrão. |
---|
Returns:
Um objeto PathMatchData
contendo o resultado da correspondência e, se bem-sucedido, os parâmetros extraídos.
params(this:String):Array<PathParamData>
Retorna uma lista de todos os parâmetros definidos no caminho.
Exemplo:
var path:Path<Dynamic> = '/users/{id:Int}/{name:String}';
var parameters = path.params();
// [{param: "id", type: INT}, {param: "name", type: STRING}]
Returns:
Um array de objetos PathParamData
representando os parâmetros.
parts(this:String):Array<PathPartData>
Analisa o caminho e retorna uma lista de partes que o compõem. As partes podem ser strings literais ou parâmetros tipados.
Exemplo:
var path:Path<Dynamic> = '/users/{id:Int}';
var parts = path.parts();
// [{part: "users", is_param: false}, {part: "{id:Int}", is_param: true, param: "id", type: INT}]
Returns:
Um array de objetos PathPartData
representando cada parte do caminho.