mxrb 0.1.2 → 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 +458 -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/entity-dsl.md +8 -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/docs/pt-BR/writing.md +28 -0
- 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/packager.rb +27 -13
- data/lib/mxrb/compiler/page_bundle_compiler.rb +13 -4
- data/lib/mxrb/compiler/portable_packager.rb +16 -11
- 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 +62 -11
- data/lib/mxrb/environment.rb +226 -0
- data/lib/mxrb/exporter.rb +265 -45
- data/lib/mxrb/http/server.rb +107 -0
- data/lib/mxrb/initializer.rb +80 -9
- data/lib/mxrb/integrity/validator.rb +32 -7
- 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 +44 -2
- data/lib/mxrb/model/microflow.rb +3 -1
- data/lib/mxrb/model/module.rb +71 -0
- 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/official_marketplace/module_package_importer.rb +23 -12
- data/lib/mxrb/official_marketplace/widget_package_installer.rb +15 -11
- data/lib/mxrb/official_marketplace.rb +9 -3
- data/lib/mxrb/oql/reverse_translator.rb +394 -0
- data/lib/mxrb/oql/server.rb +4 -8
- data/lib/mxrb/oql.rb +32 -4
- data/lib/mxrb/progress.rb +242 -0
- 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/team_server.rb +10 -7
- 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 +278 -41
- data/lib/mxrb.rb +38 -8
- metadata +157 -5
|
@@ -2,8 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
**Português** · [English](../en-US/project-structure.md) · [Deutsch](../de-DE/project-structure.md)
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
`mxrb export` possui dois modos explícitos. `--mode mendix` é o padrão e mantém
|
|
6
|
+
a árvore Mendix em DSL por camadas. `--mode ruby` cria uma aplicação Ruby
|
|
7
|
+
convencional e executável com frontend React + Vite.
|
|
8
|
+
|
|
9
|
+
## Modo Mendix
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
bundle exec mxrb export App.mpr app-source --mode mendix
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Essa árvore separa políticas globais, comportamento dos módulos, unidades
|
|
16
|
+
nativas preservadas e assets:
|
|
7
17
|
|
|
8
18
|
```text
|
|
9
19
|
project.rb
|
|
@@ -29,4 +39,189 @@ manifesto são gravadas.
|
|
|
29
39
|
A estrutura suporta Ruby para um Mendix novo, Ruby sobre baseline exportado,
|
|
30
40
|
Mendix para Ruby editável e Mendix → Ruby → Mendix estruturalmente equivalente.
|
|
31
41
|
|
|
42
|
+
## Modo Ruby
|
|
43
|
+
|
|
44
|
+
O modo Ruby também pode começar sem um projeto Mendix existente:
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
bundle exec mxrb init CustomerPortal --mode ruby
|
|
48
|
+
cd CustomerPortal
|
|
49
|
+
bundle install
|
|
50
|
+
npm install --prefix frontend
|
|
51
|
+
bundle exec mxrb run .
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Esse comando cria diretamente a aplicação convencional com `app/models`,
|
|
55
|
+
`app/dtos`, `app/services`, `app/pages` e React + Vite. Um baseline Mendix
|
|
56
|
+
reversível fica isolado em `.mxrb`; ele não determina a organização do código
|
|
57
|
+
que será editado. Para materializar o projeto atual em um MPR:
|
|
58
|
+
|
|
59
|
+
```sh
|
|
60
|
+
bundle exec mxrb generate project.rb build/CustomerPortal.mpr
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Models Ruby novos viram entidades, DTOs viram entidades non-persistent e as
|
|
64
|
+
declarações bidirecionais são sincronizadas no MPR. Código Ruby ou React sem
|
|
65
|
+
representação Mendix nativa permanece incorporado com checksum e reaparece
|
|
66
|
+
intacto no próximo export. A compilação falha explicitamente quando uma mudança
|
|
67
|
+
estrutural não pode ser representada, evitando conversão parcial silenciosa.
|
|
68
|
+
|
|
69
|
+
Para converter um MPR que já existe, use:
|
|
70
|
+
|
|
71
|
+
```sh
|
|
72
|
+
bundle exec mxrb export App.mpr app-ruby --mode ruby
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
app/
|
|
77
|
+
models/
|
|
78
|
+
dtos/
|
|
79
|
+
services/
|
|
80
|
+
pages/
|
|
81
|
+
config/application.rb
|
|
82
|
+
frontend/
|
|
83
|
+
package.json
|
|
84
|
+
vite.config.ts
|
|
85
|
+
tsconfig.json
|
|
86
|
+
src/{main.tsx,App.tsx,types.ts,nanoflows.ts,app.css}
|
|
87
|
+
project.rb
|
|
88
|
+
.mxrb/
|
|
89
|
+
ruby-app.json
|
|
90
|
+
runtime/App.mpr
|
|
91
|
+
mendix/
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Entidades persistentes viram records. Entidades non-persistent viram classes
|
|
95
|
+
DTO e sempre usam o sufixo `_dto.rb`, evitando nomes ambíguos como `_2.rb`.
|
|
96
|
+
Services são classes Ruby comuns e inicialmente delegam ao interpretador nativo
|
|
97
|
+
em Ruby puro. Pages expõem metadados nativos ao frontend React + TypeScript.
|
|
98
|
+
O export gera `types.ts` a partir de entidades, enumerações, páginas, widgets,
|
|
99
|
+
contextos, efeitos e contratos de API; `npm run typecheck` integra o build Vite.
|
|
100
|
+
|
|
101
|
+
Instale as dependências Ruby e do frontend uma vez e depois suba os dois
|
|
102
|
+
processos com um único comando:
|
|
103
|
+
|
|
104
|
+
```sh
|
|
105
|
+
bundle install
|
|
106
|
+
npm install --prefix frontend
|
|
107
|
+
bundle exec mxrb run .
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
`mxrb run` supervisiona a API JSON Ruby em loopback, servida pelo Puma 8, e o
|
|
111
|
+
servidor Vite. O Vite
|
|
112
|
+
encaminha `/api` para Ruby. Use `--server-port` para a porta do backend e
|
|
113
|
+
`--client-port` para a porta do frontend. `--no-frontend` inicia somente a API.
|
|
114
|
+
Os nomes antigos `--api-port` e `--port` continuam como aliases compatíveis.
|
|
115
|
+
`--no-progress` é global e opcional; apenas oculta a saída de progresso.
|
|
116
|
+
|
|
117
|
+
Duas stacks opcionais adicionam convenções Ruby conhecidas sem alterar o modo
|
|
118
|
+
Ruby padrão:
|
|
119
|
+
|
|
120
|
+
```sh
|
|
121
|
+
bundle exec mxrb init ServiceDesk --mode ruby --flymetothemoon
|
|
122
|
+
bundle exec mxrb export App.mpr app-rails --mode ruby --onrails
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
`--flymetothemoon` adiciona Sinatra, Puma, ActiveRecord, Rake e RSpec.
|
|
126
|
+
`--onrails` adiciona Rails, Puma, ActiveRecord e RSpec. Ambas mantêm React +
|
|
127
|
+
Vite como frontend integrado da aplicação e usam o mesmo comando
|
|
128
|
+
`mxrb run .`. As migrations do ActiveRecord controlam apenas tabelas Ruby; o
|
|
129
|
+
manifesto MXRB continua autoritativo para o domain model Mendix e seus
|
|
130
|
+
round-trips.
|
|
131
|
+
|
|
132
|
+
## Diagrama do domain model no browser
|
|
133
|
+
|
|
134
|
+
Abra os domain models de um ou mais módulos Mendix em um diagrama ER inspirado
|
|
135
|
+
no DBeaver:
|
|
136
|
+
|
|
137
|
+
```sh
|
|
138
|
+
bundle exec mxrb diagram-er App.mpr --module Sales
|
|
139
|
+
bundle exec mxrb diagram-er App.mpr --module Sales --module Billing \
|
|
140
|
+
--output build/App-layout.mpr
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
A barra lateral permite selecionar vários módulos ao mesmo tempo e mostra as
|
|
144
|
+
associações entre eles. A página também oferece busca de entidades,
|
|
145
|
+
posicionamento por drag-and-drop, zoom, ajuste à tela, auto-organização, grade,
|
|
146
|
+
visibilidade de atributos, rotas de relacionamento e pontos de origem/destino
|
|
147
|
+
arrastáveis. Entidades persistentes são azuis, DTOs/non-persistent amarelos e
|
|
148
|
+
OQL views verdes. **Salvar layout no MPR** grava as posições e os pontos das
|
|
149
|
+
associações locais nos campos Mendix nativos; âncoras cross-module, que não têm
|
|
150
|
+
campo BSON nativo, ficam em metadados visuais isolados do MXRB na mesma cópia
|
|
151
|
+
segura. A cópia padrão é `App.domain-layout.mpr`; para substituir uma saída
|
|
152
|
+
existente é necessário `--force`.
|
|
153
|
+
|
|
154
|
+
**Exportar PNG** baixa uma imagem em alta resolução dos módulos selecionados,
|
|
155
|
+
respeitando as cores, a exibição de atributos e as rotas. A exportação não modifica
|
|
156
|
+
o MPR; salve o layout separadamente quando as posições precisarem sobreviver ao
|
|
157
|
+
round-trip.
|
|
158
|
+
|
|
159
|
+
O modo direto continua disponível e ocupa o terminal até `Ctrl+C`. Para manter o
|
|
160
|
+
editor ER em segundo plano, use o lifecycle gerenciado, que preserva a cópia de
|
|
161
|
+
layout ao parar e nunca edita nem remove o MPR de origem:
|
|
162
|
+
|
|
163
|
+
```sh
|
|
164
|
+
bundle exec mxrb diagram-er up App.mpr --module Sales
|
|
165
|
+
bundle exec mxrb diagram-er status App.mpr
|
|
166
|
+
bundle exec mxrb diagram-er down App.mpr
|
|
167
|
+
bundle exec mxrb diagram-er up App.mpr # retoma a mesma cópia
|
|
168
|
+
bundle exec mxrb diagram-er destroy App.mpr --yes
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
`destroy` para o servidor e remove somente a cópia e os conteúdos externos que
|
|
172
|
+
esse lifecycle criou. O controle usa um endpoint privado autenticado em loopback;
|
|
173
|
+
estado e token ficam em arquivos locais com permissões restritas.
|
|
174
|
+
|
|
175
|
+
A interface do editor é implementada em React + TypeScript e consome somente as
|
|
176
|
+
APIs do servidor Ruby. O bundle Vite é compilado em `lib/mxrb/web_ui`, incluído
|
|
177
|
+
na gem e servido localmente; portanto Node.js não é necessário para usar o
|
|
178
|
+
editor instalado e nenhum CDN é acessado. Para desenvolver a interface, use
|
|
179
|
+
`npm install`, `npm run typecheck` e `npm run build` em `frontend/modeler`.
|
|
180
|
+
ER, UML, OQL e o backend genérico de `--mode ruby` compartilham o mesmo
|
|
181
|
+
adaptador Puma embutido. `puma ~> 8.0` é dependência direta do MXRB e traz
|
|
182
|
+
`nio4r ~> 2.0` transitivamente; WEBrick não faz parte da pilha HTTP.
|
|
183
|
+
|
|
184
|
+
## Diagramas UML
|
|
185
|
+
|
|
186
|
+
UML é uma implementação adicional e independente do editor ER. Ela usa a porta
|
|
187
|
+
4569 e não altera o layout do domain model. O viewer reúne diagramas de classe,
|
|
188
|
+
atividade de microflows e sequência de chamadas, renderizados com Mermaid:
|
|
189
|
+
|
|
190
|
+
O mesmo servidor publica `http://127.0.0.1:4569/modeler`, um catálogo visual
|
|
191
|
+
React + TypeScript para módulos, páginas, microflows e nanoflows, navegação,
|
|
192
|
+
segurança, integrações e configurações. Essa primeira superfície ampliada é
|
|
193
|
+
somente leitura; mutações continuam bloqueadas até terem validação e roundtrip
|
|
194
|
+
fail-closed equivalentes ao editor ER.
|
|
195
|
+
|
|
196
|
+
```sh
|
|
197
|
+
bundle exec mxrb uml App.mpr
|
|
198
|
+
bundle exec mxrb uml App.mpr --export=class --module Sales
|
|
199
|
+
bundle exec mxrb uml App.mpr --export=activity \
|
|
200
|
+
--microflow=Sales.CreateOrder --format=plantuml
|
|
201
|
+
bundle exec mxrb uml App.mpr --export=sequence \
|
|
202
|
+
--root=Sales.CreateOrder --depth=3
|
|
203
|
+
bundle exec mxrb uml App.mpr --export=sequence --module=Sales
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Sem `--export`, o comando abre o viewer unificado em
|
|
207
|
+
`http://127.0.0.1:4569`. A exportação textual usa Mermaid por padrão; selecione
|
|
208
|
+
PlantUML com `--format=plantuml`. Diagramas de sequência aceitam uma raiz com
|
|
209
|
+
profundidade limitada ou todas as chamadas internas de um módulo. O viewer usa
|
|
210
|
+
o mesmo workspace React + TypeScript; Mermaid é empacotado localmente para que a
|
|
211
|
+
renderização também funcione offline.
|
|
212
|
+
|
|
213
|
+
## Transições de versão e round-trips
|
|
214
|
+
|
|
215
|
+
Os dois modos mantêm IDs estáveis do Mendix e o baseline nativo completo usado
|
|
216
|
+
em upgrades, downgrades e round-trips repetidos. No modo Ruby, declarações de
|
|
217
|
+
models/DTOs são compiladas de volta no MPR. Os corpos Ruby dos services e os
|
|
218
|
+
fontes React são armazenados com SHA-256 em uma tabela MXRB dentro do MPR; uma
|
|
219
|
+
nova exportação `--mode ruby` restaura exatamente os arquivos editados.
|
|
220
|
+
|
|
221
|
+
O comportamento Mendix nativo continua autoritativo para construções que ainda
|
|
222
|
+
não possuem compilador semântico Ruby → Mendix. O manifesto de cobertura deixa
|
|
223
|
+
esse estado explícito em vez de alegar uma conversão silenciosa. O código
|
|
224
|
+
Ruby/React preservado sobrevive ao round-trip mesmo sem representação direta no
|
|
225
|
+
Studio Pro.
|
|
226
|
+
|
|
32
227
|
[Voltar ao índice](README.md)
|
|
@@ -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.
|
data/docs/pt-BR/writing.md
CHANGED
|
@@ -5,6 +5,12 @@
|
|
|
5
5
|
`mxrb generate` avalia uma definição Ruby e cria ou atualiza o MPR. Nomes
|
|
6
6
|
Mendix são chaves estáveis, portanto reaplicar a definição não duplica units.
|
|
7
7
|
|
|
8
|
+
Operações demoradas exibem progresso em `stderr` quando executadas em um
|
|
9
|
+
terminal interativo. Quando o total é conhecido, o MXRB mostra barra e
|
|
10
|
+
porcentagem; operações externas sem total confiável mostram spinner e tempo
|
|
11
|
+
decorrido. Pipes, redirecionamentos e saídas `--json` permanecem limpos. Use
|
|
12
|
+
`--no-progress` ou `MXRB_PROGRESS=0` para desativar explicitamente.
|
|
13
|
+
|
|
8
14
|
Para iniciar em uma pasta vazia:
|
|
9
15
|
|
|
10
16
|
```sh
|
|
@@ -122,6 +128,28 @@ usam `bson_binary`. Alterações nesse Ruby sobrepõem o baseline antes das escr
|
|
|
122
128
|
tipadas. Corpos de flow possuem `body_fingerprint`: o grafo nativo é reutilizado
|
|
123
129
|
quando o Ruby não mudou e regenerado após uma edição.
|
|
124
130
|
|
|
131
|
+
Export mappings, import mappings e JSON structures são materializados por
|
|
132
|
+
módulo em `infrastructure/mappings/{exports,imports,json_structures}`. Esses
|
|
133
|
+
arquivos mantêm `UnitID` e container/pasta originais, podem editar toda a
|
|
134
|
+
estrutura profunda em Ruby e têm precedência sobre o baseline durante o
|
|
135
|
+
`generate`.
|
|
136
|
+
|
|
137
|
+
Serviços REST, OData e web services publicados são exportados para
|
|
138
|
+
`infrastructure/endpoints`; recursos, operações, métodos HTTP, paths,
|
|
139
|
+
parâmetros e referências a microflows permanecem no mesmo arquivo Ruby.
|
|
140
|
+
Serviços consumidos são roteados para `infrastructure/integrations`, enquanto
|
|
141
|
+
message definitions e XML schemas ficam em `infrastructure/mappings`.
|
|
142
|
+
|
|
143
|
+
O Domain Model exportado separa entidades persistentes em `domain/entities`,
|
|
144
|
+
DTOs/non-persistent em `domain/dtos` e entidades de OQL View em
|
|
145
|
+
`domain/oql_views`. O arquivo da OQL View também contém seu
|
|
146
|
+
`DomainModels$ViewEntitySourceDocument`, portanto a consulta `Oql` pode ser
|
|
147
|
+
editada no mesmo Ruby sem perder a referência da entidade. Datasets OQL ficam
|
|
148
|
+
em `application/queries/datasets`; enumerations e constants ficam em
|
|
149
|
+
`domain/enumerations` e `domain/constants`. Scheduled events ficam em
|
|
150
|
+
`application/jobs/scheduled_events`. O `domain/model.rb` e o
|
|
151
|
+
`application/application.rb` carregam automaticamente todas essas categorias.
|
|
152
|
+
|
|
125
153
|
A DSL cobre criação/alteração/retrieve/commit/delete, chamadas de microflow,
|
|
126
154
|
Java, JavaScript, nanoflow e app service, páginas, REST, listas, decisões,
|
|
127
155
|
loops, eventos de erro e rescue.
|