expressir 2.1.30 → 2.1.31

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.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/docs.yml +98 -0
  3. data/.github/workflows/links.yml +100 -0
  4. data/.github/workflows/rake.yml +4 -0
  5. data/.github/workflows/release.yml +5 -0
  6. data/.github/workflows/validate_schemas.yml +1 -1
  7. data/.gitignore +3 -0
  8. data/.rubocop.yml +1 -1
  9. data/.rubocop_todo.yml +244 -39
  10. data/Gemfile +2 -1
  11. data/README.adoc +621 -54
  12. data/docs/Gemfile +12 -0
  13. data/docs/_config.yml +141 -0
  14. data/docs/_guides/changes/changes-format.adoc +778 -0
  15. data/docs/_guides/changes/importing-eengine.adoc +898 -0
  16. data/docs/_guides/changes/index.adoc +396 -0
  17. data/docs/_guides/changes/programmatic-usage.adoc +1038 -0
  18. data/docs/_guides/changes/validating-changes.adoc +681 -0
  19. data/docs/_guides/cli/benchmark-performance.adoc +834 -0
  20. data/docs/_guides/cli/coverage-analysis.adoc +921 -0
  21. data/docs/_guides/cli/format-schemas.adoc +547 -0
  22. data/docs/_guides/cli/index.adoc +8 -0
  23. data/docs/_guides/cli/managing-changes.adoc +927 -0
  24. data/docs/_guides/cli/validate-ascii.adoc +645 -0
  25. data/docs/_guides/cli/validate-schemas.adoc +534 -0
  26. data/docs/_guides/index.adoc +165 -0
  27. data/docs/_guides/ler/creating-packages.adoc +664 -0
  28. data/docs/_guides/ler/index.adoc +305 -0
  29. data/docs/_guides/ler/loading-packages.adoc +707 -0
  30. data/docs/_guides/ler/package-formats.adoc +748 -0
  31. data/docs/_guides/ler/querying-packages.adoc +826 -0
  32. data/docs/_guides/ler/validating-packages.adoc +750 -0
  33. data/docs/_guides/liquid/basic-templates.adoc +813 -0
  34. data/docs/_guides/liquid/documentation-generation.adoc +1042 -0
  35. data/docs/_guides/liquid/drops-reference.adoc +829 -0
  36. data/docs/_guides/liquid/filters-and-tags.adoc +912 -0
  37. data/docs/_guides/liquid/index.adoc +468 -0
  38. data/docs/_guides/manifests/creating-manifests.adoc +483 -0
  39. data/docs/_guides/manifests/index.adoc +307 -0
  40. data/docs/_guides/manifests/resolving-manifests.adoc +557 -0
  41. data/docs/_guides/manifests/validating-manifests.adoc +713 -0
  42. data/docs/_guides/ruby-api/formatting-schemas.adoc +605 -0
  43. data/docs/_guides/ruby-api/index.adoc +257 -0
  44. data/docs/_guides/ruby-api/parsing-files.adoc +421 -0
  45. data/docs/_guides/ruby-api/search-engine.adoc +609 -0
  46. data/docs/_guides/ruby-api/working-with-repository.adoc +577 -0
  47. data/docs/_pages/data-model.adoc +665 -0
  48. data/docs/_pages/express-language.adoc +506 -0
  49. data/docs/_pages/getting-started.adoc +414 -0
  50. data/docs/_pages/index.adoc +116 -0
  51. data/docs/_pages/introduction.adoc +256 -0
  52. data/docs/_pages/ler-packages.adoc +837 -0
  53. data/docs/_pages/parsers.adoc +683 -0
  54. data/docs/_pages/schema-manifests.adoc +431 -0
  55. data/docs/_references/index.adoc +228 -0
  56. data/docs/_tutorials/creating-ler-package.adoc +735 -0
  57. data/docs/_tutorials/documentation-coverage.adoc +795 -0
  58. data/docs/_tutorials/index.adoc +221 -0
  59. data/docs/_tutorials/liquid-templates.adoc +806 -0
  60. data/docs/_tutorials/parsing-your-first-schema.adoc +522 -0
  61. data/docs/_tutorials/querying-schemas.adoc +751 -0
  62. data/docs/_tutorials/working-with-multiple-schemas.adoc +676 -0
  63. data/docs/index.adoc +242 -0
  64. data/docs/lychee.toml +84 -0
  65. data/examples/demo_ler_usage.sh +86 -0
  66. data/examples/ler/README.md +111 -0
  67. data/examples/ler/simple_example.ler +0 -0
  68. data/examples/ler/simple_schema.exp +33 -0
  69. data/examples/ler_build.rb +75 -0
  70. data/examples/ler_cli.rb +79 -0
  71. data/examples/ler_demo_complete.rb +276 -0
  72. data/examples/ler_query.rb +91 -0
  73. data/examples/ler_query_examples.rb +305 -0
  74. data/examples/ler_stats.rb +81 -0
  75. data/examples/phase3_demo.rb +159 -0
  76. data/examples/query_demo_simple.rb +131 -0
  77. data/expressir.gemspec +2 -0
  78. data/lib/expressir/cli.rb +12 -4
  79. data/lib/expressir/commands/manifest.rb +427 -0
  80. data/lib/expressir/commands/package.rb +1274 -0
  81. data/lib/expressir/commands/validate.rb +70 -37
  82. data/lib/expressir/commands/validate_ascii.rb +607 -0
  83. data/lib/expressir/commands/validate_load.rb +88 -0
  84. data/lib/expressir/express/formatter.rb +5 -1
  85. data/lib/expressir/express/formatters/remark_item_formatter.rb +25 -0
  86. data/lib/expressir/express/parser.rb +33 -0
  87. data/lib/expressir/manifest/resolver.rb +213 -0
  88. data/lib/expressir/manifest/validator.rb +195 -0
  89. data/lib/expressir/model/declarations/entity.rb +6 -0
  90. data/lib/expressir/model/dependency_resolver.rb +270 -0
  91. data/lib/expressir/model/indexes/entity_index.rb +103 -0
  92. data/lib/expressir/model/indexes/reference_index.rb +148 -0
  93. data/lib/expressir/model/indexes/type_index.rb +149 -0
  94. data/lib/expressir/model/interface_validator.rb +384 -0
  95. data/lib/expressir/model/repository.rb +400 -5
  96. data/lib/expressir/model/repository_validator.rb +295 -0
  97. data/lib/expressir/model/search_engine.rb +525 -0
  98. data/lib/expressir/model.rb +4 -94
  99. data/lib/expressir/package/builder.rb +200 -0
  100. data/lib/expressir/package/metadata.rb +81 -0
  101. data/lib/expressir/package/reader.rb +165 -0
  102. data/lib/expressir/schema_manifest.rb +11 -1
  103. data/lib/expressir/version.rb +1 -1
  104. data/lib/expressir.rb +15 -2
  105. metadata +114 -4
  106. data/docs/benchmarking.adoc +0 -107
  107. data/docs/liquid_drops.adoc +0 -1547
@@ -0,0 +1,396 @@
1
+ ---
2
+ title: Changes
3
+ nav_order: 4
4
+ has_children: true
5
+ ---
6
+
7
+ = Changes
8
+
9
+ == Purpose
10
+
11
+ EXPRESS Changes files track schema modifications across versions using a
12
+ standardized YAML format. They provide a structured way to document additions,
13
+ modifications, and deletions in EXPRESS schemas, making version management and
14
+ change tracking systematic and machine-readable.
15
+
16
+ == What are EXPRESS Changes files?
17
+
18
+ EXPRESS Changes files (`.changes.yaml`) document how EXPRESS schemas evolve
19
+ over time. Each file tracks changes for a single schema across multiple
20
+ versions, organized into categories:
21
+
22
+ * **Additions**: New elements added to the schema
23
+ * **Modifications**: Existing elements that were modified
24
+ * **Deletions**: Elements removed from the schema
25
+ * **Mappings**: Mapping-related changes (for ARM/MIM modules)
26
+
27
+ == Benefits of Changes files
28
+
29
+ === Version tracking
30
+
31
+ Structured history:: Maintain a complete, machine-readable history of schema
32
+ changes across all versions.
33
+
34
+ Version comparison:: Easily compare what changed between any two versions.
35
+
36
+ Documentation integration:: Generate release notes and change summaries
37
+ automatically from structured data.
38
+
39
+ === Collaboration
40
+
41
+ Team coordination:: Team members can see what changed and why across all
42
+ versions.
43
+
44
+ Review process:: Changes can be reviewed before being incorporated into
45
+ documentation.
46
+
47
+ Audit trail:: Complete record of when changes were made and what was affected.
48
+
49
+ === Automation
50
+
51
+ Import from tools:: Automatically import changes from Express Engine comparison
52
+ reports.
53
+
54
+ Validation:: Validate changes files to ensure completeness and correctness.
55
+
56
+ Documentation generation:: Use changes data to generate release notes,
57
+ changelogs, and migration guides.
58
+
59
+ == File format
60
+
61
+ Changes files use YAML format with a simple, hierarchical structure:
62
+
63
+ [source,yaml]
64
+ ----
65
+ schema: action_schema
66
+ versions:
67
+ - version: 2
68
+ description: Added new functionality
69
+ additions:
70
+ - type: ENTITY
71
+ name: new_entity
72
+ modifications:
73
+ - type: FUNCTION
74
+ name: updated_function
75
+ deletions:
76
+ - type: CONSTANT
77
+ name: removed_constant
78
+ - version: 3
79
+ description: Further improvements
80
+ additions:
81
+ - type: TYPE
82
+ name: new_type
83
+ ----
84
+
85
+ == When to use Changes files
86
+
87
+ === Active schema development
88
+
89
+ Use Changes files when:
90
+
91
+ * Developing schemas with multiple versions
92
+ * Tracking changes for standards documentation
93
+ * Coordinating changes across teams
94
+ * Generating automated documentation
95
+ * Maintaining compatibility information
96
+
97
+ === Migration scenarios
98
+
99
+ Changes files help with:
100
+
101
+ * Understanding what changed between versions
102
+ * Planning migration strategies
103
+ * Identifying breaking changes
104
+ * Documenting upgrade paths
105
+
106
+ == Workflows
107
+
108
+ === Manual workflow
109
+
110
+ [source]
111
+ ----
112
+ 1. Modify EXPRESS schema
113
+ 2. Document changes in .changes.yaml
114
+ 3. Validate changes file
115
+ 4. Commit both schema and changes
116
+ 5. Generate documentation from changes
117
+ ----
118
+
119
+ === Express Engine workflow
120
+
121
+ [source]
122
+ ----
123
+ 1. Compare schema versions in Express Engine
124
+ 2. Export comparison report as XML
125
+ 3. Import XML to .changes.yaml
126
+ 4. Review and edit descriptions if needed
127
+ 5. Validate changes file
128
+ 6. Generate documentation
129
+ ----
130
+
131
+ === Continuous integration workflow
132
+
133
+ [source]
134
+ ----
135
+ 1. Schema changes committed
136
+ 2. CI runs Express Engine comparison
137
+ 3. CI imports changes automatically
138
+ 4. CI validates changes file
139
+ 5. CI generates change documentation
140
+ 6. CI builds updated documentation site
141
+ ----
142
+
143
+ == CLI vs API usage
144
+
145
+ === Command-line interface
146
+
147
+ Best for:
148
+
149
+ * Validating changes files
150
+ * Importing from Express Engine XML
151
+ * One-off operations
152
+ * CI/CD automation
153
+ * Quick validation checks
154
+
155
+ .Example commands
156
+ [example]
157
+ ====
158
+ [source,bash]
159
+ ----
160
+ # Validate changes file
161
+ expressir changes validate schema.changes.yaml
162
+
163
+ # Import from Express Engine
164
+ expressir changes import-eengine comparison.xml schema_name "2" \
165
+ -o schema.changes.yaml
166
+
167
+ # Validate and normalize
168
+ expressir changes validate schema.changes.yaml --normalize --in-place
169
+ ----
170
+ ====
171
+
172
+ === Ruby API
173
+
174
+ Best for:
175
+
176
+ * Creating changes programmatically
177
+ * Integrating with tools
178
+ * Custom processing workflows
179
+ * Building automation
180
+ * Generating reports
181
+
182
+ .Example code
183
+ [example]
184
+ ====
185
+ [source,ruby]
186
+ ----
187
+ # Load changes file
188
+ require "expressir/changes"
189
+ changes = Expressir::Changes::SchemaChange.from_file(
190
+ "schema.changes.yaml"
191
+ )
192
+
193
+ # Add new version
194
+ changes.add_or_update_version("4", "New features", {
195
+ additions: [
196
+ Expressir::Changes::ItemChange.new(
197
+ type: "ENTITY",
198
+ name: "new_entity"
199
+ )
200
+ ]
201
+ })
202
+
203
+ # Save changes
204
+ changes.to_file("schema.changes.yaml")
205
+ ----
206
+ ====
207
+
208
+ == Express Engine integration
209
+
210
+ === What is Express Engine?
211
+
212
+ Express Engine (eengine) is a commercial tool for working with EXPRESS schemas.
213
+ It can compare two schema versions and generate a detailed XML comparison
214
+ report.
215
+
216
+ Expressir can import these comparison reports to create or update Changes
217
+ files automatically.
218
+
219
+ === Three comparison modes
220
+
221
+ Schema mode:: Compares complete schema structures
222
+ +
223
+ [source,xml]
224
+ ----
225
+ <schema.changes schema_name="action_schema">
226
+ <schema.additions>...</schema.additions>
227
+ <schema.modifications>...</schema.modifications>
228
+ <schema.deletions>...</schema.deletions>
229
+ </schema.changes>
230
+ ----
231
+
232
+ ARM mode:: Compares Application Reference Model schemas
233
+ +
234
+ [source,xml]
235
+ ----
236
+ <arm.changes schema_name="action_arm">
237
+ <arm.additions>...</arm.additions>
238
+ <arm.modifications>...</arm.modifications>
239
+ <arm.deletions>...</arm.deletions>
240
+ </arm.changes>
241
+ ----
242
+
243
+ MIM mode:: Compares Module Implementation Model schemas
244
+ +
245
+ [source,xml]
246
+ ----
247
+ <mim.changes schema_name="action_mim">
248
+ <mim.additions>...</mim.additions>
249
+ <mim.modifications>...</mim.modifications>
250
+ <mim.deletions>...</mim.deletions>
251
+ </mim.changes>
252
+ ----
253
+
254
+ All three modes are automatically detected and handled by Expressir's import
255
+ command.
256
+
257
+ == Change types
258
+
259
+ Express Changes files track different types of EXPRESS constructs:
260
+
261
+ Schema-level entities::
262
+ * `ENTITY` - Entity definitions
263
+ * `TYPE` - Type definitions
264
+ * `FUNCTION` - Function definitions
265
+ * `PROCEDURE` - Procedure definitions
266
+ * `RULE` - Rule definitions
267
+ * `CONSTANT` - Constant definitions
268
+ * `SUBTYPE_CONSTRAINT` - Subtype constraints
269
+
270
+ Interface changes::
271
+ * `USE_FROM` - Interface imports with `interfaced_items`
272
+ * `REFERENCE_FROM` - Interface references with `interfaced_items`
273
+
274
+ The `interfaced_items` field specifies which items are being imported or
275
+ referenced from another schema.
276
+
277
+ == Guide contents
278
+
279
+ This section provides comprehensive documentation for working with EXPRESS
280
+ Changes files:
281
+
282
+ link:changes-format.html[Changes Format]:: Complete YAML format specification
283
+ with field descriptions and examples
284
+
285
+ link:validating-changes.html[Validating Changes]:: How to validate and
286
+ normalize changes files
287
+
288
+ link:importing-eengine.html[Importing from Express Engine]:: Converting Express
289
+ Engine XML reports to Changes format
290
+
291
+ link:programmatic-usage.html[Programmatic Usage]:: Using the Ruby API to create
292
+ and manage changes
293
+
294
+ == Quick examples
295
+
296
+ === Creating a simple changes file
297
+
298
+ [source,yaml]
299
+ ----
300
+ schema: my_schema
301
+ versions:
302
+ - version: 2
303
+ description: Added support for new features
304
+ additions:
305
+ - type: ENTITY
306
+ name: new_feature_entity
307
+ description:
308
+ - Provides support for advanced features
309
+ modifications:
310
+ - type: FUNCTION
311
+ name: existing_function
312
+ description:
313
+ - Updated parameters
314
+ - Improved performance
315
+ ----
316
+
317
+ === Interface changes
318
+
319
+ [source,yaml]
320
+ ----
321
+ schema: my_schema
322
+ versions:
323
+ - version: 2
324
+ description: Added external references
325
+ additions:
326
+ - type: USE_FROM
327
+ name: geometry_schema
328
+ interfaced_items: point
329
+ - type: REFERENCE_FROM
330
+ name: measure_schema
331
+ interfaced_items: length_measure
332
+ ----
333
+
334
+ === Multiple versions
335
+
336
+ [source,yaml]
337
+ ----
338
+ schema: my_schema
339
+ versions:
340
+ - version: 2
341
+ description: Initial enhancements
342
+ additions:
343
+ - type: ENTITY
344
+ name: entity_v2
345
+ - version: 3
346
+ description: Further improvements
347
+ modifications:
348
+ - type: ENTITY
349
+ name: entity_v2
350
+ description:
351
+ - Added new attributes
352
+ - version: 4
353
+ description: Removed deprecated items
354
+ deletions:
355
+ - type: FUNCTION
356
+ name: old_function
357
+ ----
358
+
359
+ == Next steps
360
+
361
+ Start with these guides based on your needs:
362
+
363
+ For understanding format:: Read link:changes-format.html[Changes Format] for
364
+ complete YAML structure specification
365
+
366
+ For validation:: See link:validating-changes.html[Validating Changes] to learn
367
+ validation and normalization
368
+
369
+ For Express Engine users:: Check
370
+ link:importing-eengine.html[Importing from Express Engine] for XML import
371
+ workflows
372
+
373
+ For developers:: Explore link:programmatic-usage.html[Programmatic Usage] for
374
+ Ruby API documentation
375
+
376
+ == Summary
377
+
378
+ EXPRESS Changes files provide structured, machine-readable change tracking:
379
+
380
+ * YAML format for easy editing and version control
381
+ * Organized by version with categorized changes
382
+ * Support for all EXPRESS construct types
383
+ * Import capability from Express Engine XML
384
+ * Validation and normalization tools
385
+ * Both CLI and API access
386
+ * Integration with documentation workflows
387
+
388
+ Key takeaways:
389
+
390
+ * Use Changes files for systematic version tracking
391
+ * Validate files before committing
392
+ * Import from Express Engine for automation
393
+ * Include descriptive information for each change
394
+ * Track interface changes with `interfaced_items`
395
+ * Build change history incrementally across versions
396
+ * Integrate with CI/CD for automation