mxrb 0.1.0
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 +7 -0
- data/LICENSE +21 -0
- data/README.de-DE.md +108 -0
- data/README.md +172 -0
- data/README.pt-BR.md +109 -0
- data/bin/mxrb +1613 -0
- data/docs/README.md +10 -0
- data/docs/de-DE/README.md +24 -0
- data/docs/de-DE/architectural-patterns.md +26 -0
- data/docs/de-DE/architectural-standard.md +48 -0
- data/docs/de-DE/architecture.md +76 -0
- data/docs/de-DE/compiler.md +162 -0
- data/docs/de-DE/conventions.md +19 -0
- data/docs/de-DE/design-system.md +52 -0
- data/docs/de-DE/entity-dsl.md +53 -0
- data/docs/de-DE/native-runtime-quality-report.md +74 -0
- data/docs/de-DE/oql-sql.md +211 -0
- data/docs/de-DE/platform-api-integration.md +36 -0
- data/docs/de-DE/platform-operations.md +243 -0
- data/docs/de-DE/project-structure.md +32 -0
- data/docs/de-DE/ruby-first-roadmap.md +116 -0
- data/docs/de-DE/scaffolds.md +59 -0
- data/docs/de-DE/semantic-refactoring.md +56 -0
- data/docs/de-DE/team-server.md +33 -0
- data/docs/de-DE/validation-matrix.md +64 -0
- data/docs/de-DE/vetclinic-acceptance.md +24 -0
- data/docs/de-DE/writing.md +138 -0
- data/docs/en-US/README.md +24 -0
- data/docs/en-US/architectural-patterns.md +151 -0
- data/docs/en-US/architectural-standard.md +89 -0
- data/docs/en-US/architecture.md +170 -0
- data/docs/en-US/compiler.md +157 -0
- data/docs/en-US/conventions.md +82 -0
- data/docs/en-US/design-system.md +163 -0
- data/docs/en-US/entity-dsl.md +53 -0
- data/docs/en-US/native-runtime-quality-report.md +73 -0
- data/docs/en-US/oql-sql.md +201 -0
- data/docs/en-US/platform-api-integration.md +36 -0
- data/docs/en-US/platform-operations.md +244 -0
- data/docs/en-US/project-structure.md +49 -0
- data/docs/en-US/ruby-first-roadmap.md +186 -0
- data/docs/en-US/scaffolds.md +57 -0
- data/docs/en-US/semantic-refactoring.md +198 -0
- data/docs/en-US/team-server.md +32 -0
- data/docs/en-US/validation-matrix.md +257 -0
- data/docs/en-US/vetclinic-acceptance.md +23 -0
- data/docs/en-US/writing.md +655 -0
- data/docs/pt-BR/README.md +24 -0
- data/docs/pt-BR/architectural-patterns.md +25 -0
- data/docs/pt-BR/architectural-standard.md +533 -0
- data/docs/pt-BR/architecture.md +300 -0
- data/docs/pt-BR/compiler.md +162 -0
- data/docs/pt-BR/conventions.md +19 -0
- data/docs/pt-BR/design-system.md +65 -0
- data/docs/pt-BR/entity-dsl.md +116 -0
- data/docs/pt-BR/native-runtime-quality-report.md +73 -0
- data/docs/pt-BR/oql-sql.md +208 -0
- data/docs/pt-BR/platform-api-integration.md +36 -0
- data/docs/pt-BR/platform-operations.md +260 -0
- data/docs/pt-BR/project-structure.md +32 -0
- data/docs/pt-BR/ruby-first-roadmap.md +239 -0
- data/docs/pt-BR/scaffolds.md +104 -0
- data/docs/pt-BR/semantic-refactoring.md +55 -0
- data/docs/pt-BR/team-server.md +59 -0
- data/docs/pt-BR/validation-matrix.md +86 -0
- data/docs/pt-BR/vetclinic-acceptance.md +50 -0
- data/docs/pt-BR/writing.md +177 -0
- data/examples/sudoku_evaluation.rb +14 -0
- data/examples/sudoku_functional_test.rb +28 -0
- data/lib/mxrb/architecture/graph.rb +124 -0
- data/lib/mxrb/architecture/validator.rb +98 -0
- data/lib/mxrb/benchmark.rb +33 -0
- data/lib/mxrb/compare.rb +390 -0
- data/lib/mxrb/compiler/adapter.rb +96 -0
- data/lib/mxrb/compiler/artifact_document_compiler.rb +102 -0
- data/lib/mxrb/compiler/artifact_materializer.rb +53 -0
- data/lib/mxrb/compiler/client_model_materializer.rb +42 -0
- data/lib/mxrb/compiler/code_action_document_compiler.rb +64 -0
- data/lib/mxrb/compiler/code_action_materializer.rb +35 -0
- data/lib/mxrb/compiler/code_action_type_compiler.rb +32 -0
- data/lib/mxrb/compiler/combo_box_bundle_compiler.rb +314 -0
- data/lib/mxrb/compiler/compatibility_analyzer.rb +169 -0
- data/lib/mxrb/compiler/constants_materializer.rb +111 -0
- data/lib/mxrb/compiler/data_grid_bundle_compiler.rb +290 -0
- data/lib/mxrb/compiler/database_connector_action_compiler.rb +280 -0
- data/lib/mxrb/compiler/deployment_asset_copier.rb +60 -0
- data/lib/mxrb/compiler/deployment_bootstrapper.rb +208 -0
- data/lib/mxrb/compiler/deployment_materializer.rb +43 -0
- data/lib/mxrb/compiler/deployment_metadata.rb +64 -0
- data/lib/mxrb/compiler/domain_document_compiler.rb +153 -0
- data/lib/mxrb/compiler/domain_model_materializer.rb +35 -0
- data/lib/mxrb/compiler/domain_security_compiler.rb +82 -0
- data/lib/mxrb/compiler/gallery_bundle_compiler.rb +190 -0
- data/lib/mxrb/compiler/generic_widget_bundle_compiler.rb +281 -0
- data/lib/mxrb/compiler/image_bundle_compiler.rb +216 -0
- data/lib/mxrb/compiler/java_proxy_generator.rb +509 -0
- data/lib/mxrb/compiler/legacy_data_grid_compiler.rb +267 -0
- data/lib/mxrb/compiler/legacy_page_builder.rb +287 -0
- data/lib/mxrb/compiler/mda.rb +99 -0
- data/lib/mxrb/compiler/microflow_document_compiler.rb +85 -0
- data/lib/mxrb/compiler/microflow_materializer.rb +48 -0
- data/lib/mxrb/compiler/microflow_node_compiler.rb +250 -0
- data/lib/mxrb/compiler/model_package.rb +116 -0
- data/lib/mxrb/compiler/model_values.rb +67 -0
- data/lib/mxrb/compiler/nanoflow_program_compiler.rb +483 -0
- data/lib/mxrb/compiler/navigation_document_compiler.rb +93 -0
- data/lib/mxrb/compiler/packager.rb +100 -0
- data/lib/mxrb/compiler/page_bundle_builder.rb +56 -0
- data/lib/mxrb/compiler/page_bundle_compiler.rb +2004 -0
- data/lib/mxrb/compiler/page_document_compiler.rb +77 -0
- data/lib/mxrb/compiler/portable_packager.rb +356 -0
- data/lib/mxrb/compiler/project_jar_archive.rb +84 -0
- data/lib/mxrb/compiler/project_jar_builder.rb +121 -0
- data/lib/mxrb/compiler/project_materializer.rb +139 -0
- data/lib/mxrb/compiler/project_model_orderer.rb +52 -0
- data/lib/mxrb/compiler/runtime_data_types.rb +31 -0
- data/lib/mxrb/compiler/runtime_model_schema.rb +90 -0
- data/lib/mxrb/compiler/schemas/runtime-10.24.0.73019.json +1052 -0
- data/lib/mxrb/compiler/schemas/runtime-11.json +1215 -0
- data/lib/mxrb/compiler/schemas/runtime-6.10.8.json +1148 -0
- data/lib/mxrb/compiler/schemas/runtime-7.17.0.json +1144 -0
- data/lib/mxrb/compiler/schemas/runtime-7.5.0.json +1215 -0
- data/lib/mxrb/compiler/schemas/runtime-9.6.1.29396.json +868 -0
- data/lib/mxrb/compiler/schemas/system-model-10.24.0.73019.b64 +1135 -0
- data/lib/mxrb/compiler/schemas/system-model-11.12.1.b64 +815 -0
- data/lib/mxrb/compiler/schemas/system-model-6.10.8.b64 +497 -0
- data/lib/mxrb/compiler/schemas/system-model-7.17.0.b64 +519 -0
- data/lib/mxrb/compiler/schemas/system-model-7.5.0.b64 +504 -0
- data/lib/mxrb/compiler/schemas/system-model-9.6.1.29396.b64 +816 -0
- data/lib/mxrb/compiler/security_materializer.rb +104 -0
- data/lib/mxrb/compiler/settings_document_compiler.rb +45 -0
- data/lib/mxrb/compiler/settings_materializer.rb +25 -0
- data/lib/mxrb/compiler/source_model.rb +128 -0
- data/lib/mxrb/compiler/system_model_seed.rb +88 -0
- data/lib/mxrb/compiler/system_queue_materializer.rb +54 -0
- data/lib/mxrb/compiler/system_text_materializer.rb +49 -0
- data/lib/mxrb/compiler/translation_materializer.rb +95 -0
- data/lib/mxrb/compiler/web_bundle_builder.rb +155 -0
- data/lib/mxrb/compiler/web_list_data_source.rb +139 -0
- data/lib/mxrb/compiler/web_operation_compiler.rb +614 -0
- data/lib/mxrb/compiler/web_shell_materializer.rb +194 -0
- data/lib/mxrb/compiler/widget_package_extractor.rb +63 -0
- data/lib/mxrb/doctor.rb +116 -0
- data/lib/mxrb/dsl/builder.rb +1636 -0
- data/lib/mxrb/errors.rb +18 -0
- data/lib/mxrb/evaluation.rb +131 -0
- data/lib/mxrb/exporter.rb +1716 -0
- data/lib/mxrb/frontend/migrator.rb +775 -0
- data/lib/mxrb/functional.rb +307 -0
- data/lib/mxrb/github/annotator.rb +161 -0
- data/lib/mxrb/initializer.rb +257 -0
- data/lib/mxrb/integrity/validator.rb +136 -0
- data/lib/mxrb/io/bson_codec.rb +145 -0
- data/lib/mxrb/io/mpr_file.rb +558 -0
- data/lib/mxrb/io/mxunit_codec.rb +42 -0
- data/lib/mxrb/marketplace.rb +380 -0
- data/lib/mxrb/model/association.rb +98 -0
- data/lib/mxrb/model/attribute.rb +100 -0
- data/lib/mxrb/model/connector.rb +17 -0
- data/lib/mxrb/model/design_materializer.rb +133 -0
- data/lib/mxrb/model/design_migration.rb +126 -0
- data/lib/mxrb/model/design_system.rb +111 -0
- data/lib/mxrb/model/domain_model.rb +51 -0
- data/lib/mxrb/model/entity.rb +180 -0
- data/lib/mxrb/model/menu.rb +38 -0
- data/lib/mxrb/model/microflow.rb +100 -0
- data/lib/mxrb/model/module.rb +142 -0
- data/lib/mxrb/model/navigation.rb +127 -0
- data/lib/mxrb/model/page.rb +410 -0
- data/lib/mxrb/model/project.rb +187 -0
- data/lib/mxrb/model/unit.rb +48 -0
- data/lib/mxrb/module_initializer.rb +75 -0
- data/lib/mxrb/official_marketplace/content_api.rb +292 -0
- data/lib/mxrb/official_marketplace/dependency_resolver.rb +329 -0
- data/lib/mxrb/official_marketplace/lifecycle.rb +367 -0
- data/lib/mxrb/official_marketplace/module_package_importer.rb +318 -0
- data/lib/mxrb/official_marketplace/widget_package_installer.rb +414 -0
- data/lib/mxrb/official_marketplace.rb +720 -0
- data/lib/mxrb/oql/analyzer.rb +155 -0
- data/lib/mxrb/oql/index_advisor.rb +85 -0
- data/lib/mxrb/oql/plan_analyzer.rb +185 -0
- data/lib/mxrb/oql/server.rb +132 -0
- data/lib/mxrb/oql/sql_server_plan_analyzer.rb +190 -0
- data/lib/mxrb/oql/sql_server_workload_analyzer.rb +80 -0
- data/lib/mxrb/oql/workload_analyzer.rb +175 -0
- data/lib/mxrb/oql/workload_baseline.rb +60 -0
- data/lib/mxrb/oql.rb +424 -0
- data/lib/mxrb/project_lifecycle.rb +76 -0
- data/lib/mxrb/protocols/plan.rb +86 -0
- data/lib/mxrb/protocols.rb +123 -0
- data/lib/mxrb/runtime/database_workspace.rb +677 -0
- data/lib/mxrb/runtime/docker_executor.rb +41 -0
- data/lib/mxrb/runtime/docker_workspace.rb +29 -0
- data/lib/mxrb/runtime/executor.rb +169 -0
- data/lib/mxrb/runtime/java_locator.rb +26 -0
- data/lib/mxrb/runtime/native.rb +474 -0
- data/lib/mxrb/runtime/sql_server_database.rb +146 -0
- data/lib/mxrb/runtime/toolchain.rb +82 -0
- data/lib/mxrb/scaffold/cli.rb +113 -0
- data/lib/mxrb/scaffold/generator.rb +246 -0
- data/lib/mxrb/scaffold/help.rb +80 -0
- data/lib/mxrb/scaffold/page_templates.rb +54 -0
- data/lib/mxrb/scaffold/recipes.rb +198 -0
- data/lib/mxrb/scaffold/registry.rb +82 -0
- data/lib/mxrb/scaffold/templates.rb +723 -0
- data/lib/mxrb/scaffold/transaction.rb +84 -0
- data/lib/mxrb/schema/tables.rb +55 -0
- data/lib/mxrb/semantic/analyzer.rb +473 -0
- data/lib/mxrb/semantic/batch_plan.rb +68 -0
- data/lib/mxrb/semantic/domain_mutator.rb +419 -0
- data/lib/mxrb/semantic/embedder.rb +51 -0
- data/lib/mxrb/semantic/extractor.rb +290 -0
- data/lib/mxrb/semantic/index.rb +623 -0
- data/lib/mxrb/semantic/inliner.rb +216 -0
- data/lib/mxrb/semantic/mover.rb +153 -0
- data/lib/mxrb/semantic/onnx_embedder.rb +34 -0
- data/lib/mxrb/semantic/remover.rb +70 -0
- data/lib/mxrb/semantic/renamer.rb +211 -0
- data/lib/mxrb/semantic/tfidf_embedder.rb +46 -0
- data/lib/mxrb/semantic/vec_store.rb +75 -0
- data/lib/mxrb/team_server.rb +390 -0
- data/lib/mxrb/templates/project/10.24.0.73019.json +32 -0
- data/lib/mxrb/templates/project/11.12.1.json +32 -0
- data/lib/mxrb/templates/project/6.10.8.json +50 -0
- data/lib/mxrb/templates/project/7.17.0.json +50 -0
- data/lib/mxrb/templates/project/7.5.0.json +50 -0
- data/lib/mxrb/templates/project/9.6.1.29396.json +50 -0
- data/lib/mxrb/version.rb +5 -0
- data/lib/mxrb/widget_package.rb +338 -0
- data/lib/mxrb/widget_synchronizer.rb +31 -0
- data/lib/mxrb/writer.rb +3775 -0
- data/lib/mxrb.rb +188 -0
- data/marketplace/catalog.json +10 -0
- data/marketplace/modules/shared-kernel/domain/README.md +4 -0
- data/marketplace/modules/shared-kernel/module.rb +5 -0
- data/marketplace/modules/shared-kernel/mxrb-module.json +9 -0
- metadata +447 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 132cfec5b4d87e5d5efc2e9257d588952e7b8653b5fde7042dabadcd95da7ed0
|
|
4
|
+
data.tar.gz: d0e5191a8ad4f7f11a870ee7bd66d39b797a48326727d32e559827007724f462
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 309fd50dab116e2bd6c97ec070322e350147e9a360f93b22ed9c215309bc832a3241edc9dd1942af8b225da5b0e216fd3829a88be464d22f112506833dcd10b4
|
|
7
|
+
data.tar.gz: 8e99f2ebfaaef5b11956ad4c3698d7a03153a98c62c8bfb23915bc964a2128a7531ba8f54b2e92306aa3e59c742871f533da8e48b83db20c0220b95a2b5a0b0c
|
data/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Lucas Moura
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
data/README.de-DE.md
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# MXRB
|
|
2
|
+
|
|
3
|
+
[English](README.md) · [Português](README.pt-BR.md) · **Deutsch**
|
|
4
|
+
|
|
5
|
+
MXRB ist ein Ruby-First-Werkzeug zum Lesen, Schreiben, Exportieren, Validieren
|
|
6
|
+
und Testen von Mendix-Projekten (`.mpr`) ohne MDL oder `mxcli`.
|
|
7
|
+
|
|
8
|
+
## Funktionen
|
|
9
|
+
|
|
10
|
+
- tiefes Lesen und Schreiben von MPR v1/v2;
|
|
11
|
+
- Export in bearbeitbare Ruby-Projekte;
|
|
12
|
+
- idempotente Generierung mit Ruby-DSL;
|
|
13
|
+
- Scaffold für neue Projekte mit PascalCase-Hauptmodul;
|
|
14
|
+
- tiefe Ruby-Bearbeitung jeder nativen Unit mit verlustfreier Baseline;
|
|
15
|
+
- Vergleich, semantischer Diff, Referenzen und Impact-Analyse;
|
|
16
|
+
- sichere Umbenennung mit Vorschau;
|
|
17
|
+
- Verschieben eigenständiger Units zwischen Ordnern desselben Moduls;
|
|
18
|
+
- Entfernen eigenständiger Units nach Referenz- und Kind-Unit-Prüfung;
|
|
19
|
+
- Lint und ausführbare Modellbewertungen;
|
|
20
|
+
- Erkennung von nativem OQL und logische SQL-Ansicht nur bei vorhandenem OQL;
|
|
21
|
+
- isolierte, durch das Runtime synchronisierte PostgreSQL für direkte SQL-Abfragen;
|
|
22
|
+
- Analyse von PostgreSQL-/SQL-Server-Plänen und kumulativem PostgreSQL-Workload;
|
|
23
|
+
- funktionale Microflow-Tests lokal oder in Docker.
|
|
24
|
+
- Suche und Installation wiederverwendbarer Ruby-Module mit SHA-256-Lock.
|
|
25
|
+
|
|
26
|
+
Die Matrix bewahrt Mendix-5.21–11.12-Projekte strukturell. Eine exakte native
|
|
27
|
+
Mendix-5-Prüfung erfordert weiterhin Windows/Studio Pro und ist eine
|
|
28
|
+
ausdrückliche MXRB-Einschränkung; sie gehört nicht zum direkten automatischen
|
|
29
|
+
Toolchain-Gate.
|
|
30
|
+
|
|
31
|
+
## Voraussetzungen
|
|
32
|
+
|
|
33
|
+
Ruby 4.0+, SQLite3 und für offizielle Gates das exakte Mendix-Toolchain. Lokal
|
|
34
|
+
wird kompatibles Java benötigt; Docker stellt JDK und Runtime bereit.
|
|
35
|
+
|
|
36
|
+
```sh
|
|
37
|
+
bundle install
|
|
38
|
+
bundle exec mxrb validate App.mpr
|
|
39
|
+
bundle exec mxrb export App.mpr app-ruby
|
|
40
|
+
bundle exec mxrb compare original.mpr rebuilt.mpr
|
|
41
|
+
bundle exec mxrb module search
|
|
42
|
+
bundle exec mxrb module add shared-kernel
|
|
43
|
+
bundle exec mxrb cache status App.mpr
|
|
44
|
+
bundle exec mxrb cache warm App.mpr
|
|
45
|
+
bundle exec mxrb cache clear App.mpr
|
|
46
|
+
bundle exec mxrb oql App.mpr --dialect postgresql
|
|
47
|
+
bundle exec mxrb db up App.mpr
|
|
48
|
+
bundle exec mxrb db sql App.mpr 'SELECT * FROM "sales$order" LIMIT 20'
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Die MPR speichert das Modell, nicht die Anwendungsdaten. `db up` baut das
|
|
52
|
+
exakte portable Runtime und lässt es ein isoliertes PostgreSQL-Volume
|
|
53
|
+
synchronisieren. Der Zugriff ist auf Loopback beschränkt und verwendet ohne
|
|
54
|
+
ausdrückliches `--write` eine schreibgeschützte Rolle. Siehe
|
|
55
|
+
[OQL und lokaler SQL-Zugriff](docs/de-DE/oql-sql.md).
|
|
56
|
+
|
|
57
|
+
## Ruby-DSL
|
|
58
|
+
|
|
59
|
+
```ruby
|
|
60
|
+
Mxrb.define("Shop.mpr") do
|
|
61
|
+
mendix_version "11.12.1"
|
|
62
|
+
self.module :Sales do
|
|
63
|
+
entity :Order do
|
|
64
|
+
string :Number, documentation: "Stabile Bestellnummer"
|
|
65
|
+
decimal :Total, default: 0
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Bewertungen und Funktionstests
|
|
72
|
+
|
|
73
|
+
```ruby
|
|
74
|
+
artifact "Sales.Order", kind: :entity
|
|
75
|
+
no_call_cycles
|
|
76
|
+
no_missing_internal_references
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
```ruby
|
|
80
|
+
microflow "erstellt Bestellung", call: "Sales.ACT_CreateOrder"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
```sh
|
|
84
|
+
bundle exec mxrb evaluate Shop.mpr evaluation.rb
|
|
85
|
+
bundle exec mxrb test Shop.mpr functional_test.rb --docker
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
JUnit und MDL sind nicht erforderlich. Instrumentierung, Paket, Datenbank und
|
|
89
|
+
Uploads existieren nur in der wegwerfbaren Kopie; das Original bleibt unverändert.
|
|
90
|
+
Assertions prüfen Rückgabewerte und persistierten Zustand über
|
|
91
|
+
Entitäts-/XPath-Zählungen.
|
|
92
|
+
|
|
93
|
+
## Entwicklung
|
|
94
|
+
|
|
95
|
+
```sh
|
|
96
|
+
bundle exec rspec
|
|
97
|
+
MXRB_COVERAGE=1 bundle exec rspec
|
|
98
|
+
bundle exec ruby script/branch_report.rb
|
|
99
|
+
bundle exec rubocop
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Die Suite erzwingt 100 % Zeilen- und Branch-Abdeckung.
|
|
103
|
+
|
|
104
|
+
Siehe die [vollständige deutsche Dokumentation](docs/de-DE/README.md).
|
|
105
|
+
|
|
106
|
+
## Lizenz
|
|
107
|
+
|
|
108
|
+
MIT.
|
data/README.md
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# MXRB
|
|
2
|
+
|
|
3
|
+
**English** · [Português](README.pt-BR.md) · [Deutsch](README.de-DE.md)
|
|
4
|
+
|
|
5
|
+
MXRB is a Ruby-first toolkit for reading, writing, exporting, validating and
|
|
6
|
+
testing Mendix project models (`.mpr`) without using MDL or `mxcli`.
|
|
7
|
+
|
|
8
|
+
Ruby is the public interface. The official Mendix `mx`, `mxbuild` and Runtime
|
|
9
|
+
remain optional external gates for compatibility and functional execution.
|
|
10
|
+
|
|
11
|
+
## Current capabilities
|
|
12
|
+
|
|
13
|
+
- read and write MPR v1 and v2 projects;
|
|
14
|
+
- export complete projects into editable Ruby;
|
|
15
|
+
- generate idempotent MPRs from a Ruby DSL;
|
|
16
|
+
- scaffold a new Ruby-first project with its PascalCase application module;
|
|
17
|
+
- expose every native unit as editable deep Ruby while retaining a lossless baseline;
|
|
18
|
+
- compare structural snapshots and produce typed semantic diffs;
|
|
19
|
+
- inspect references, callers, callees and transitive impact;
|
|
20
|
+
- rename artifacts with a preview before applying changes;
|
|
21
|
+
- read and write native navigation profiles, role homes and recursive menus;
|
|
22
|
+
- preserve theme, widget, resource and Java assets with SHA-256 manifests;
|
|
23
|
+
- inventory design tokens, check contrast and preview atomic literal migration;
|
|
24
|
+
- discover native OQL and render safe logical SQL views only when OQL exists;
|
|
25
|
+
- materialize an isolated, Runtime-synchronized PostgreSQL for direct SQL inspection;
|
|
26
|
+
- analyze PostgreSQL/SQL Server plans and rank cumulative PostgreSQL workload pressure;
|
|
27
|
+
- move standalone units between folders in the same module with a preview;
|
|
28
|
+
- remove standalone units only after reference and child-unit safety checks;
|
|
29
|
+
- run static analysis and executable model evaluations in Ruby;
|
|
30
|
+
- execute functional microflow tests locally or in disposable containers.
|
|
31
|
+
- search and install reusable Ruby modules with a locked SHA-256 digest.
|
|
32
|
+
- write, inspect and compare deterministic MDA containers without invoking `mxbuild`;
|
|
33
|
+
- assemble executable portable Runtime ZIPs from materialized deployments and
|
|
34
|
+
installed version-matched Runtime files without invoking `mx` or `mxbuild`;
|
|
35
|
+
- preflight an existing MPR against its version-selected native web pipeline,
|
|
36
|
+
with precise unsupported widget, action, layout and nanoflow findings;
|
|
37
|
+
- clone, inspect and synchronize official Team Server Git repositories while
|
|
38
|
+
keeping PAT values in user-managed files.
|
|
39
|
+
|
|
40
|
+
The public validation matrix currently covers structural v1/v2 round trips
|
|
41
|
+
from Mendix 5.21 through 11.12 and official MxBuild checks where the native
|
|
42
|
+
toolchain is supported. Exact Mendix 5 validation still depends on
|
|
43
|
+
Windows/Studio Pro and remains a documented legacy limitation, but it is not a
|
|
44
|
+
current delivery gate. See
|
|
45
|
+
[the validation matrix](docs/en-US/validation-matrix.md) for the exact evidence and
|
|
46
|
+
confidence boundaries.
|
|
47
|
+
|
|
48
|
+
## Requirements
|
|
49
|
+
|
|
50
|
+
- Ruby 4.0 or newer;
|
|
51
|
+
- SQLite3;
|
|
52
|
+
- the exact Mendix Linux toolchain for official checks;
|
|
53
|
+
- Java matching the project when running locally, or Docker for containerized
|
|
54
|
+
builds and runtime tests.
|
|
55
|
+
|
|
56
|
+
Install dependencies:
|
|
57
|
+
|
|
58
|
+
```sh
|
|
59
|
+
bundle install
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Ruby DSL
|
|
63
|
+
|
|
64
|
+
```ruby
|
|
65
|
+
Mxrb.define("Shop.mpr") do
|
|
66
|
+
mendix_version "11.12.1"
|
|
67
|
+
|
|
68
|
+
self.module :Sales do
|
|
69
|
+
entity :Order do
|
|
70
|
+
string :Number, documentation: "Stable order number"
|
|
71
|
+
decimal :Total, default: 0
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
microflow :CreateOrder do
|
|
75
|
+
return_type :Order
|
|
76
|
+
create_object "Sales.Order", as: :order
|
|
77
|
+
return_value :order
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
```sh
|
|
84
|
+
bundle exec mxrb generate shop.rb
|
|
85
|
+
bundle exec mxrb validate Shop.mpr
|
|
86
|
+
bundle exec mxrb export Shop.mpr exported-shop
|
|
87
|
+
bundle exec mxrb compare original.mpr rebuilt.mpr
|
|
88
|
+
bundle exec mxrb module search
|
|
89
|
+
bundle exec mxrb module add shared-kernel
|
|
90
|
+
bundle exec mxrb cache status Shop.mpr
|
|
91
|
+
bundle exec mxrb cache warm Shop.mpr
|
|
92
|
+
bundle exec mxrb cache clear Shop.mpr
|
|
93
|
+
bundle exec mxrb oql Shop.mpr --dialect postgresql
|
|
94
|
+
bundle exec mxrb db up Shop.mpr
|
|
95
|
+
bundle exec mxrb db sql Shop.mpr 'SELECT * FROM "sales$order" LIMIT 20'
|
|
96
|
+
bundle exec mxrb pack Shop.mpr --output build/Shop.mda
|
|
97
|
+
bundle exec mxrb portable Shop.mpr --output build/runtime.zip
|
|
98
|
+
bundle exec mxrb team-server clone APP_ID ./shop --pat-file /secure/team-server.env
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
The MPR stores the model, not application data. `db up` builds the exact
|
|
102
|
+
portable Runtime and lets it synchronize an isolated PostgreSQL volume.
|
|
103
|
+
Database access is loopback-only and uses a read-only analyst role unless
|
|
104
|
+
`--write` is explicitly requested. See
|
|
105
|
+
[OQL and local SQL access](docs/en-US/oql-sql.md).
|
|
106
|
+
|
|
107
|
+
## Model evaluations
|
|
108
|
+
|
|
109
|
+
```ruby
|
|
110
|
+
# evaluation.rb
|
|
111
|
+
artifact "Sales.Order", kind: :entity
|
|
112
|
+
no_call_cycles
|
|
113
|
+
no_missing_internal_references
|
|
114
|
+
|
|
115
|
+
check "Order has a total" do |project|
|
|
116
|
+
project.find_artifact("Sales.Order.Total", kind: :attribute)
|
|
117
|
+
end
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
```sh
|
|
121
|
+
bundle exec mxrb evaluate Shop.mpr evaluation.rb
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Functional microflow tests
|
|
125
|
+
|
|
126
|
+
Functional definitions are Ruby and do not require JUnit:
|
|
127
|
+
|
|
128
|
+
```ruby
|
|
129
|
+
# functional_test.rb
|
|
130
|
+
microflow "creates an order", call: "Sales.ACT_CreateOrder"
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Run with the local toolchain:
|
|
134
|
+
|
|
135
|
+
```sh
|
|
136
|
+
JAVA_HOME=/path/to/jdk \
|
|
137
|
+
bundle exec mxrb test Shop.mpr functional_test.rb
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Or build and run inside disposable containers:
|
|
141
|
+
|
|
142
|
+
```sh
|
|
143
|
+
bundle exec mxrb test Shop.mpr functional_test.rb --docker
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
The source project is copied before instrumentation. Structural validation is
|
|
147
|
+
performed natively by MXRB. The instrumented functional build still requires
|
|
148
|
+
materializing changed microflows; that build, runtime database and uploaded
|
|
149
|
+
files are discarded after execution.
|
|
150
|
+
The functional scope verifies completion, exception handling, return values
|
|
151
|
+
and persisted state through entity/XPath count assertions.
|
|
152
|
+
|
|
153
|
+
## Development
|
|
154
|
+
|
|
155
|
+
```sh
|
|
156
|
+
bundle exec rspec
|
|
157
|
+
MXRB_COVERAGE=1 MXRB_LINE_COVERAGE_MIN=100 MXRB_BRANCH_COVERAGE_MIN=100 bundle exec rspec
|
|
158
|
+
bundle exec ruby script/branch_report.rb
|
|
159
|
+
bundle exec rubocop
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
CI and the local coverage helper enforce 100% line and 100% branch coverage.
|
|
163
|
+
The branch report lists any regression by source file and line.
|
|
164
|
+
|
|
165
|
+
Architecture and deeper writing guidance are available in
|
|
166
|
+
[the English documentation](docs/en-US/README.md). The complete documentation
|
|
167
|
+
is also available in [Portuguese](docs/pt-BR/README.md) and
|
|
168
|
+
[German](docs/de-DE/README.md).
|
|
169
|
+
|
|
170
|
+
## License
|
|
171
|
+
|
|
172
|
+
MXRB is available under the MIT License.
|
data/README.pt-BR.md
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# MXRB
|
|
2
|
+
|
|
3
|
+
[English](README.md) · **Português** · [Deutsch](README.de-DE.md)
|
|
4
|
+
|
|
5
|
+
MXRB é uma ferramenta Ruby-first para ler, escrever, exportar, validar e testar
|
|
6
|
+
projetos Mendix (`.mpr`) sem MDL ou `mxcli`.
|
|
7
|
+
|
|
8
|
+
## Capacidades
|
|
9
|
+
|
|
10
|
+
- leitura e escrita profunda de MPR v1/v2;
|
|
11
|
+
- exportação de projetos para Ruby editável;
|
|
12
|
+
- geração idempotente por DSL Ruby;
|
|
13
|
+
- scaffold de projeto novo com módulo principal em PascalCase;
|
|
14
|
+
- edição profunda em Ruby de toda unit nativa, com baseline sem perdas;
|
|
15
|
+
- comparação, diff semântico, referências e análise de impacto;
|
|
16
|
+
- renomeação segura com prévia;
|
|
17
|
+
- movimentação de units entre pastas do mesmo módulo com prévia;
|
|
18
|
+
- remoção de units independentes com verificação de referências e filhos;
|
|
19
|
+
- lint e avaliações executáveis de modelo;
|
|
20
|
+
- descoberta de OQL nativo e visão SQL lógica somente quando o projeto contém OQL;
|
|
21
|
+
- PostgreSQL isolado e sincronizado pelo Runtime para consultas SQL diretas;
|
|
22
|
+
- análise de planos PostgreSQL/SQL Server e workload cumulativo PostgreSQL;
|
|
23
|
+
- testes funcionais de microflows localmente ou em Docker.
|
|
24
|
+
- busca e instalação de módulos Ruby reutilizáveis com SHA-256 travado.
|
|
25
|
+
|
|
26
|
+
A matriz preserva estruturalmente projetos Mendix 5.21–11.12. A validação
|
|
27
|
+
nativa exata do Mendix 5 ainda depende de Windows/Studio Pro e é uma limitação
|
|
28
|
+
explícita do MXRB; ela não faz parte do gate automatizado direto.
|
|
29
|
+
|
|
30
|
+
## Requisitos
|
|
31
|
+
|
|
32
|
+
Ruby 4.0+, SQLite3 e, para gates oficiais, o toolchain Mendix exato. O modo
|
|
33
|
+
local precisa do Java compatível; o modo Docker fornece JDK e Runtime.
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
bundle install
|
|
37
|
+
bundle exec mxrb init vet_clinic
|
|
38
|
+
bundle exec mxrb validate App.mpr
|
|
39
|
+
bundle exec mxrb export App.mpr app-ruby
|
|
40
|
+
bundle exec mxrb compare original.mpr reconstruido.mpr
|
|
41
|
+
bundle exec mxrb module search
|
|
42
|
+
bundle exec mxrb module add shared-kernel
|
|
43
|
+
bundle exec mxrb cache status App.mpr
|
|
44
|
+
bundle exec mxrb cache warm App.mpr
|
|
45
|
+
bundle exec mxrb cache clear App.mpr
|
|
46
|
+
bundle exec mxrb oql App.mpr --dialect postgresql
|
|
47
|
+
bundle exec mxrb db up App.mpr
|
|
48
|
+
bundle exec mxrb db sql App.mpr 'SELECT * FROM "sales$order" LIMIT 20'
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
O MPR armazena o modelo, não os dados da aplicação. `db up` compila o Runtime
|
|
52
|
+
portátil exato e permite que ele sincronize um volume PostgreSQL isolado. O
|
|
53
|
+
acesso é restrito a loopback e usa um papel somente leitura, salvo quando
|
|
54
|
+
`--write` é solicitado explicitamente. Consulte
|
|
55
|
+
[OQL e acesso SQL local](docs/pt-BR/oql-sql.md).
|
|
56
|
+
|
|
57
|
+
## Ruby DSL
|
|
58
|
+
|
|
59
|
+
```ruby
|
|
60
|
+
Mxrb.define("Shop.mpr") do
|
|
61
|
+
mendix_version "11.12.1"
|
|
62
|
+
self.module :Sales do
|
|
63
|
+
entity :Order do
|
|
64
|
+
string :Number, documentation: "Número estável do pedido"
|
|
65
|
+
decimal :Total, default: 0
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Avaliações e testes funcionais
|
|
72
|
+
|
|
73
|
+
```ruby
|
|
74
|
+
artifact "Sales.Order", kind: :entity
|
|
75
|
+
no_call_cycles
|
|
76
|
+
no_missing_internal_references
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
```ruby
|
|
80
|
+
microflow "cria pedido", call: "Sales.ACT_CreateOrder"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
```sh
|
|
84
|
+
bundle exec mxrb evaluate Shop.mpr evaluation.rb
|
|
85
|
+
bundle exec mxrb test Shop.mpr functional_test.rb --docker
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Não há JUnit ou MDL. A instrumentação, o pacote, o banco e os uploads existem
|
|
89
|
+
somente na cópia descartável; o projeto original não é alterado.
|
|
90
|
+
As asserções cobrem retorno do microflow e estado persistido por contagens
|
|
91
|
+
de entidade/XPath.
|
|
92
|
+
|
|
93
|
+
## Desenvolvimento
|
|
94
|
+
|
|
95
|
+
```sh
|
|
96
|
+
bundle exec rspec
|
|
97
|
+
MXRB_COVERAGE=1 bundle exec rspec
|
|
98
|
+
bundle exec ruby script/branch_report.rb
|
|
99
|
+
bundle exec rubocop
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
A suíte exige 100% de cobertura de linhas e branches. O relatório de branches
|
|
103
|
+
lista qualquer regressão por arquivo e linha.
|
|
104
|
+
|
|
105
|
+
Consulte a [documentação completa em português](docs/pt-BR/README.md).
|
|
106
|
+
|
|
107
|
+
## Licença
|
|
108
|
+
|
|
109
|
+
MIT.
|