Inputs Avançados
Os inputs avançados permite aplicar regras mais complexas aos inputs, isso te auxilia na criação de Templates e Plugins.
Computed Inputs
Por meio do computed-inputs
, é possível:
- Criar inputs com base em outros inputs;
- Usar o valor num Template/Plugin que está sendo aplicado no momento.
Confira o exemplo na utilização de um filtro title, a primeira letra de cada nome é transformada em letra maiúscula (upper case):
inputs:
- label: Type your name
name: name
type: text
computed-inputs:
name_formatted: "{{ name | title }}"
Global Input
Quando você definir os inputs globais dentro de um app (via Template ou Plugin), qualquer Plugin pode acessá-los ou modificá-los.
Você deve declarar um input global por meio da flag global: true
, confira:
inputs:
- label: Commit message
type: text
default: example
name: message
required: true
global: true
Exemplo 1: Template base com input global
O Template base neste exemplo, possui um input global que pode ser utilizado em outras aplicações de Plugins, ou seja, no mesmo app em que foi criado com este Template:
name: global-template
description: Template that has a global input
types:
- app-template
inputs:
- label: Project name
type: text
name: project_name
default: project-name
global: true
No exemplo acima, como o input project_name
está definido como global, qualquer valor informado nele pode ser usado por outros Plugins.
Exemplo 2: Plugin utilizando o input global dos seus Templates
O valor de um input global definido em um Template pode ser usado dentro de um Plugin. Não é necessário defini-lo novamente no arquivo plugin.yaml
.
Para acessar o valor de um input definido em um Template, no Plugin, adicione o nome do input entre chaves duplas "{{ ... }}"
formando a expressão {{ <nome-do-input> }}
. Confira o exemplo abaixo utilizando um input "project_name
" de um Template, a expressão será {{ project_name }}
.
name: global-plugin
description: Plugin that has a input from global input
types:
- app
inputs:
- label: Insert any text
type: text
name: json_body
hooks:
- type: edit-json
trigger: after-render
path: package.json
indent: "\t"
encoding: utf-8
changes:
- jsonpath: "$.name[?name = '{{ project_name }}']"
update:
value: |
{
"name": "other-project",
"version": "1.2.5",
"bin": {
"other-project": "./path/to/project"
}
}
O valor do input project_name
definido no Template será utilizado como parte da expressão do jsonpath utilizado em um Hook Declarativo edit-json
ao aplicar o Plugin.
Exemplo 3: Plugin utilizando o input global como valor default em um dos seus inputs
Você pode usar o valor do input global para definir o valor default de um Plugin que será aplicado após outro Template (ou Plugin) tenha definido um input global:
name: global-plugin
description: Plugin that uses a global input as default value
display-name: globa-plugin
picture: plugin.png
category: backend # Ref: https://docs.legacy.stackspot.com/latest/docs/create-stacks/yaml/#category
compatibility:
- java
- spring
about: docs/about.md
usage: docs/usage.md
use-case: docs/use-case.md
implementation: docs/implementation.md
technologies: # Ref: https://docs.legacy.stackspot.com/latest/docs/create-stacks/yaml/#technologies
- "Api"
types:
- app
inputs:
- label: Project Name
type: text
name: project_name
default: project_name
global: true
Global Computed Inputs
O global-computed-inputs
aceita expressões Jinja.
Confira mais detalhes sobre o uso do Jinja na StackSpot
O global computed inputs
possibilita o uso de computed-inputs
de maneira global nos Templates e Plugins.
Por meio do global-computed-inputs
, é possível:
- Usar
computed-inputs
de maneira global; - Reaproveitar o valor do input em Plugins subsequentes.
Exemplo 1. Definindo um global-computed-input
em um template base
name: global-computed-input-template
description: Template that has a global computed input
types:
- app-template
inputs:
- label: Project name
type: text
name: project_name
default: project-name
global-computed-inputs:
project_name_sanitized: "{{project_name|replace('-', '_')|lower}}"
O valor project_name_sanitized
pode agora ser usado em todos as aplicações subsequentes de Plugins.
Exemplo 2. Plugin usando o valor global-computed-input
Plugin com global-computed-inputs
Os Plugins aplicados em seguida terão acesso ao valor do global-computed-inputs.
Para usar o valor project_name_sanitized
definido como global computed input
no Template anterior, basta defini-lo como {{project_name_sanitized}}
no arquivo onde o parse será feito:
Por exemplo, para usar este valor em um arquivo README.md que seria criado pelo Plugin:
|_plugin.yaml
|_templates
|_README.MD
README.md
O valor project_name_sanitized
é {{project_name_sanitized}}
.
Não é necessário redefinir essa parte no plugin.yaml.
Esta página foi útil?