lutaml 0.10.15 → 0.10.17

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 (26) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +7 -62
  3. data/CLAUDE.md +38 -0
  4. data/lib/lutaml/cli/interactive_shell/help_display.rb +37 -35
  5. data/lib/lutaml/cli/uml/build_command.rb +152 -218
  6. data/lib/lutaml/cli/uml/diagram_command.rb +242 -258
  7. data/lib/lutaml/formatter/graphviz.rb +15 -11
  8. data/lib/lutaml/qea/database.rb +76 -287
  9. data/lib/lutaml/uml/model_helpers.rb +21 -0
  10. data/lib/lutaml/uml_repository/index_builders/association_index.rb +1 -1
  11. data/lib/lutaml/uml_repository/package_loader.rb +5 -2
  12. data/lib/lutaml/uml_repository/presenters/enum_presenter.rb +1 -1
  13. data/lib/lutaml/uml_repository/queries/search_query.rb +114 -277
  14. data/lib/lutaml/uml_repository/repository.rb +21 -35
  15. data/lib/lutaml/uml_repository/repository_enhanced.rb +15 -27
  16. data/lib/lutaml/uml_repository/static_site/association_serialization.rb +11 -23
  17. data/lib/lutaml/uml_repository/static_site/data_transformer.rb +0 -14
  18. data/lib/lutaml/uml_repository/static_site/generator.rb +20 -36
  19. data/lib/lutaml/uml_repository/static_site/serializers/attribute_serializer.rb +0 -14
  20. data/lib/lutaml/uml_repository/static_site/serializers/class_serializer.rb +0 -14
  21. data/lib/lutaml/uml_repository/static_site/serializers/inheritance_resolver.rb +13 -21
  22. data/lib/lutaml/uml_repository/static_site/serializers/package_serializer.rb +0 -16
  23. data/lib/lutaml/uml_repository/validators/repository_validator.rb +36 -51
  24. data/lib/lutaml/version.rb +1 -1
  25. data/lib/lutaml/xmi/liquid_drops/klass_drop.rb +15 -13
  26. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cb62e96e62545c49b005e89cc972bc7dfb9510dbd9867831db9b6f4ab0bbcc40
4
- data.tar.gz: 3975abff3b9a8e54714a76209d5917ed1bcf291baf9dcdf405c658d211934714
3
+ metadata.gz: 330cf6a6d4021d51bfb8ee166e4f6dce5697ed5fff82cdc6043a6d304d7e853d
4
+ data.tar.gz: 4bd730f3e5a2ae0427d2157bb862788ddd516280d86b9f791ec3e46473710dac
5
5
  SHA512:
6
- metadata.gz: a09b2b6074e7fb3fa04d2084b16c35ac5f9c115708ac8f50efaac08b5999cd21613053df9eebe487a714c361317e4411de2ecc8d2286b8100e3fe23102854265
7
- data.tar.gz: 6d6c1dd06afac86c94ba1047087914b59b95d09e11308482f90bb3b99b4b65633eb443a565200842f07ce51064b14e2441a4406f408697a8fe55ef67ce33c9eb
6
+ metadata.gz: b1cf1135be7d630644fbf782c1070231a54c0c3341b8c1be7c688a4d3c29d2aa34c26ef900f056c8d50f9c10b674e0470d46646de49b5386de51896e45a79ee3
7
+ data.tar.gz: 5b716ba1f4bd818a81f7fd54567add05c1ed0682fb407379db5d086fc8c636586e5a162480b821a23be4977d31ebe986be61531851faad122ddf0c74785bd59c
data/.rubocop_todo.yml CHANGED
@@ -1,24 +1,21 @@
1
1
  # This configuration was generated by
2
- # `rubocop --auto-gen-config`
3
- # on 2026-05-13 02:18:49 UTC using RuboCop version 1.86.1.
2
+ # `rubocop --auto-gen-config --no-offense-counts`
3
+ # on 2026-05-13 08:26:11 UTC using RuboCop version 1.86.1.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
- # Offense count: 155
10
9
  # This cop supports safe autocorrection (--autocorrect).
11
10
  # Configuration parameters: Max, AllowHeredoc, AllowURI, AllowQualifiedName, URISchemes, AllowRBSInlineAnnotation, AllowCopDirectives, AllowedPatterns, SplitStrings.
12
11
  # URISchemes: http, https
13
12
  Layout/LineLength:
14
13
  Enabled: false
15
14
 
16
- # Offense count: 1
17
15
  Lint/BinaryOperatorWithIdenticalOperands:
18
16
  Exclude:
19
17
  - 'spec/lutaml/qea/lookup_tables_spec.rb'
20
18
 
21
- # Offense count: 15
22
19
  # Configuration parameters: AllowedMethods.
23
20
  # AllowedMethods: enums
24
21
  Lint/ConstantDefinitionInBlock:
@@ -29,14 +26,12 @@ Lint/ConstantDefinitionInBlock:
29
26
  - 'spec/lutaml/model_transformations_spec.rb'
30
27
  - 'spec/lutaml/uml_repository/presenters/presenter_factory_spec.rb'
31
28
 
32
- # Offense count: 2
33
29
  # Configuration parameters: IgnoreLiteralBranches, IgnoreConstantBranches, IgnoreDuplicateElseBranch.
34
30
  Lint/DuplicateBranch:
35
31
  Exclude:
36
32
  - 'lib/lutaml/uml/model_helpers.rb'
37
33
  - 'lib/lutaml/uml_repository/queries/package_query.rb'
38
34
 
39
- # Offense count: 4
40
35
  # Configuration parameters: AllowComments, AllowEmptyLambdas.
41
36
  Lint/EmptyBlock:
42
37
  Exclude:
@@ -45,7 +40,6 @@ Lint/EmptyBlock:
45
40
  - 'spec/lutaml/uml_repository/package_exporter_spec.rb'
46
41
  - 'spec/lutaml/uml_repository/repository_spec.rb'
47
42
 
48
- # Offense count: 3
49
43
  # This cop supports safe autocorrection (--autocorrect).
50
44
  # Configuration parameters: AllowComments.
51
45
  Lint/EmptyConditionalBody:
@@ -53,18 +47,15 @@ Lint/EmptyConditionalBody:
53
47
  - 'spec/integration/qea_xmi_equivalency_spec.rb'
54
48
  - 'spec/lutaml/qea/verification/equivalence_integration_spec.rb'
55
49
 
56
- # Offense count: 4
57
50
  Lint/IneffectiveAccessModifier:
58
51
  Exclude:
59
52
  - 'lib/lutaml/uml_repository/repository_enhanced.rb'
60
53
 
61
- # Offense count: 1
62
54
  # Configuration parameters: AllowedParentClasses.
63
55
  Lint/MissingSuper:
64
56
  Exclude:
65
57
  - 'lib/lutaml/uml_repository/lazy_repository.rb'
66
58
 
67
- # Offense count: 1
68
59
  # This cop supports safe autocorrection (--autocorrect).
69
60
  # Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods, IgnoreNotImplementedMethods, NotImplementedExceptions.
70
61
  # NotImplementedExceptions: NotImplementedError
@@ -72,24 +63,24 @@ Lint/UnusedMethodArgument:
72
63
  Exclude:
73
64
  - 'lib/lutaml/cli/uml/export_command.rb'
74
65
 
75
- # Offense count: 3
76
66
  Lint/UselessConstantScoping:
77
67
  Exclude:
78
68
  - 'lib/lutaml/cli/interactive_shell.rb'
69
+ - 'lib/lutaml/cli/uml/diagram_command.rb'
79
70
  - 'lib/lutaml/qea/factory/ea_to_uml_factory.rb'
71
+ - 'lib/lutaml/uml_repository/static_site/generator.rb'
72
+ - 'lib/lutaml/uml_repository/static_site/serializers/inheritance_resolver.rb'
80
73
 
81
- # Offense count: 8
82
74
  # Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes, Max.
83
75
  Metrics/AbcSize:
84
76
  Exclude:
85
77
  - 'lib/lutaml/cli/interactive_shell/query_commands.rb'
78
+ - 'lib/lutaml/cli/uml/diagram_command.rb'
86
79
  - 'lib/lutaml/qea/factory/generalization_builder.rb'
87
80
  - 'lib/lutaml/uml_repository/exporters/markdown/class_page_builder.rb'
88
81
  - 'lib/lutaml/uml_repository/queries/search_query.rb'
89
82
  - 'lib/lutaml/uml_repository/static_site/serializers/class_serializer.rb'
90
- - 'lib/lutaml/xmi/liquid_drops/klass_drop.rb'
91
83
 
92
- # Offense count: 4
93
84
  # Configuration parameters: AllowedMethods, AllowedPatterns, Max.
94
85
  Metrics/CyclomaticComplexity:
95
86
  Exclude:
@@ -98,24 +89,20 @@ Metrics/CyclomaticComplexity:
98
89
  - 'lib/lutaml/uml_repository/queries/search_query.rb'
99
90
  - 'lib/lutaml/uml_repository/static_site/serializers/class_serializer.rb'
100
91
 
101
- # Offense count: 48
102
92
  # Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns.
103
93
  Metrics/MethodLength:
104
- Max: 18
94
+ Max: 17
105
95
 
106
- # Offense count: 4
107
96
  # Configuration parameters: CountKeywordArgs, MaxOptionalParameters.
108
97
  Metrics/ParameterLists:
109
98
  Max: 7
110
99
 
111
- # Offense count: 2
112
100
  # Configuration parameters: AllowedMethods, AllowedPatterns, Max.
113
101
  Metrics/PerceivedComplexity:
114
102
  Exclude:
115
103
  - 'lib/lutaml/qea/factory/ea_to_uml_factory.rb'
116
104
  - 'lib/lutaml/uml_repository/static_site/serializers/class_serializer.rb'
117
105
 
118
- # Offense count: 3
119
106
  # Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames.
120
107
  # AllowedNames: as, at, by, cc, db, id, if, in, io, ip, of, on, os, pp, to
121
108
  Naming/MethodParameterName:
@@ -124,7 +111,6 @@ Naming/MethodParameterName:
124
111
  - 'lib/lutaml/uml_repository/static_site/generator.rb'
125
112
  - 'spec/lutaml/parsers/serialize_xmi_to_liquid_spec.rb'
126
113
 
127
- # Offense count: 3
128
114
  # Configuration parameters: Mode, AllowedMethods, AllowedPatterns, AllowBangMethods, WaywardPredicates.
129
115
  # AllowedMethods: call
130
116
  # WaywardPredicates: infinite?, nonzero?
@@ -133,30 +119,25 @@ Naming/PredicateMethod:
133
119
  - 'lib/lutaml/qea/factory/document_builder.rb'
134
120
  - 'spec/lutaml/xmi/liquid_drops/nil_safety_spec.rb'
135
121
 
136
- # Offense count: 2
137
122
  # Configuration parameters: MinSize.
138
123
  Performance/CollectionLiteralInLoop:
139
124
  Exclude:
140
125
  - 'spec/lutaml/qea/infrastructure/table_reader_spec.rb'
141
126
  - 'spec/lutaml/uml_repository/index_builder_spec.rb'
142
127
 
143
- # Offense count: 2
144
128
  Performance/MapMethodChain:
145
129
  Exclude:
146
130
  - 'lib/lutaml/cli/output_formatter.rb'
147
131
  - 'lib/lutaml/qea/models/ea_diagram_link.rb'
148
132
 
149
- # Offense count: 5
150
133
  RSpec/AnyInstance:
151
134
  Exclude:
152
135
  - 'spec/lutaml/uml_repository/static_site/generator_spec.rb'
153
136
 
154
- # Offense count: 1
155
137
  RSpec/BeforeAfterAll:
156
138
  Exclude:
157
139
  - 'spec/lutaml/qea/verification/comprehensive_equivalence_spec.rb'
158
140
 
159
- # Offense count: 24
160
141
  # Configuration parameters: Prefixes, AllowedPatterns.
161
142
  # Prefixes: when, with, without
162
143
  RSpec/ContextWording:
@@ -174,42 +155,35 @@ RSpec/ContextWording:
174
155
  - 'spec/lutaml/qea/integration/full_parsing_spec.rb'
175
156
  - 'spec/lutaml/xml/parsers/xml_spec.rb'
176
157
 
177
- # Offense count: 22
178
158
  # Configuration parameters: IgnoredMetadata.
179
159
  RSpec/DescribeClass:
180
160
  Enabled: false
181
161
 
182
- # Offense count: 649
183
162
  # Configuration parameters: CountAsOne.
184
163
  RSpec/ExampleLength:
185
164
  Max: 30
186
165
 
187
- # Offense count: 7
188
166
  # This cop supports safe autocorrection (--autocorrect).
189
167
  RSpec/ExpectActual:
190
168
  Exclude:
191
169
  - 'spec/lutaml/qea/diagram_support_spec.rb'
192
170
  - 'spec/lutaml/qea/services/configuration_spec.rb'
193
171
 
194
- # Offense count: 1
195
172
  RSpec/ExpectInLet:
196
173
  Exclude:
197
174
  - 'spec/lutaml/ea/diagram/svg_accuracy_spec.rb'
198
175
 
199
- # Offense count: 90
200
176
  RSpec/ExpectOutput:
201
177
  Exclude:
202
178
  - 'spec/lutaml/cli/interactive_shell_spec.rb'
203
179
  - 'spec/lutaml/cli/package_commands_spec.rb'
204
180
 
205
- # Offense count: 5
206
181
  # Configuration parameters: Max, AllowedIdentifiers, AllowedPatterns.
207
182
  RSpec/IndexedLet:
208
183
  Exclude:
209
184
  - 'spec/lutaml/qea/repositories/base_repository_spec.rb'
210
185
  - 'spec/lutaml/qea/repositories/object_repository_spec.rb'
211
186
 
212
- # Offense count: 15
213
187
  RSpec/LeakyConstantDeclaration:
214
188
  Exclude:
215
189
  - 'spec/lutaml/model_transformations/format_registry_spec.rb'
@@ -218,12 +192,10 @@ RSpec/LeakyConstantDeclaration:
218
192
  - 'spec/lutaml/model_transformations_spec.rb'
219
193
  - 'spec/lutaml/uml_repository/presenters/presenter_factory_spec.rb'
220
194
 
221
- # Offense count: 1
222
195
  RSpec/LeakyLocalVariable:
223
196
  Exclude:
224
197
  - 'spec/lutaml/ea/diagram/svg_accuracy_spec.rb'
225
198
 
226
- # Offense count: 11
227
199
  # Configuration parameters: EnforcedStyle.
228
200
  # SupportedStyles: have_received, receive
229
201
  RSpec/MessageSpies:
@@ -233,21 +205,17 @@ RSpec/MessageSpies:
233
205
  - 'spec/lutaml/uml_repository/presenters/diagram_presenter_spec.rb'
234
206
  - 'spec/lutaml/uml_repository/repository_spec.rb'
235
207
 
236
- # Offense count: 39
237
208
  RSpec/MultipleExpectations:
238
209
  Max: 7
239
210
 
240
- # Offense count: 149
241
211
  # Configuration parameters: AllowSubject.
242
212
  RSpec/MultipleMemoizedHelpers:
243
213
  Max: 11
244
214
 
245
- # Offense count: 33
246
215
  # Configuration parameters: AllowedGroups.
247
216
  RSpec/NestedGroups:
248
217
  Max: 4
249
218
 
250
- # Offense count: 2
251
219
  # Configuration parameters: AllowedPatterns.
252
220
  # AllowedPatterns: ^expect_, ^assert_
253
221
  RSpec/NoExpectationExample:
@@ -255,7 +223,6 @@ RSpec/NoExpectationExample:
255
223
  - 'spec/lutaml/qea/verification/comprehensive_equivalence_spec.rb'
256
224
  - 'spec/lutaml/uml_repository/static_site/generator_spec.rb'
257
225
 
258
- # Offense count: 12
259
226
  RSpec/RepeatedExample:
260
227
  Exclude:
261
228
  - 'spec/lutaml/cli/package_commands_spec.rb'
@@ -263,12 +230,10 @@ RSpec/RepeatedExample:
263
230
  - 'spec/lutaml/qea/validation/validation_engine_spec.rb'
264
231
  - 'spec/lutaml/uml_repository/static_site/data_transformer_spec.rb'
265
232
 
266
- # Offense count: 2
267
233
  RSpec/RepeatedExampleGroupDescription:
268
234
  Exclude:
269
235
  - 'spec/lutaml/uml/parsers/dsl_spec.rb'
270
236
 
271
- # Offense count: 4
272
237
  # Configuration parameters: CustomTransform, IgnoreMethods, IgnoreMetadata, InflectorPath, EnforcedInflector.
273
238
  # SupportedInflectors: default, active_support
274
239
  RSpec/SpecFilePathFormat:
@@ -278,40 +243,20 @@ RSpec/SpecFilePathFormat:
278
243
  - 'spec/lutaml/parsers/serialize_xmi_to_liquid_spec.rb'
279
244
  - 'spec/lutaml/uml_repository/web_ui/app_spec.rb'
280
245
 
281
- # Offense count: 3
282
- Security/Eval:
283
- Exclude:
284
- - 'spec/lutaml/cli/uml/search_command_spec.rb'
285
-
286
- # Offense count: 2
287
246
  Security/MarshalLoad:
288
247
  Exclude:
289
248
  - 'lib/lutaml/uml_repository/package_loader.rb'
290
249
 
291
- # Offense count: 2
292
250
  # This cop supports safe autocorrection (--autocorrect).
293
251
  Style/ComparableClamp:
294
252
  Exclude:
295
253
  - 'lib/lutaml/cli/enhanced_formatter.rb'
296
254
 
297
- # Offense count: 2
298
- Style/DocumentDynamicEvalDefinition:
299
- Exclude:
300
- - 'spec/lutaml/cli/uml/search_command_spec.rb'
301
-
302
- # Offense count: 2
303
- # This cop supports safe autocorrection (--autocorrect).
304
- Style/EvalWithLocation:
305
- Exclude:
306
- - 'spec/lutaml/cli/uml/search_command_spec.rb'
307
-
308
- # Offense count: 1
309
255
  # This cop supports unsafe autocorrection (--autocorrect-all).
310
256
  Style/PartitionInsteadOfDoubleSelect:
311
257
  Exclude:
312
258
  - 'lib/lutaml/qea/factory/generalization_builder.rb'
313
259
 
314
- # Offense count: 3
315
260
  # Configuration parameters: Max.
316
261
  Style/SafeNavigationChainLength:
317
262
  Exclude:
data/CLAUDE.md ADDED
@@ -0,0 +1,38 @@
1
+ # CLAUDE.md — Lutaml Project
2
+
3
+ ## Project Overview
4
+ Lutaml is a Ruby gem for parsing and transforming UML models from multiple formats (XMI, QEA/EA, DSL). It provides a CLI, interactive shell, static site generator, web UI, and model transformation pipeline.
5
+
6
+ ## Testing Constraints
7
+
8
+ **CRITICAL: Do NOT run the full test suite at once.** It will crash due to memory. Run targeted subsets:
9
+ - `bundle exec rspec spec/lutaml/cli/` — CLI specs
10
+ - `bundle exec rspec spec/lutaml/qea/` — QEA parser specs
11
+ - `bundle exec rspec spec/lutaml/uml_repository/` — UML repository specs
12
+ - `bundle exec rspec spec/lutaml/uml/` — UML model specs
13
+ - `bundle exec rspec spec/lutaml/parsers/` — Parser specs
14
+ - `bundle exec rspec spec/lutaml/formatter/` — Formatter specs
15
+ - Combine at most 2-3 suites at a time for targeted verification.
16
+
17
+ ## Code Quality Rules
18
+ - Never use `send` (breaks encapsulation). Use `public_send` only when dynamic dispatch is truly necessary.
19
+ - Never use `respond_to?` (poor typing). Use `is_a?` for type checks.
20
+ - Extract god methods into focused helpers.
21
+ - Keep files under ~300 lines. Extract into modules/classes when growing.
22
+ - DRY: consolidate duplicated patterns (especially `format_definition`, index building, metadata construction).
23
+ - Never commit TODO tracking files to git.
24
+
25
+ ## Architecture
26
+ - `lib/lutaml/uml/` — UML domain models (Class, Association, Package, etc.)
27
+ - `lib/lutaml/uml_repository/` — Repository pattern over UML documents (queries, presenters, exporters, SPA)
28
+ - `lib/lutaml/qea/` — EA .qea SQLite parser and factory
29
+ - `lib/lutaml/xmi/` — XMI XML parsing
30
+ - `lib/lutaml/converter/` — Format converters (XMI→UML, DSL→UML)
31
+ - `lib/lutaml/cli/` — Thor CLI commands
32
+ - `lib/lutaml/model_transformations/` — Format-agnostic transformation pipeline
33
+ - `lib/lutaml/ea/` — EA diagram SVG rendering
34
+
35
+ ## CI Notes
36
+ - Ignore Ruby 3.4 ubuntu failures (performance-related, not code issues)
37
+ - Ignore macOS job slowness (GitHub Actions is slow for macOS)
38
+ - Windows tempfile Permission denied errors are pre-existing flakiness
@@ -60,42 +60,44 @@ module Lutaml
60
60
  end
61
61
  end
62
62
 
63
+ HELP_TEXT = <<~HELP
64
+ Available Commands:
65
+
66
+ Navigation:
67
+ cd PATH Change to package path
68
+ pwd Print current path
69
+ ls [PATH] List packages
70
+ tree [PATH] Show package tree
71
+ up Go to parent package
72
+ root Go to ModelRoot
73
+ back Go to previous location
74
+
75
+ Query:
76
+ find CLASS Find class (fuzzy search)
77
+ show class QNAME Show class details
78
+ show package PATH Show package details
79
+ show NUMBER Show numbered result
80
+ search QUERY Full-text search
81
+ ? QUERY Alias for search
82
+
83
+ Bookmarks:
84
+ bookmark add NAME Bookmark current location
85
+ bookmark list List bookmarks
86
+ bookmark go NAME Jump to bookmark
87
+ bookmark rm NAME Remove bookmark
88
+ bm NAME Quick jump
89
+
90
+ Utilities:
91
+ help [COMMAND] Show help
92
+ history Show command history
93
+ clear Clear screen
94
+ config Show configuration
95
+ stats Show statistics
96
+ exit, quit, q Exit shell
97
+ HELP
98
+
63
99
  def display_general_help
64
- puts <<~HELP
65
- #{OutputFormatter.colorize('Available Commands:', :cyan)}
66
-
67
- #{OutputFormatter.colorize('Navigation:', :yellow)}
68
- cd PATH Change to package path
69
- pwd Print current path
70
- ls [PATH] List packages
71
- tree [PATH] Show package tree
72
- up Go to parent package
73
- root Go to ModelRoot
74
- back Go to previous location
75
-
76
- #{OutputFormatter.colorize('Query:', :yellow)}
77
- find CLASS Find class (fuzzy search)
78
- show class QNAME Show class details
79
- show package PATH Show package details
80
- show NUMBER Show numbered result
81
- search QUERY Full-text search
82
- ? QUERY Alias for search
83
-
84
- #{OutputFormatter.colorize('Bookmarks:', :yellow)}
85
- bookmark add NAME Bookmark current location
86
- bookmark list List bookmarks
87
- bookmark go NAME Jump to bookmark
88
- bookmark rm NAME Remove bookmark
89
- bm NAME Quick jump
90
-
91
- #{OutputFormatter.colorize('Utilities:', :yellow)}
92
- help [COMMAND] Show help
93
- history Show command history
94
- clear Clear screen
95
- config Show configuration
96
- stats Show statistics
97
- exit, quit, q Exit shell
98
- HELP
100
+ puts OutputFormatter.colorize(HELP_TEXT, :cyan)
99
101
  end
100
102
 
101
103
  def display_command_help(command)