mxrb 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/mxrb +455 -10
- data/docs/de-DE/README.md +1 -0
- data/docs/de-DE/oql-sql.md +42 -0
- data/docs/de-DE/project-structure.md +201 -2
- data/docs/de-DE/runtime-ruby.md +104 -0
- data/docs/de-DE/runtime-schema-migrations.md +44 -0
- data/docs/de-DE/validation-matrix.md +42 -4
- data/docs/en-US/README.md +1 -0
- data/docs/en-US/oql-sql.md +41 -0
- data/docs/en-US/project-structure.md +192 -2
- data/docs/en-US/runtime-ruby.md +100 -0
- data/docs/en-US/runtime-schema-migrations.md +41 -0
- data/docs/en-US/validation-matrix.md +39 -4
- data/docs/pt-BR/README.md +1 -0
- data/docs/pt-BR/oql-sql.md +41 -0
- data/docs/pt-BR/project-structure.md +197 -2
- data/docs/pt-BR/runtime-ruby.md +108 -0
- data/docs/pt-BR/runtime-schema-migrations.md +40 -0
- data/docs/pt-BR/validation-matrix.md +42 -5
- data/lib/mxrb/cli/help.rb +426 -0
- data/lib/mxrb/cli/release.rb +137 -0
- data/lib/mxrb/compiler/compatibility_analyzer.rb +1 -1
- data/lib/mxrb/compiler/data_grid_bundle_compiler.rb +8 -1
- data/lib/mxrb/compiler/domain_document_compiler.rb +3 -0
- data/lib/mxrb/compiler/gallery_bundle_compiler.rb +11 -1
- data/lib/mxrb/compiler/generic_widget_bundle_compiler.rb +76 -19
- data/lib/mxrb/compiler/legacy_custom_widget_compiler.rb +159 -0
- data/lib/mxrb/compiler/legacy_data_grid_compiler.rb +43 -7
- data/lib/mxrb/compiler/legacy_page_builder.rb +1248 -23
- data/lib/mxrb/compiler/page_bundle_compiler.rb +13 -4
- data/lib/mxrb/compiler/web_bundle_builder.rb +5 -1
- data/lib/mxrb/compiler/web_shell_materializer.rb +42 -2
- data/lib/mxrb/compiler/widget_package_extractor.rb +3 -0
- data/lib/mxrb/domain_diagram/lifecycle.rb +272 -0
- data/lib/mxrb/domain_diagram.rb +409 -0
- data/lib/mxrb/dsl/builder.rb +43 -9
- data/lib/mxrb/environment.rb +226 -0
- data/lib/mxrb/exporter.rb +89 -15
- data/lib/mxrb/http/server.rb +107 -0
- data/lib/mxrb/initializer.rb +80 -9
- data/lib/mxrb/integrity/validator.rb +14 -0
- data/lib/mxrb/io/bson_codec.rb +42 -1
- data/lib/mxrb/io/mpr_file.rb +146 -3
- data/lib/mxrb/model/attribute.rb +3 -0
- data/lib/mxrb/model/entity.rb +28 -2
- data/lib/mxrb/model/microflow.rb +3 -1
- data/lib/mxrb/model/page.rb +126 -15
- data/lib/mxrb/model/project.rb +3 -0
- data/lib/mxrb/modeler/catalog.rb +178 -0
- data/lib/mxrb/oql/reverse_translator.rb +394 -0
- data/lib/mxrb/oql/server.rb +4 -8
- data/lib/mxrb/oql.rb +23 -1
- data/lib/mxrb/project_lifecycle.rb +5 -2
- data/lib/mxrb/ruby_app/exporter.rb +1749 -0
- data/lib/mxrb/ruby_app/preset.rb +506 -0
- data/lib/mxrb/ruby_app/session_manager.rb +122 -0
- data/lib/mxrb/ruby_app.rb +1361 -0
- data/lib/mxrb/runtime/access_control.rb +408 -0
- data/lib/mxrb/runtime/native.rb +1015 -93
- data/lib/mxrb/runtime/scheduler.rb +396 -0
- data/lib/mxrb/runtime/schema_migrator.rb +598 -0
- data/lib/mxrb/runtime/shared_store.rb +335 -0
- data/lib/mxrb/runtime/sqlite_store.rb +729 -0
- data/lib/mxrb/scaffold/generator.rb +11 -3
- data/lib/mxrb/uml/activity_diagram.rb +118 -0
- data/lib/mxrb/uml/class_diagram.rb +118 -0
- data/lib/mxrb/uml/sequence_diagram.rb +112 -0
- data/lib/mxrb/uml/server.rb +146 -0
- data/lib/mxrb/uml/support.rb +35 -0
- data/lib/mxrb/version.rb +1 -1
- data/lib/mxrb/web_ui/assets/abnfDiagram-N423BO3Z-C4JD3cEC.js +1 -0
- data/lib/mxrb/web_ui/assets/arc-3Z53kgFp.js +1 -0
- data/lib/mxrb/web_ui/assets/architecture-TIHT7OUA-BStBTLea.js +1 -0
- data/lib/mxrb/web_ui/assets/architectureDiagram-T3A2C74G-DBwqnM4J.js +36 -0
- data/lib/mxrb/web_ui/assets/array-BifhSqXX.js +1 -0
- data/lib/mxrb/web_ui/assets/blockDiagram-VBNYF7ZC-DLtuHt-j.js +132 -0
- data/lib/mxrb/web_ui/assets/c4Diagram-5PPSVZJV-ConSk_pe.js +10 -0
- data/lib/mxrb/web_ui/assets/channel-BhPvD7Dt.js +1 -0
- data/lib/mxrb/web_ui/assets/chunk-2GRJ4B5K-D2HpWsf_.js +1 -0
- data/lib/mxrb/web_ui/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- data/lib/mxrb/web_ui/assets/chunk-4I5QYGJK-CiIdNwaF.js +1 -0
- data/lib/mxrb/web_ui/assets/chunk-5RXB4S5H-Bu_AaEkE.js +231 -0
- data/lib/mxrb/web_ui/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
- data/lib/mxrb/web_ui/assets/chunk-6Q2QTUOP-wQkNmt_X.js +88 -0
- data/lib/mxrb/web_ui/assets/chunk-7BUUIJ7U-Bb538aSH.js +1 -0
- data/lib/mxrb/web_ui/assets/chunk-GF5L2VYU-G8MmiBzU.js +206 -0
- data/lib/mxrb/web_ui/assets/chunk-I66GZJ75-CulcrLPh.js +127 -0
- data/lib/mxrb/web_ui/assets/chunk-JQJVKLGR-ukjzcdlL.js +156 -0
- data/lib/mxrb/web_ui/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- data/lib/mxrb/web_ui/assets/chunk-KBJHAD2P-Wm35lYov.js +1 -0
- data/lib/mxrb/web_ui/assets/chunk-KEIR6QF5-BICK3FdT.js +161 -0
- data/lib/mxrb/web_ui/assets/chunk-NSK5VX7P-D2nYrCY4.js +2 -0
- data/lib/mxrb/web_ui/assets/chunk-QR6OTTB3-BrdIzg4Q.js +62 -0
- data/lib/mxrb/web_ui/assets/chunk-RYQCIY6F-CCfZMcW6.js +1 -0
- data/lib/mxrb/web_ui/assets/chunk-UBXNYLIW-BPEVYsFK.js +1 -0
- data/lib/mxrb/web_ui/assets/chunk-W5SLKNZC-2E6OPhA4.js +1 -0
- data/lib/mxrb/web_ui/assets/chunk-WRU74C26-CBIvOyWp.js +70 -0
- data/lib/mxrb/web_ui/assets/chunk-XXDRQBXY-pH58XAyl.js +1 -0
- data/lib/mxrb/web_ui/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- data/lib/mxrb/web_ui/assets/classDiagram-JCYQIIEL-xiqo4D89.js +1 -0
- data/lib/mxrb/web_ui/assets/classDiagram-v2-OCEON4UE-xiqo4D89.js +1 -0
- data/lib/mxrb/web_ui/assets/cose-bilkent-JH36ORCC-t_flPpii.js +1 -0
- data/lib/mxrb/web_ui/assets/cynefin-VYW2F7L2-BIqktTEv.js +1 -0
- data/lib/mxrb/web_ui/assets/cynefinDiagram-MW4NZA55-C2d--lut.js +62 -0
- data/lib/mxrb/web_ui/assets/cytoscape.esm-B-NFISlW.js +321 -0
- data/lib/mxrb/web_ui/assets/dagre-Buvkdvvj.js +1 -0
- data/lib/mxrb/web_ui/assets/dagre-VZM6K2ZE-CSz2_tb5.js +4 -0
- data/lib/mxrb/web_ui/assets/defaultLocale-BFoDCU3G.js +1 -0
- data/lib/mxrb/web_ui/assets/diagram-7IWD3JNH-DCt7u7V_.js +30 -0
- data/lib/mxrb/web_ui/assets/diagram-B4RE2ZJO-DqZBqkMu.js +3 -0
- data/lib/mxrb/web_ui/assets/diagram-LBJQPF4R-ClIYbIsI.js +24 -0
- data/lib/mxrb/web_ui/assets/diagram-Q27KOJAE-DFxhvthJ.js +24 -0
- data/lib/mxrb/web_ui/assets/diagram-UB23O5K3-BSUTXptv.js +41 -0
- data/lib/mxrb/web_ui/assets/dist-D2qOEbeJ.js +1 -0
- data/lib/mxrb/web_ui/assets/domain-mGOZ1KCG.css +1 -0
- data/lib/mxrb/web_ui/assets/domain-qsjXhy4v.js +1 -0
- data/lib/mxrb/web_ui/assets/ebnfDiagram-BXEA7PRR-B5reICEi.js +1 -0
- data/lib/mxrb/web_ui/assets/erDiagram-JOGREHBK-Co5Mxn2p.js +85 -0
- data/lib/mxrb/web_ui/assets/eventmodeling-45OFAUF4-C1ylhSks.js +1 -0
- data/lib/mxrb/web_ui/assets/flowDiagram-UKHOOZJN-CHXaJIaS.js +1 -0
- data/lib/mxrb/web_ui/assets/ganttDiagram-PKOTCBZU-DPPPaWaz.js +292 -0
- data/lib/mxrb/web_ui/assets/gitGraph-TEB2WS4Q-qS77ywA9.js +1 -0
- data/lib/mxrb/web_ui/assets/gitGraphDiagram-DS77QQ5N-DpAv6-BT.js +106 -0
- data/lib/mxrb/web_ui/assets/graphlib-DS17s2tU.js +1 -0
- data/lib/mxrb/web_ui/assets/info-DKCQHKI2-C9VD1Y4e.js +1 -0
- data/lib/mxrb/web_ui/assets/infoDiagram-6WML65LV-Bk1kbcCy.js +2 -0
- data/lib/mxrb/web_ui/assets/init-C-OQMol4.js +1 -0
- data/lib/mxrb/web_ui/assets/ishikawaDiagram-WSZJBQD7-0gcISBFR.js +70 -0
- data/lib/mxrb/web_ui/assets/journeyDiagram-NVQOT4AX-Dt0RQnlh.js +139 -0
- data/lib/mxrb/web_ui/assets/jsx-runtime-DV0a5kSb.js +9 -0
- data/lib/mxrb/web_ui/assets/kanban-definition-27J2QSJJ-DIPQM7w9.js +89 -0
- data/lib/mxrb/web_ui/assets/katex-CXMH3UgJ.js +257 -0
- data/lib/mxrb/web_ui/assets/line-C0rYD-tL.js +1 -0
- data/lib/mxrb/web_ui/assets/linear-BPPxWorj.js +1 -0
- data/lib/mxrb/web_ui/assets/map-BaFkSB1l.js +1 -0
- data/lib/mxrb/web_ui/assets/mermaid-parser.core-B_UPzTxa.js +7 -0
- data/lib/mxrb/web_ui/assets/mindmap-definition-FAOFIHXS-CdJRSMuk.js +96 -0
- data/lib/mxrb/web_ui/assets/modeler-BNqHthwk.css +1 -0
- data/lib/mxrb/web_ui/assets/modeler-CQmqflbg.js +1 -0
- data/lib/mxrb/web_ui/assets/ordinal-BDEzSJ7C.js +1 -0
- data/lib/mxrb/web_ui/assets/packet-7NZHBO7P-CwQ4NSBs.js +1 -0
- data/lib/mxrb/web_ui/assets/path-fybaL0A-.js +1 -0
- data/lib/mxrb/web_ui/assets/pegDiagram-VL7TDLO6-D40S7ppx.js +1 -0
- data/lib/mxrb/web_ui/assets/pie-RZYD4A2V-CJroHMKh.js +1 -0
- data/lib/mxrb/web_ui/assets/pieDiagram-7S7Q4E2Y-QB54__BV.js +39 -0
- data/lib/mxrb/web_ui/assets/quadrantDiagram-CIZ2JOQS-DBhDS6ag.js +7 -0
- data/lib/mxrb/web_ui/assets/radar-I7S5WNFK-DdIUwd2d.js +1 -0
- data/lib/mxrb/web_ui/assets/railroad-3IZDKUUU-B1Lw6Xyq.js +1 -0
- data/lib/mxrb/web_ui/assets/railroad-abnf-AHOZXSZD-CQgQoeak.js +1 -0
- data/lib/mxrb/web_ui/assets/railroad-ebnf-EBAXGLYW-D7qEQ2x8.js +1 -0
- data/lib/mxrb/web_ui/assets/railroad-peg-LSFZ7HO6-C005Vxbb.js +1 -0
- data/lib/mxrb/web_ui/assets/railroadDiagram-AXF67PYL-BBP2qk7M.js +1 -0
- data/lib/mxrb/web_ui/assets/requirementDiagram-LRYGKXZP-D2cLsAoI.js +84 -0
- data/lib/mxrb/web_ui/assets/rough.esm-Dy-Kn_BL.js +1 -0
- data/lib/mxrb/web_ui/assets/sankeyDiagram-W5VNT64P-Bpi3FiP2.js +40 -0
- data/lib/mxrb/web_ui/assets/sequenceDiagram-SI44F4Z6-DCRcDlVe.js +162 -0
- data/lib/mxrb/web_ui/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +1 -0
- data/lib/mxrb/web_ui/assets/src-CvxfUak2.js +1 -0
- data/lib/mxrb/web_ui/assets/stateDiagram-OKZ733FA-C2GCEoxl.js +1 -0
- data/lib/mxrb/web_ui/assets/stateDiagram-v2-UEYNNEHI-D2gWgedh.js +1 -0
- data/lib/mxrb/web_ui/assets/swimlanes-SLNWSIFB-CRI9irEW.js +2 -0
- data/lib/mxrb/web_ui/assets/swimlanesDiagram-ULZ7WXOC-C5Wb_-hZ.js +8 -0
- data/lib/mxrb/web_ui/assets/theme-_mxc7BdY.css +1 -0
- data/lib/mxrb/web_ui/assets/timeline-definition-Z64GVDOM-B1-mNg-h.js +120 -0
- data/lib/mxrb/web_ui/assets/treeView-QDETBFTQ-7CTvIwKq.js +1 -0
- data/lib/mxrb/web_ui/assets/treemap-6X3UGDF4-CtL22pq5.js +1 -0
- data/lib/mxrb/web_ui/assets/uml-C3KAFGTq.js +51 -0
- data/lib/mxrb/web_ui/assets/uml-Dn-qd01X.css +1 -0
- data/lib/mxrb/web_ui/assets/vennDiagram-T6HMQDX7-BzVnUEAy.js +34 -0
- data/lib/mxrb/web_ui/assets/wardley-OPB4EBWU-JNi-QNag.js +1 -0
- data/lib/mxrb/web_ui/assets/wardleyDiagram-T6FBY63Y-BUwmAQ-B.js +78 -0
- data/lib/mxrb/web_ui/assets/xychartDiagram-ELKLHX3M-DEQS8sKp.js +7 -0
- data/lib/mxrb/web_ui/domain.html +15 -0
- data/lib/mxrb/web_ui/modeler.html +16 -0
- data/lib/mxrb/web_ui/uml.html +31 -0
- data/lib/mxrb/web_ui.rb +89 -0
- data/lib/mxrb/widget_certification.rb +208 -0
- data/lib/mxrb/writer.rb +200 -24
- data/lib/mxrb.rb +26 -1
- metadata +156 -5
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Runtime sem Java
|
|
2
|
+
|
|
3
|
+
O modo Ruby executa o backend sem iniciar o Mendix Runtime Java. Ao abrir uma
|
|
4
|
+
aplicação exportada, o MXRB migra automaticamente um banco SQLite por ambiente,
|
|
5
|
+
abre o interpretador de microflows, registra lifecycle hooks, aplica segurança e
|
|
6
|
+
inicia os scheduled events.
|
|
7
|
+
|
|
8
|
+
```text
|
|
9
|
+
config/environments/
|
|
10
|
+
├── development.env
|
|
11
|
+
├── qa.env
|
|
12
|
+
├── staging.env
|
|
13
|
+
└── production.env
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
A precedência é `ENV do processo > config/environments/<ambiente>.env >
|
|
17
|
+
.env.<ambiente> > .env`. Selecione o perfil com `--environment qa` ou
|
|
18
|
+
`MXRB_ENV=qa`. `mxrb env . --environment qa` lista somente nomes de chaves e
|
|
19
|
+
fontes; valores nunca são impressos.
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
mxrb run . --environment qa
|
|
23
|
+
mxrb test App.mpr smoke.rb --native --environment qa
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Cada perfil usa, por padrão, `.mxrb/runtime/<ambiente>.sqlite3`. O schema deriva
|
|
27
|
+
de entidades, atributos, associações e system members; mudanças aditivas são
|
|
28
|
+
aplicadas de forma idempotente e mudanças incompatíveis usam rebuild
|
|
29
|
+
transacional. Entidades não persistentes continuam somente em memória.
|
|
30
|
+
|
|
31
|
+
A API Ruby oferece login e tokens bearer, sessão, schema, navigation, pages,
|
|
32
|
+
microflows, CRUD e published REST. Regras de página/microflow, access rules de
|
|
33
|
+
entidade, direitos por member e o subconjunto seguro de XPath são verificados em
|
|
34
|
+
cada requisição. Credenciais vêm de `MXRB_USERS_JSON` e `MXRB_AUTH_TOKENS`; use
|
|
35
|
+
arquivos locais ignorados pelo Git ou o secret manager do deployment.
|
|
36
|
+
|
|
37
|
+
Scheduled events usam o scheduler stdlib do MXRB, com intervalos de minuto,
|
|
38
|
+
hora e dia, prevenção de overlap e encerramento supervisionado. Falhas ficam
|
|
39
|
+
disponíveis no scheduler e não derrubam silenciosamente o servidor. Zonas IANA,
|
|
40
|
+
como `America/Boa_Vista`, usam `tzinfo`, inclusive nas transições de horário de
|
|
41
|
+
verão. Zonas desconhecidas geram erro em vez de cair silenciosamente para UTC;
|
|
42
|
+
`UTC`, `local` e offsets numéricos como `-04:00` também são aceitos.
|
|
43
|
+
|
|
44
|
+
Sessões e coordenação do scheduler usam por padrão o SQLite nativo compartilhado
|
|
45
|
+
`.mxrb/runtime/<ambiente>-shared.sqlite3`, sem serviço externo. Múltiplas
|
|
46
|
+
instâncias devem apontar `MXRB_SHARED_STORE_PATH` para o mesmo arquivo. Claims
|
|
47
|
+
idempotentes por evento/janela e leases de sobreposição renovados por heartbeat
|
|
48
|
+
são atômicos; um claim inacabado pode ser retomado após a expiração. O lease
|
|
49
|
+
padrão é de 300 segundos e pode ser alterado com `MXRB_SCHEDULER_LEASE_TTL`.
|
|
50
|
+
Use `:memory:`, `memory` ou `local` para ativar explicitamente o modo por processo.
|
|
51
|
+
|
|
52
|
+
Java Custom Actions não iniciam uma JVM. Cada ação permitida deve ter um adapter
|
|
53
|
+
Ruby explícito, registrado pelo nome qualificado em `config/adapters.rb`:
|
|
54
|
+
|
|
55
|
+
```ruby
|
|
56
|
+
Mxrb::RubyApp::Registry.register_java_custom_action('Pedidos.CalcularTotal') do |arguments|
|
|
57
|
+
Calculador.call(
|
|
58
|
+
itens: arguments.fetch('Itens'),
|
|
59
|
+
desconto: arguments.fetch('Desconto')
|
|
60
|
+
)
|
|
61
|
+
end
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
As chaves são os nomes dos parâmetros no modelo Mendix. Valores básicos são
|
|
65
|
+
avaliados no contexto do microflow; referências de entidade, microflow e
|
|
66
|
+
mappings são entregues como nomes qualificados. O retorno alimenta a variável
|
|
67
|
+
de resultado apenas quando `UseReturnVariable` está ativo (ou no formato legado
|
|
68
|
+
que declara somente `ResultVariableName`). Uma ação sem registro falha fechado
|
|
69
|
+
com seu nome e a instrução de registro; não há descoberta de classes, execução
|
|
70
|
+
de JAR nem fallback para a JVM. REST, app services, SOAP, mappings e geração de
|
|
71
|
+
documentos continuam usando os adapters Ruby por tipo. O frontend permanece
|
|
72
|
+
JavaScript/React no navegador, servido pelo backend Ruby sem Runtime Java.
|
|
73
|
+
|
|
74
|
+
## Certificação Ruby → Mendix → Ruby
|
|
75
|
+
|
|
76
|
+
O cenário reproduzível de certificação fica em
|
|
77
|
+
[`spec/fixtures/flymetothemoon/project.rb`](../../spec/fixtures/flymetothemoon/project.rb).
|
|
78
|
+
Ele modela em Ruby clientes, produtos, pedidos e itens, incluindo enumeração,
|
|
79
|
+
índices, associações, microflows, nanoflow, scheduled event e uma página com
|
|
80
|
+
data grid. O teste
|
|
81
|
+
[`spec/flymetothemoon_roundtrip_spec.rb`](../../spec/flymetothemoon_roundtrip_spec.rb)
|
|
82
|
+
verifica estes casos de uso:
|
|
83
|
+
|
|
84
|
+
- gerar e validar um MPR Mendix 11.12.1 a partir da DSL Ruby;
|
|
85
|
+
- exportar pelo CLI real com `--mode ruby --flymetothemoon`;
|
|
86
|
+
- garantir que o preset contenha Sinatra, Puma, ActiveRecord e RSpec, sem
|
|
87
|
+
arquivos Java, JAR ou bytecode;
|
|
88
|
+
- executar criação, contagem, decisão, CRUD e metadados de página no Runtime
|
|
89
|
+
Ruby com SQLite;
|
|
90
|
+
- recompilar sem alterações e comparar o MPR estruturalmente com a origem;
|
|
91
|
+
- adicionar um atributo e substituir um microflow por Ruby idiomático;
|
|
92
|
+
- exportar novamente e provar que código Ruby e modelo Mendix sobrevivem a um
|
|
93
|
+
segundo round-trip estruturalmente idêntico.
|
|
94
|
+
|
|
95
|
+
Execute o caso isolado com:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
bundle exec rspec spec/flymetothemoon_roundtrip_spec.rb
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Para interfaces geradas, o cenário declarativo
|
|
102
|
+
[`spec/fixtures/frontend_browser/sudoku_full_flow.json`](../../spec/fixtures/frontend_browser/sudoku_full_flow.json)
|
|
103
|
+
é executado pelo runner `script/frontend_browser_acceptance` em Chromium real.
|
|
104
|
+
Ele cobre as posições 73 e 74 do tabuleiro, seleção, preenchimento e troca entre
|
|
105
|
+
Easy, Medium e Hard. Cada clique crítico aguarda a cadeia POST do microflow + GET
|
|
106
|
+
da associação e deve concluir em até 250 ms. A consulta da galeria é filtrada no
|
|
107
|
+
SQLite pelo contexto; objetos carregados pela associação inversa preservam o
|
|
108
|
+
vínculo quando somente atributos são salvos.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Migrações do schema do runtime Ruby
|
|
2
|
+
|
|
3
|
+
`Mxrb::Runtime::SchemaMigrator` identifica entidades, atributos e associações pelo GUID de
|
|
4
|
+
armazenamento Mendix. Renomear um artefato mantendo o GUID preserva a tabela ou coluna e os
|
|
5
|
+
dados existentes.
|
|
6
|
+
|
|
7
|
+
## Política segura
|
|
8
|
+
|
|
9
|
+
- Criação de tabela e adição de atributo opcional são automáticas e idempotentes.
|
|
10
|
+
- Atributos `required` são criados como `NOT NULL`.
|
|
11
|
+
- Tornar um atributo existente obrigatório reconstrói a tabela dentro de uma transação. Se
|
|
12
|
+
houver `NULL`, a migração usa o valor default declarado; sem default, ela é recusada.
|
|
13
|
+
- Adicionar um atributo obrigatório a uma tabela populada exige default. Em tabela vazia, a
|
|
14
|
+
migração pode reconstruir o schema sem backfill.
|
|
15
|
+
- Alterações compatíveis preservam os dados e as linhas das associações.
|
|
16
|
+
- Remover entidade, atributo ou associação é considerado destrutivo. Por padrão a migração
|
|
17
|
+
lança `Mxrb::Runtime::UnsafeSchemaMigrationError`, com os itens em `error.changes`, e não
|
|
18
|
+
altera o banco.
|
|
19
|
+
- Depois de backup e revisão do plano, a limpeza pode ser autorizada explicitamente com
|
|
20
|
+
`allow_destructive: true`. Somente tabelas e colunas registradas nos metadados do MXRB são
|
|
21
|
+
removidas; tabelas externas não são inferidas nem apagadas.
|
|
22
|
+
|
|
23
|
+
Aplicações Ruby exportadas mantêm essa opção desligada. Para uma execução controlada após o
|
|
24
|
+
backup, configure `MXRB_ALLOW_DESTRUCTIVE_MIGRATIONS=true` no perfil de ambiente. Qualquer
|
|
25
|
+
outro valor, inclusive variável ausente, mantém o modo fail-closed.
|
|
26
|
+
|
|
27
|
+
```ruby
|
|
28
|
+
database = SQLite3::Database.new('runtime.sqlite3')
|
|
29
|
+
migrator = Mxrb::Runtime::SchemaMigrator.new(
|
|
30
|
+
project,
|
|
31
|
+
database: database,
|
|
32
|
+
allow_destructive: true
|
|
33
|
+
)
|
|
34
|
+
result = migrator.migrate!
|
|
35
|
+
puts migrator.migration_plan.changes
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
DDL, cópia de dados, atualização dos metadados e limpeza destrutiva pertencem à mesma
|
|
39
|
+
transação SQLite. Qualquer violação de `NOT NULL`, unicidade ou outro erro reverte a migração
|
|
40
|
+
inteira.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**Português** · [English](../en-US/validation-matrix.md) · [Deutsch](../de-DE/validation-matrix.md)
|
|
4
4
|
|
|
5
|
-
Última atualização:
|
|
5
|
+
Última atualização: 11 de agosto de 2026.
|
|
6
6
|
|
|
7
7
|
O pipeline validado é:
|
|
8
8
|
|
|
@@ -21,6 +21,22 @@ Os originais nunca são modificados.
|
|
|
21
21
|
| TreeviewDemo | 5.21.4 | v1 | passou |
|
|
22
22
|
| GridViewPlayground | 6.10.8 | v1 | passou |
|
|
23
23
|
|
|
24
|
+
Em 11 de agosto, `script/validate_matrix` repetiu a matriz com **6/6 passes**:
|
|
25
|
+
1.506 units, 1.734 artefatos e 3.388 referências em 16,381 s.
|
|
26
|
+
|
|
27
|
+
## Inventário adicional local
|
|
28
|
+
|
|
29
|
+
`script/certify_mprs --cycles 2 --repair-hashes` certificou outros sete MPRs
|
|
30
|
+
em 14 roundtrips consecutivos: **7/7 passes**, 2.799 units, 3.238 artefatos e
|
|
31
|
+
4.819 referências. Foram cobertos LearnNow, SLATaskApp, SLATaskAppNative,
|
|
32
|
+
MyFirstModule, CourseManager, RubyBridgeSandbox e VetClinic.
|
|
33
|
+
|
|
34
|
+
SLATaskApp tinha um hash de conteúdo obsoleto e RubyBridgeSandbox tinha dois.
|
|
35
|
+
O gate reparou somente `Unit.ContentsHash` em cópias temporárias, registrou os
|
|
36
|
+
UUIDs alterados e preservou os bytes BSON originais. Os arquivos-fonte não
|
|
37
|
+
foram modificados. O segundo roundtrip também detectou e corrigiu tipos de
|
|
38
|
+
widgets nativos desserializados como strings.
|
|
39
|
+
|
|
24
40
|
## Cobertura profunda editável
|
|
25
41
|
|
|
26
42
|
O comparador cobre metadados, segurança, árvore de units, entidades, access
|
|
@@ -55,6 +71,27 @@ todo metamodelo Mendix. Encodings `.mxunit` desconhecidos são rejeitados em vez
|
|
|
55
71
|
de adivinhados. A validação exata do 5.21 em Studio Pro/Windows continua sendo
|
|
56
72
|
um limite explícito.
|
|
57
73
|
|
|
74
|
+
## Certificação de widgets
|
|
75
|
+
|
|
76
|
+
`script/certify_widgets --browser-report REPORT.json App.mpr` é o gate para
|
|
77
|
+
widgets do compilador web nativo e Marketplace realmente usados. Ele exige,
|
|
78
|
+
em conjunto:
|
|
79
|
+
|
|
80
|
+
- compilação sem fallback de todas as páginas e layouts web;
|
|
81
|
+
- resolução de cada ID pluggable para um `.mjs` dentro de MPK, com SHA-256;
|
|
82
|
+
- materialização do modelo e build Rspack nativo da versão Mendix;
|
|
83
|
+
- relatório Chromium aprovado, sem exceção/fallback visível, declarando todos
|
|
84
|
+
os IDs e tipos de widget exercitados pelo cenário.
|
|
85
|
+
|
|
86
|
+
Importar um MPK ou concluir o bundle isoladamente não certifica comportamento.
|
|
87
|
+
Widgets que exigem datasource, atributo ou posição específica — por exemplo,
|
|
88
|
+
filtros dentro de Data Grid/Gallery — só passam quando o cenário os exercita
|
|
89
|
+
nesse contexto válido. Pacotes futuros ou ainda não exercitados falham como
|
|
90
|
+
evidência ausente, em vez de herdarem uma promessa genérica de compatibilidade.
|
|
91
|
+
O frontend React/TypeScript de `--mode ruby` tem uma trilha separada: seu
|
|
92
|
+
relatório Chromium certifica os widgets sem afirmar que os componentes
|
|
93
|
+
pluggable equivalentes também passaram no Runtime Mendix.
|
|
94
|
+
|
|
58
95
|
## Índice semântico
|
|
59
96
|
|
|
60
97
|
Os seis MPRs produziram **1.778 artefatos** e **3.387 referências**. Consultas
|
|
@@ -63,9 +100,9 @@ sem MDL.
|
|
|
63
100
|
|
|
64
101
|
## Avaliações, cobertura e runtime
|
|
65
102
|
|
|
66
|
-
- 1.
|
|
67
|
-
- 100% das linhas:
|
|
68
|
-
- 100% dos branches:
|
|
103
|
+
- 1.329 exemplos, zero falhas;
|
|
104
|
+
- 100% das linhas: 23.771/23.771;
|
|
105
|
+
- 100% dos branches: 9.704/9.704;
|
|
69
106
|
- avaliação Sudoku: 7/7 checks;
|
|
70
107
|
- testes funcionais Sudoku: 3/3 localmente em 34,16 s;
|
|
71
108
|
- testes funcionais Sudoku: 3/3 no Docker em 39,52 s.
|
|
@@ -80,7 +117,7 @@ e logout real. Os scaffolds `page --chain` também materializam e passam
|
|
|
80
117
|
preflight nos três caminhos suportados; `page --template` foi exercitado em
|
|
81
118
|
Runtime para dashboard e formulário vertical com CSS computado auditado.
|
|
82
119
|
|
|
83
|
-
`script/validate_matrix` repetiu os seis round-trips, 1.506 units, em
|
|
120
|
+
`script/validate_matrix` repetiu os seis round-trips, 1.506 units, em 16,381 s.
|
|
84
121
|
`script/benchmark` mediu o pipeline Sudoku completo em 6,8463 s. O fuzzing
|
|
85
122
|
determinístico cobre 250 documentos BSON aninhados e 50 arquivos `.mxunit`
|
|
86
123
|
atômicos, inclusive valores binários.
|