lutaml 0.10.18 → 0.11.2

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 (632) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/release.yml +8 -1
  3. data/.gitignore +4 -0
  4. data/.rubocop_todo.yml +82 -161
  5. data/CLAUDE.md +32 -8
  6. data/Gemfile +14 -10
  7. data/Rakefile +6 -4
  8. data/lib/lutaml/version.rb +1 -1
  9. data/lib/lutaml.rb +3 -9
  10. data/lutaml.gemspec +2 -18
  11. metadata +5 -860
  12. data/Makefile +0 -2
  13. data/TODO.cleanups/05-replace-marshal-load.md +0 -37
  14. data/TODO.cleanups/06-replace-eval-in-tests.md +0 -41
  15. data/TODO.cleanups/10-split-large-files.md +0 -47
  16. data/config/diagram_styles.yml +0 -200
  17. data/config/model_transformations.yml +0 -266
  18. data/config/package_metadata.example.yml +0 -58
  19. data/config/qea_schema.yml +0 -1024
  20. data/config/static_site.yml +0 -166
  21. data/examples/UML_EA.DTD +0 -6856
  22. data/examples/lur/20251010_current_plateau_v5.1.lur +0 -0
  23. data/examples/lur/basic.lur +0 -0
  24. data/examples/lur/test-output.lur +0 -0
  25. data/examples/lur/test.lur +0 -0
  26. data/examples/lur_basic_usage.rb +0 -220
  27. data/examples/lur_cli_workflow.rb +0 -262
  28. data/examples/lur_statistics.rb +0 -325
  29. data/examples/qea/20251010_current_plateau_v5.1.qea +0 -0
  30. data/examples/qea/ArcGISWorkspace_template.qea +0 -0
  31. data/examples/qea/README_qea_parser.adoc +0 -230
  32. data/examples/qea/UmlModel_template.qea +0 -0
  33. data/examples/qea/basic.qea +0 -0
  34. data/examples/qea/simple.qea +0 -0
  35. data/examples/qea/simple_example.qea +0 -0
  36. data/examples/qea/test.qea +0 -0
  37. data/examples/xmi/20251010_current_plateau_v5.1.xmi +0 -118121
  38. data/examples/xmi/ArcGISWorkspace_template.xmi +0 -1467
  39. data/examples/xmi/Images/EAID_0016F797_D055_4717_AF1A_606413D0A166.svg +0 -158
  40. data/examples/xmi/Images/EAID_00C5C772_5A03_434f_BF30_AC37542A1AAC.svg +0 -659
  41. data/examples/xmi/Images/EAID_0114FD24_9E58_4664_98CD_71305B59AD11.svg +0 -411
  42. data/examples/xmi/Images/EAID_01661E1B_31B6_4167_BCCF_A00678FB4EA2.svg +0 -102
  43. data/examples/xmi/Images/EAID_039FE004_5408_4fc0_89AA_EB319E4F61C7.svg +0 -169
  44. data/examples/xmi/Images/EAID_04EE9625_17A0_4721_BC71_21756DB21D06.svg +0 -403
  45. data/examples/xmi/Images/EAID_05FF9417_1619_4170_B0C9_55AA6B988EF1.svg +0 -175
  46. data/examples/xmi/Images/EAID_09853FB2_AF8A_432f_94C5_6C47461BD937.svg +0 -360
  47. data/examples/xmi/Images/EAID_09927B7F_A657_4819_99E5_AC9DC99227D9.svg +0 -195
  48. data/examples/xmi/Images/EAID_09AF6B8A_557C_43bc_BBB0_47C1E9401EF3.svg +0 -218
  49. data/examples/xmi/Images/EAID_0BE81AC5_031B_4973_A9A0_223CCD92BAA1.svg +0 -471
  50. data/examples/xmi/Images/EAID_0EDEA6EF_4DC8_4979_BB80_28B1B9EBD1D4.svg +0 -56
  51. data/examples/xmi/Images/EAID_0F413534_6AD2_48bc_B4AF_8699D530D91D.svg +0 -262
  52. data/examples/xmi/Images/EAID_1321F39B_AD67_47b5_B5C3_3A42BBFCBDF9.svg +0 -286
  53. data/examples/xmi/Images/EAID_13E09C71_99E7_40b4_B72D_48AF6379BC2E.svg +0 -164
  54. data/examples/xmi/Images/EAID_144955D8_CB4E_4b59_BB0C_E549F7F84943.svg +0 -66
  55. data/examples/xmi/Images/EAID_14E9F5FD_F6CD_4f48_B1CD_F5A40C6D8E83.svg +0 -95
  56. data/examples/xmi/Images/EAID_157826AA_96A7_4278_89A6_94BD0F31409A.svg +0 -63
  57. data/examples/xmi/Images/EAID_159E9DA0_7A54_4817_B72A_401C750F675D.svg +0 -306
  58. data/examples/xmi/Images/EAID_17BC8309_8051_492b_BE87_61CCFE83DB16.svg +0 -45
  59. data/examples/xmi/Images/EAID_1A10EB6D_E2E5_42a6_A31E_B293D93FD07E.svg +0 -193
  60. data/examples/xmi/Images/EAID_1A290AFD_CE96_46a2_8351_A986D77CC727.svg +0 -444
  61. data/examples/xmi/Images/EAID_1B2D9309_C66B_492a_995C_95B2B02E0D7C.svg +0 -168
  62. data/examples/xmi/Images/EAID_1DE6B973_CE8A_416f_909B_54CEA1E5944E.svg +0 -10
  63. data/examples/xmi/Images/EAID_204F4ACC_2230_4c8d_9861_EF5A6844B712.svg +0 -60
  64. data/examples/xmi/Images/EAID_227300E2_4F4B_4955_83B9_FA626CE8680B.svg +0 -188
  65. data/examples/xmi/Images/EAID_22C24D4C_4894_480a_B113_0CB034CB59E9.svg +0 -426
  66. data/examples/xmi/Images/EAID_234BC4F5_8100_4969_BDCB_A24E0E641F23.svg +0 -169
  67. data/examples/xmi/Images/EAID_24446BFC_9FEB_4935_8970_65A4C562A93F.svg +0 -277
  68. data/examples/xmi/Images/EAID_24E8A45C_C99F_49b7_860A_9CF65FF76C76.svg +0 -575
  69. data/examples/xmi/Images/EAID_272F3181_4300_48b7_98A0_A8CFD12B1A72.svg +0 -255
  70. data/examples/xmi/Images/EAID_292E0D94_392C_4da6_A0B5_841501FAE50A.svg +0 -183
  71. data/examples/xmi/Images/EAID_29DD0967_ADAB_4abb_99C5_544821F5E7DA.svg +0 -10
  72. data/examples/xmi/Images/EAID_2A339928_E5EF_4ed2_9E5D_CC2CA5CF248B.svg +0 -310
  73. data/examples/xmi/Images/EAID_2A5E0832_06BE_4381_85D4_9B00E4F95575.svg +0 -155
  74. data/examples/xmi/Images/EAID_2AAB709F_EFCE_496f_8AFE_92809D66A0A9.svg +0 -81
  75. data/examples/xmi/Images/EAID_2C8DD882_8DEA_4065_89F8_DDA796AA0C85.svg +0 -520
  76. data/examples/xmi/Images/EAID_2E98EA19_37D8_4b70_BDCE_CFEE4FA800B0.svg +0 -173
  77. data/examples/xmi/Images/EAID_30D62231_110F_44e8_9C06_6FCDCBA53A09.svg +0 -722
  78. data/examples/xmi/Images/EAID_3206D3FD_1FC4_41c7_8D00_36DB908E9319.svg +0 -181
  79. data/examples/xmi/Images/EAID_3452CC53_9ACB_44eb_9C9D_B90CF862F284.svg +0 -92
  80. data/examples/xmi/Images/EAID_348EE46E_ABD9_40b0_82A1_0285E75BDC52.svg +0 -187
  81. data/examples/xmi/Images/EAID_34FF671B_CFDC_47ad_91DF_ECA6D8358180.svg +0 -217
  82. data/examples/xmi/Images/EAID_359DD694_0100_4bdf_AD5F_712D97E9C69B.svg +0 -157
  83. data/examples/xmi/Images/EAID_35DE714C_49A8_490e_913A_56F39EF317F9.svg +0 -180
  84. data/examples/xmi/Images/EAID_360C79F1_8EDF_41db_A069_DECDC55625BC.svg +0 -31
  85. data/examples/xmi/Images/EAID_36913C58_FF35_4ba2_A04B_9A4824E24609.svg +0 -166
  86. data/examples/xmi/Images/EAID_372F7F7B_57ED_469a_A640_70DB578B3C56.svg +0 -361
  87. data/examples/xmi/Images/EAID_37AC19B9_8433_4fee_A326_763170D54D06.svg +0 -32
  88. data/examples/xmi/Images/EAID_38170608_32B5_4a6f_A68D_A0D7C0C9D019.svg +0 -234
  89. data/examples/xmi/Images/EAID_3A77A5D0_4E1B_4116_8AAD_407FC422B47F.svg +0 -183
  90. data/examples/xmi/Images/EAID_3B8BD087_1683_46b1_8D0D_6F839C46C578.svg +0 -42
  91. data/examples/xmi/Images/EAID_3DC20801_AE8B_4e76_B08C_F574E8A90E13.svg +0 -192
  92. data/examples/xmi/Images/EAID_3DE28C70_C6D4_406c_B49F_EEF52148C8C1.svg +0 -124
  93. data/examples/xmi/Images/EAID_458E093C_BA2B_4292_BEC4_37511C163DDC.svg +0 -140
  94. data/examples/xmi/Images/EAID_45F9B1F7_E568_47c9_B229_953BC2E707E4.svg +0 -266
  95. data/examples/xmi/Images/EAID_46B3041A_8C23_46e6_8E14_ADE7012274C5.svg +0 -80
  96. data/examples/xmi/Images/EAID_47E4600F_CEC9_4245_9BF5_EE38007A9DDB.svg +0 -584
  97. data/examples/xmi/Images/EAID_4881CEEE_792C_4cb0_BEA7_54333B643D0A.svg +0 -155
  98. data/examples/xmi/Images/EAID_48D364F0_DCA4_41e8_B4D4_509B3023B969.svg +0 -17
  99. data/examples/xmi/Images/EAID_4DBDAB9E_4C1C_4cb1_A767_06BD743A50A7.svg +0 -78
  100. data/examples/xmi/Images/EAID_4EB75007_B31D_4f2c_8855_7E9D3A3B17F4.svg +0 -454
  101. data/examples/xmi/Images/EAID_4F421236_FCF3_4aae_B22A_C7E6A5EFBAC7.svg +0 -81
  102. data/examples/xmi/Images/EAID_4FC1D352_2102_4b73_BCB0_1410B29C6BD7.svg +0 -379
  103. data/examples/xmi/Images/EAID_4FE346EA_01E1_4b30_8BE6_BB32EA191E47.svg +0 -126
  104. data/examples/xmi/Images/EAID_5038EEE3_7DD0_4cca_9829_364E044D37E8.svg +0 -199
  105. data/examples/xmi/Images/EAID_508A37DC_9378_4f5a_BD96_48F4D24E03A5.svg +0 -162
  106. data/examples/xmi/Images/EAID_516DA1A2_F0EC_415c_9664_E4CA54E7F05C.svg +0 -136
  107. data/examples/xmi/Images/EAID_52A1DBD3_D3DA_4b6d_8F96_FC6F39F64242.svg +0 -161
  108. data/examples/xmi/Images/EAID_575E87BA_32E9_4a84_AA4E_0EFDFC5D4C07.svg +0 -71
  109. data/examples/xmi/Images/EAID_57E0F1A0_6C72_47ef_B922_B806F9A875E8.svg +0 -209
  110. data/examples/xmi/Images/EAID_5957C373_3FC1_482f_8F35_D809153A17F5.svg +0 -123
  111. data/examples/xmi/Images/EAID_59A66AE2_412C_48a6_BFC7_EA56CF11D269.svg +0 -218
  112. data/examples/xmi/Images/EAID_5A43833E_680B_4a90_8931_0C902304E029.svg +0 -236
  113. data/examples/xmi/Images/EAID_5D6DB5A0_5047_4bac_9E60_69904A60B56D.svg +0 -353
  114. data/examples/xmi/Images/EAID_5DA1E7A7_8E59_4803_A831_E9F3EC27328F.svg +0 -242
  115. data/examples/xmi/Images/EAID_5E2C1E2A_82A8_47f4_B2ED_1398D72BFCFD.svg +0 -246
  116. data/examples/xmi/Images/EAID_6052620C_4BD5_49f6_A21C_AD7E6DCA2795.svg +0 -290
  117. data/examples/xmi/Images/EAID_6481E2CC_35A6_43b0_88D4_10A667A2BC2D.svg +0 -60
  118. data/examples/xmi/Images/EAID_660C7D03_A26C_4977_A7BA_9D0A773DA811.svg +0 -318
  119. data/examples/xmi/Images/EAID_671F3C3D_35B6_4514_B5B6_DD7E84925493.svg +0 -24
  120. data/examples/xmi/Images/EAID_676B9C9A_D85F_4d2f_A46B_73F02090DC87.svg +0 -127
  121. data/examples/xmi/Images/EAID_6797FEFA_5801_48e4_8B9C_3C824C0E165D.svg +0 -412
  122. data/examples/xmi/Images/EAID_6807F4EE_18EF_4e7e_ACCF_D5BD323AFDE9.svg +0 -130
  123. data/examples/xmi/Images/EAID_69E81E34_CF28_4c7f_A48F_5941BA85CEE3.svg +0 -96
  124. data/examples/xmi/Images/EAID_6A3C55E8_3C3C_4f3a_8AAC_0299C5B23070.svg +0 -10
  125. data/examples/xmi/Images/EAID_6BAC333E_E2C2_42c7_8DDF_6B4FA0FFC03B.svg +0 -143
  126. data/examples/xmi/Images/EAID_6D0349D5_3F1B_4b28_82D2_910743DEB5E5.svg +0 -114
  127. data/examples/xmi/Images/EAID_6E95B74E_8A09_4698_9E9E_23BCFD2CE194.svg +0 -37
  128. data/examples/xmi/Images/EAID_70C77F92_5614_4b22_8C8E_67859F59D8FD.svg +0 -254
  129. data/examples/xmi/Images/EAID_71F9216B_E7A7_4083_B08E_6C71B57F3A1F.svg +0 -187
  130. data/examples/xmi/Images/EAID_73025C5A_08FC_47ff_AB2F_C7F79CF54B41.svg +0 -145
  131. data/examples/xmi/Images/EAID_74C974B6_6D07_425d_B7AC_C8899E3B4967.svg +0 -76
  132. data/examples/xmi/Images/EAID_7504FCD2_524C_4e7d_BAE4_4E58A8A8A12C.svg +0 -196
  133. data/examples/xmi/Images/EAID_78030266_3603_4747_9D75_03D16614BE7D.svg +0 -35
  134. data/examples/xmi/Images/EAID_785226C1_12B1_4104_A4C1_F19B70B9FB71.svg +0 -348
  135. data/examples/xmi/Images/EAID_7854470F_26B8_4d3c_AFDF_C05BCE6ED0CD.svg +0 -72
  136. data/examples/xmi/Images/EAID_794F4A8F_18CA_4e9f_8477_A6F0E5ED22D4.svg +0 -187
  137. data/examples/xmi/Images/EAID_7A24839E_C8AE_424d_B7D2_6DA16DC813E7.svg +0 -114
  138. data/examples/xmi/Images/EAID_7A3649FD_E960_4ae6_B9B1_A9001C066AE7.svg +0 -181
  139. data/examples/xmi/Images/EAID_7B2C6765_AB68_439a_87F3_DAC323CB2AF5.svg +0 -196
  140. data/examples/xmi/Images/EAID_7C44AC09_27C1_47b3_9A85_88EC71C081FF.svg +0 -55
  141. data/examples/xmi/Images/EAID_7CE102CA_97C1_4cac_BD3B_0500D3712D2A.svg +0 -195
  142. data/examples/xmi/Images/EAID_7D960BD8_65D8_4934_9C11_4EF860DD8FBA.svg +0 -90
  143. data/examples/xmi/Images/EAID_80939C98_A456_48c3_BCEA_4B72851F2DF6.svg +0 -174
  144. data/examples/xmi/Images/EAID_812FE862_76ED_44f0_B678_7A4601B395CF.svg +0 -142
  145. data/examples/xmi/Images/EAID_81B76F5B_9D64_4bbf_8AC8_34234FB87533.svg +0 -740
  146. data/examples/xmi/Images/EAID_84352F1A_195B_411b_9552_5BFC40BF90B5.svg +0 -105
  147. data/examples/xmi/Images/EAID_846DD800_139C_4d47_A1DF_3FB1AC5D130F.svg +0 -554
  148. data/examples/xmi/Images/EAID_84A9C65B_FD6D_4bb5_818F_E8C35FF5BCD1.svg +0 -228
  149. data/examples/xmi/Images/EAID_853674F5_7DC9_4aae_809B_5728098B5D5B.svg +0 -154
  150. data/examples/xmi/Images/EAID_860CBBFB_2F27_408f_9144_751F9D1F487F.svg +0 -273
  151. data/examples/xmi/Images/EAID_87476527_7B9B_4b92_967E_3D38365470CA.svg +0 -239
  152. data/examples/xmi/Images/EAID_87DAE930_5069_4c58_AC65_4B0B2C0F32C8.svg +0 -10
  153. data/examples/xmi/Images/EAID_88AF6BD7_BC34_406f_BB59_47CFAB4A7D5D.svg +0 -116
  154. data/examples/xmi/Images/EAID_88D0CB44_20D0_44fc_A6E3_B663332EF401.svg +0 -200
  155. data/examples/xmi/Images/EAID_8BB1CA0C_C003_4678_973B_A1C3308E021D.svg +0 -136
  156. data/examples/xmi/Images/EAID_8DAB169F_D189_4320_A0F5_4443E3297F0E.svg +0 -181
  157. data/examples/xmi/Images/EAID_8FD488EF_BAAB_40ec_A7ED_F7CC831D546E.svg +0 -324
  158. data/examples/xmi/Images/EAID_90BCA409_BB45_42c5_AFA5_45FE3D995904.svg +0 -342
  159. data/examples/xmi/Images/EAID_926AFE38_01FA_469e_B6AA_ED5F4D62B66F.svg +0 -105
  160. data/examples/xmi/Images/EAID_92AB0FD0_B0FB_4ceb_8EAE_66B6600D31D7.svg +0 -681
  161. data/examples/xmi/Images/EAID_92C43670_3057_47f1_A576_C60843FF3D26.svg +0 -136
  162. data/examples/xmi/Images/EAID_93F63576_BE01_4cd8_8A91_C674FF77FC3D.svg +0 -718
  163. data/examples/xmi/Images/EAID_9400D9BC_05A5_41fc_83F7_02E5C67F9718.svg +0 -487
  164. data/examples/xmi/Images/EAID_95246DCF_1C09_4a16_9512_98000F56B3D8.svg +0 -292
  165. data/examples/xmi/Images/EAID_9994BF62_51E2_42cd_BB35_16C537B6718A.svg +0 -715
  166. data/examples/xmi/Images/EAID_9AAD6C21_B1E7_4472_B64A_FB5E3569D970.svg +0 -116
  167. data/examples/xmi/Images/EAID_9BD7189A_877B_4ca9_B42C_817DEF144FB2.svg +0 -284
  168. data/examples/xmi/Images/EAID_9DA6C553_94FC_4204_83AD_ECC4B45A53EF.svg +0 -159
  169. data/examples/xmi/Images/EAID_9EE6A41B_5FAA_4c89_B98F_732059778630.svg +0 -10
  170. data/examples/xmi/Images/EAID_9F1A4B54_46F6_435c_9529_E43E54CF6050.svg +0 -172
  171. data/examples/xmi/Images/EAID_9FE1EA7B_4CEF_4976_A281_93A94315BD84.svg +0 -153
  172. data/examples/xmi/Images/EAID_A0695647_6172_4262_8C30_67441399609C.svg +0 -290
  173. data/examples/xmi/Images/EAID_A081C63E_D6F2_41a7_A99C_307836754AFA.svg +0 -149
  174. data/examples/xmi/Images/EAID_A24E2778_5AD9_44f2_AB8F_5CD3913477D6.svg +0 -194
  175. data/examples/xmi/Images/EAID_A264F089_F9B3_406c_A3A8_FF34903797D3.svg +0 -143
  176. data/examples/xmi/Images/EAID_A282E5D1_2A13_4e7f_BC76_5D086DD4A577.svg +0 -357
  177. data/examples/xmi/Images/EAID_A3BCE1D6_9DB5_4272_A020_4C0E194B99CC.svg +0 -171
  178. data/examples/xmi/Images/EAID_A56E3818_D1B8_4b63_B69E_FBAC4A8AF482.svg +0 -218
  179. data/examples/xmi/Images/EAID_A57215D5_75C5_4532_BCF4_264A77CD62F1.svg +0 -204
  180. data/examples/xmi/Images/EAID_A59065AF_9669_486c_9582_9693177CFC7F.svg +0 -263
  181. data/examples/xmi/Images/EAID_A759374D_589A_488c_99EF_537ACB9B1FF9.svg +0 -398
  182. data/examples/xmi/Images/EAID_A7B25F46_F18A_4373_B16D_8C6AC0B868B0.svg +0 -174
  183. data/examples/xmi/Images/EAID_A9FE9E6F_A5F4_47e5_A6BA_26E22C7346B6.svg +0 -310
  184. data/examples/xmi/Images/EAID_AA62CDEB_55EC_498d_B326_4AA2C9AF6A05.svg +0 -144
  185. data/examples/xmi/Images/EAID_AAF52AF6_F7F9_4005_AE46_8920847BEA03.svg +0 -144
  186. data/examples/xmi/Images/EAID_AB281AC1_7CB8_404a_8124_34343DDD84E2.svg +0 -198
  187. data/examples/xmi/Images/EAID_AB7F1FDF_A66B_42a1_B8A3_7F594BAAD508.svg +0 -143
  188. data/examples/xmi/Images/EAID_AC2191E3_76E3_40b2_9E21_0E0B9B5277D2.svg +0 -114
  189. data/examples/xmi/Images/EAID_AD451676_A7C8_4c6a_A925_A9B9CA344142.svg +0 -339
  190. data/examples/xmi/Images/EAID_ADBA40A1_9375_4c1b_9938_0990612EB615.svg +0 -429
  191. data/examples/xmi/Images/EAID_ADC8773C_1B27_48ac_BAC1_14C1C919FAF6.svg +0 -245
  192. data/examples/xmi/Images/EAID_AE0718DF_AF69_4ea1_A099_E20028FE40A1.svg +0 -173
  193. data/examples/xmi/Images/EAID_B0DDB85D_A00C_4a7f_8C06_CCA15E5E4FE5.svg +0 -31
  194. data/examples/xmi/Images/EAID_B27ED282_D5E5_4f33_8AC1_62802F9E0B35.svg +0 -256
  195. data/examples/xmi/Images/EAID_B3AFECCB_17DD_44d6_8A44_2C38D9A64C0B.svg +0 -95
  196. data/examples/xmi/Images/EAID_B3B6C5B1_278E_4714_8244_B6C28B66AB50.svg +0 -176
  197. data/examples/xmi/Images/EAID_B53E76CD_A0F2_4e2f_B3AB_796D85964EF2.svg +0 -179
  198. data/examples/xmi/Images/EAID_B55D6E67_0BDD_4163_B359_11A6FBA89C74.svg +0 -207
  199. data/examples/xmi/Images/EAID_B58D1A53_E860_41a3_8352_11C274093E83.svg +0 -189
  200. data/examples/xmi/Images/EAID_B62C02B3_69DB_49e9_8089_4EE398BDE666.svg +0 -165
  201. data/examples/xmi/Images/EAID_BC008774_B539_4150_8174_B675989053D0.svg +0 -22
  202. data/examples/xmi/Images/EAID_BC1F7E00_082D_4a26_922B_3967A8D66859.svg +0 -266
  203. data/examples/xmi/Images/EAID_BDA613D8_402A_475a_AA15_683D88FD3D23.svg +0 -183
  204. data/examples/xmi/Images/EAID_C028B286_4C85_47d8_B6D5_80B28F556E82.svg +0 -303
  205. data/examples/xmi/Images/EAID_C173A6F4_1D1B_400e_AD8C_64FFF7CD5BE5.svg +0 -178
  206. data/examples/xmi/Images/EAID_C1834072_CADC_4ce4_B0FC_8284AE5CF4A4.svg +0 -158
  207. data/examples/xmi/Images/EAID_C1EC985B_5CBD_4e91_8661_EB4EF23781D9.svg +0 -286
  208. data/examples/xmi/Images/EAID_C31C1314_B679_4413_B8FE_A2CD584FC128.svg +0 -305
  209. data/examples/xmi/Images/EAID_C37CFBD6_69BA_42fb_9AC7_2D329D931BCF.svg +0 -171
  210. data/examples/xmi/Images/EAID_C857C934_306F_463a_87D5_257CB225ECFE.svg +0 -174
  211. data/examples/xmi/Images/EAID_C96797DE_2238_42d3_896A_9F92500270ED.svg +0 -180
  212. data/examples/xmi/Images/EAID_C96CBC24_B20E_459a_8F9D_75B61CDCB89F.svg +0 -656
  213. data/examples/xmi/Images/EAID_CACB523D_56A5_4f05_B3C2_51BB18F380FD.svg +0 -158
  214. data/examples/xmi/Images/EAID_CB34B578_101B_48b4_9271_214FFEA6A83A.svg +0 -409
  215. data/examples/xmi/Images/EAID_CBBD6CF4_0A1E_4406_9930_89DE43527910.svg +0 -361
  216. data/examples/xmi/Images/EAID_CC06A828_3750_472f_8DB2_C2E0863FCE17.svg +0 -96
  217. data/examples/xmi/Images/EAID_CD5CF053_1772_4a0f_962D_B17054D8EEAA.svg +0 -173
  218. data/examples/xmi/Images/EAID_CE440B5A_9534_4c75_9BA5_50862BB396C2.svg +0 -97
  219. data/examples/xmi/Images/EAID_CE4734FC_7986_4b3a_807F_A5B2C7EDE9E4.svg +0 -193
  220. data/examples/xmi/Images/EAID_D14AA320_9D41_4366_8739_9C2C21F96AE1.svg +0 -32
  221. data/examples/xmi/Images/EAID_D2FA55D3_C733_4a4d_92D0_0BC7AC0BB5BC.svg +0 -108
  222. data/examples/xmi/Images/EAID_D351FC34_FB03_488d_ADA4_BDB93DA9CB02.svg +0 -49
  223. data/examples/xmi/Images/EAID_D368FDF3_BDC5_4718_A701_351C8587A376.svg +0 -592
  224. data/examples/xmi/Images/EAID_D4DA8C48_3998_450d_87C4_9D65C9FECDB4.svg +0 -42
  225. data/examples/xmi/Images/EAID_D5464ECF_290E_4b2b_A6C4_25BE80F886CB.svg +0 -76
  226. data/examples/xmi/Images/EAID_D55235B0_61E9_461a_8379_2B8BF2403BE2.svg +0 -147
  227. data/examples/xmi/Images/EAID_D555ED73_F010_45d7_8A53_45A33C64C249.svg +0 -318
  228. data/examples/xmi/Images/EAID_D7AAC526_267E_45a0_A853_3207F02363F8.svg +0 -45
  229. data/examples/xmi/Images/EAID_D998B20D_A875_4ef8_A9CE_996BE56602BD.svg +0 -158
  230. data/examples/xmi/Images/EAID_DBFA8B39_F5B7_4c0e_9552_19AEAE5BA64E.svg +0 -200
  231. data/examples/xmi/Images/EAID_DE47A47D_E7BE_4e6f_BA81_F789EE8CFE72.svg +0 -61
  232. data/examples/xmi/Images/EAID_DFBB1072_8EC5_4384_8241_7EDF4B6B888B.svg +0 -78
  233. data/examples/xmi/Images/EAID_E325B9D8_E955_4aed_8125_63167BD40320.svg +0 -67
  234. data/examples/xmi/Images/EAID_E32D9D02_CAE9_4a47_92A8_3290EDCD6E6D.svg +0 -79
  235. data/examples/xmi/Images/EAID_E3B28611_7857_458a_B0BC_736E777B88EC.svg +0 -194
  236. data/examples/xmi/Images/EAID_E43C37EC_1176_4d2e_8B98_B6F3DFF6A092.svg +0 -96
  237. data/examples/xmi/Images/EAID_E591C1CF_7F35_4160_8A72_DFA097AD5811.svg +0 -271
  238. data/examples/xmi/Images/EAID_E77C66A2_2E94_4196_BFC6_662FE5AEEB6F.svg +0 -332
  239. data/examples/xmi/Images/EAID_E7AABA98_2450_4986_9736_DCCAF0108C50.svg +0 -639
  240. data/examples/xmi/Images/EAID_E7D9A2C4_72D6_40b9_8EB8_6B35476246B3.svg +0 -134
  241. data/examples/xmi/Images/EAID_E9CDAD85_ECF1_43de_819F_30A0D01785E6.svg +0 -193
  242. data/examples/xmi/Images/EAID_EC8AF507_F441_4e8a_B8A7_C1690F3C7D0B.svg +0 -58
  243. data/examples/xmi/Images/EAID_ED501058_D540_47ac_8EBC_5921E8C0BF57.svg +0 -384
  244. data/examples/xmi/Images/EAID_EFBF5F0F_DF74_4944_8791_114F5637C335.svg +0 -590
  245. data/examples/xmi/Images/EAID_EFFFA027_2A1F_425c_8437_BF89AADC8893.svg +0 -365
  246. data/examples/xmi/Images/EAID_F07E7718_B2C2_4a65_B5DD_477CB73E971E.svg +0 -165
  247. data/examples/xmi/Images/EAID_F0F20BDF_C729_47f7_B6FC_25ED2C4609CA.svg +0 -61
  248. data/examples/xmi/Images/EAID_F32E5AFE_8605_4c77_AE69_D0D0A6E380AC.svg +0 -76
  249. data/examples/xmi/Images/EAID_F3F00F45_CD37_46fd_B521_D1040EB2FB16.svg +0 -123
  250. data/examples/xmi/Images/EAID_F46E8F19_D8F1_4a3d_B87B_B0BAB4F50F50.svg +0 -202
  251. data/examples/xmi/Images/EAID_F48E5F6E_2411_4635_9315_3EAA4CFA29F7.svg +0 -351
  252. data/examples/xmi/Images/EAID_F4C23F9E_DD74_4fed_B75D_AD3C6448BA24.svg +0 -189
  253. data/examples/xmi/Images/EAID_F853B3C4_B145_4ef0_B261_C3CC0475B6D2.svg +0 -215
  254. data/examples/xmi/Images/EAID_F8BE68CA_1F8F_47e5_9454_01A2EB7D388A.svg +0 -124
  255. data/examples/xmi/Images/EAID_F92A6A28_612E_468e_9E39_D7AE7D24E24D.svg +0 -208
  256. data/examples/xmi/Images/EAID_F995FA49_B86E_4c94_BE5E_C928FB6B87D0.svg +0 -302
  257. data/examples/xmi/Images/EAID_FEAE013A_A4E4_4283_A491_1FEB8D0EBA28.svg +0 -524
  258. data/examples/xmi/Images/EAID_FEBE5726_3751_470b_9023_8C569202E97E.svg +0 -730
  259. data/examples/xmi/UML_EA.DTD +0 -6856
  260. data/examples/xmi/UmlModel_template.xmi +0 -23
  261. data/examples/xmi/basic.xmi +0 -9086
  262. data/examples/xmi/simple.xmi +0 -655
  263. data/examples/xmi/simple_example.xmi +0 -23
  264. data/examples/xmi/test.xmi +0 -1703
  265. data/exe/lutaml +0 -11
  266. data/exe/lutaml-sysml +0 -22
  267. data/exe/lutaml-wsd2uml +0 -63
  268. data/exe/lutaml-yaml2uml +0 -146
  269. data/lib/lutaml/cli/element_identifier.rb +0 -160
  270. data/lib/lutaml/cli/enhanced_formatter.rb +0 -494
  271. data/lib/lutaml/cli/interactive_shell/bookmark_commands.rb +0 -85
  272. data/lib/lutaml/cli/interactive_shell/command_base.rb +0 -32
  273. data/lib/lutaml/cli/interactive_shell/export_handler.rb +0 -73
  274. data/lib/lutaml/cli/interactive_shell/help_display.rb +0 -107
  275. data/lib/lutaml/cli/interactive_shell/navigation_commands.rb +0 -151
  276. data/lib/lutaml/cli/interactive_shell/query_commands.rb +0 -208
  277. data/lib/lutaml/cli/interactive_shell.rb +0 -254
  278. data/lib/lutaml/cli/lml_commands.rb +0 -205
  279. data/lib/lutaml/cli/output_formatter.rb +0 -348
  280. data/lib/lutaml/cli/resource_registry.rb +0 -127
  281. data/lib/lutaml/cli/tree_view_formatter.rb +0 -312
  282. data/lib/lutaml/cli/uml/build_command.rb +0 -466
  283. data/lib/lutaml/cli/uml/diagram_command.rb +0 -415
  284. data/lib/lutaml/cli/uml/export_command.rb +0 -77
  285. data/lib/lutaml/cli/uml/find_command.rb +0 -119
  286. data/lib/lutaml/cli/uml/info_command.rb +0 -103
  287. data/lib/lutaml/cli/uml/inspect_command.rb +0 -85
  288. data/lib/lutaml/cli/uml/ls_command.rb +0 -102
  289. data/lib/lutaml/cli/uml/repl_command.rb +0 -49
  290. data/lib/lutaml/cli/uml/search_command.rb +0 -85
  291. data/lib/lutaml/cli/uml/serve_command.rb +0 -58
  292. data/lib/lutaml/cli/uml/shared_helpers.rb +0 -49
  293. data/lib/lutaml/cli/uml/spa_command.rb +0 -208
  294. data/lib/lutaml/cli/uml/stats_command.rb +0 -57
  295. data/lib/lutaml/cli/uml/tree_command.rb +0 -82
  296. data/lib/lutaml/cli/uml/validate_command.rb +0 -190
  297. data/lib/lutaml/cli/uml/verify_command.rb +0 -103
  298. data/lib/lutaml/cli/uml.rb +0 -24
  299. data/lib/lutaml/cli/uml_commands.rb +0 -145
  300. data/lib/lutaml/cli.rb +0 -84
  301. data/lib/lutaml/converter/dsl_to_uml.rb +0 -237
  302. data/lib/lutaml/converter/xmi_to_uml.rb +0 -329
  303. data/lib/lutaml/converter/xmi_to_uml_generalization.rb +0 -193
  304. data/lib/lutaml/converter.rb +0 -10
  305. data/lib/lutaml/ea/diagram/configuration.rb +0 -379
  306. data/lib/lutaml/ea/diagram/element_renderers/base_renderer.rb +0 -81
  307. data/lib/lutaml/ea/diagram/element_renderers/class_renderer.rb +0 -328
  308. data/lib/lutaml/ea/diagram/element_renderers/connector_renderer.rb +0 -53
  309. data/lib/lutaml/ea/diagram/element_renderers/package_renderer.rb +0 -67
  310. data/lib/lutaml/ea/diagram/element_renderers.rb +0 -18
  311. data/lib/lutaml/ea/diagram/extractor.rb +0 -562
  312. data/lib/lutaml/ea/diagram/layout_engine.rb +0 -249
  313. data/lib/lutaml/ea/diagram/path_builder.rb +0 -256
  314. data/lib/lutaml/ea/diagram/style_parser.rb +0 -315
  315. data/lib/lutaml/ea/diagram/style_resolver.rb +0 -281
  316. data/lib/lutaml/ea/diagram/svg_renderer.rb +0 -279
  317. data/lib/lutaml/ea/diagram/util.rb +0 -69
  318. data/lib/lutaml/ea/diagram.rb +0 -62
  319. data/lib/lutaml/ea.rb +0 -7
  320. data/lib/lutaml/formatter/base.rb +0 -63
  321. data/lib/lutaml/formatter/graphviz.rb +0 -374
  322. data/lib/lutaml/formatter.rb +0 -20
  323. data/lib/lutaml/layout/engine.rb +0 -17
  324. data/lib/lutaml/layout/graph_viz_engine.rb +0 -19
  325. data/lib/lutaml/layout.rb +0 -8
  326. data/lib/lutaml/model_transformations/configuration.rb +0 -333
  327. data/lib/lutaml/model_transformations/format_registry.rb +0 -392
  328. data/lib/lutaml/model_transformations/parsers/base_parser.rb +0 -464
  329. data/lib/lutaml/model_transformations/parsers/qea_parser.rb +0 -450
  330. data/lib/lutaml/model_transformations/parsers/xmi_parser.rb +0 -289
  331. data/lib/lutaml/model_transformations/transformation_engine.rb +0 -405
  332. data/lib/lutaml/model_transformations.rb +0 -143
  333. data/lib/lutaml/qea/benchmark.rb +0 -210
  334. data/lib/lutaml/qea/database.rb +0 -270
  335. data/lib/lutaml/qea/factory/association_builder.rb +0 -203
  336. data/lib/lutaml/qea/factory/association_transformer.rb +0 -107
  337. data/lib/lutaml/qea/factory/attribute_tag_transformer.rb +0 -57
  338. data/lib/lutaml/qea/factory/attribute_transformer.rb +0 -93
  339. data/lib/lutaml/qea/factory/base_transformer.rb +0 -127
  340. data/lib/lutaml/qea/factory/class_transformer.rb +0 -164
  341. data/lib/lutaml/qea/factory/constraint_transformer.rb +0 -75
  342. data/lib/lutaml/qea/factory/data_type_transformer.rb +0 -133
  343. data/lib/lutaml/qea/factory/diagram_transformer.rb +0 -157
  344. data/lib/lutaml/qea/factory/document_builder.rb +0 -273
  345. data/lib/lutaml/qea/factory/ea_to_uml_factory.rb +0 -243
  346. data/lib/lutaml/qea/factory/enum_transformer.rb +0 -88
  347. data/lib/lutaml/qea/factory/generalization_builder.rb +0 -236
  348. data/lib/lutaml/qea/factory/generalization_transformer.rb +0 -98
  349. data/lib/lutaml/qea/factory/instance_transformer.rb +0 -84
  350. data/lib/lutaml/qea/factory/object_property_transformer.rb +0 -58
  351. data/lib/lutaml/qea/factory/operation_transformer.rb +0 -66
  352. data/lib/lutaml/qea/factory/package_transformer.rb +0 -208
  353. data/lib/lutaml/qea/factory/reference_resolver.rb +0 -99
  354. data/lib/lutaml/qea/factory/stereotype_loader.rb +0 -40
  355. data/lib/lutaml/qea/factory/tagged_value_transformer.rb +0 -38
  356. data/lib/lutaml/qea/factory/transformer_registry.rb +0 -77
  357. data/lib/lutaml/qea/factory.rb +0 -37
  358. data/lib/lutaml/qea/file_detector.rb +0 -178
  359. data/lib/lutaml/qea/infrastructure/database_connection.rb +0 -100
  360. data/lib/lutaml/qea/infrastructure/schema_reader.rb +0 -136
  361. data/lib/lutaml/qea/infrastructure/table_reader.rb +0 -224
  362. data/lib/lutaml/qea/infrastructure.rb +0 -12
  363. data/lib/lutaml/qea/models/base_model.rb +0 -48
  364. data/lib/lutaml/qea/models/ea_attribute.rb +0 -133
  365. data/lib/lutaml/qea/models/ea_attribute_tag.rb +0 -107
  366. data/lib/lutaml/qea/models/ea_complexity_type.rb +0 -79
  367. data/lib/lutaml/qea/models/ea_connector.rb +0 -160
  368. data/lib/lutaml/qea/models/ea_connector_type.rb +0 -60
  369. data/lib/lutaml/qea/models/ea_constraint_type.rb +0 -63
  370. data/lib/lutaml/qea/models/ea_datatype.rb +0 -104
  371. data/lib/lutaml/qea/models/ea_diagram.rb +0 -115
  372. data/lib/lutaml/qea/models/ea_diagram_link.rb +0 -78
  373. data/lib/lutaml/qea/models/ea_diagram_object.rb +0 -84
  374. data/lib/lutaml/qea/models/ea_diagram_type.rb +0 -56
  375. data/lib/lutaml/qea/models/ea_document.rb +0 -66
  376. data/lib/lutaml/qea/models/ea_object.rb +0 -206
  377. data/lib/lutaml/qea/models/ea_object_constraint.rb +0 -60
  378. data/lib/lutaml/qea/models/ea_object_property.rb +0 -94
  379. data/lib/lutaml/qea/models/ea_object_type.rb +0 -73
  380. data/lib/lutaml/qea/models/ea_operation.rb +0 -151
  381. data/lib/lutaml/qea/models/ea_operation_param.rb +0 -71
  382. data/lib/lutaml/qea/models/ea_package.rb +0 -73
  383. data/lib/lutaml/qea/models/ea_script.rb +0 -67
  384. data/lib/lutaml/qea/models/ea_status_type.rb +0 -66
  385. data/lib/lutaml/qea/models/ea_stereotype.rb +0 -57
  386. data/lib/lutaml/qea/models/ea_tagged_value.rb +0 -103
  387. data/lib/lutaml/qea/models/ea_xref.rb +0 -172
  388. data/lib/lutaml/qea/models.rb +0 -35
  389. data/lib/lutaml/qea/parser.rb +0 -57
  390. data/lib/lutaml/qea/repositories/base_repository.rb +0 -215
  391. data/lib/lutaml/qea/repositories/object_repository.rb +0 -219
  392. data/lib/lutaml/qea/repositories.rb +0 -10
  393. data/lib/lutaml/qea/services/configuration.rb +0 -211
  394. data/lib/lutaml/qea/services/database_loader.rb +0 -186
  395. data/lib/lutaml/qea/services.rb +0 -10
  396. data/lib/lutaml/qea/validation/association_validator.rb +0 -73
  397. data/lib/lutaml/qea/validation/attribute_validator.rb +0 -101
  398. data/lib/lutaml/qea/validation/base_validator.rb +0 -312
  399. data/lib/lutaml/qea/validation/class_validator.rb +0 -121
  400. data/lib/lutaml/qea/validation/database/circular_reference_validator.rb +0 -109
  401. data/lib/lutaml/qea/validation/database/orphan_validator.rb +0 -153
  402. data/lib/lutaml/qea/validation/database/referential_integrity_validator.rb +0 -128
  403. data/lib/lutaml/qea/validation/database.rb +0 -10
  404. data/lib/lutaml/qea/validation/diagram_validator.rb +0 -112
  405. data/lib/lutaml/qea/validation/formatters/json_formatter.rb +0 -137
  406. data/lib/lutaml/qea/validation/formatters/text_formatter.rb +0 -235
  407. data/lib/lutaml/qea/validation/operation_validator.rb +0 -79
  408. data/lib/lutaml/qea/validation/package_validator.rb +0 -111
  409. data/lib/lutaml/qea/validation/validation_engine.rb +0 -477
  410. data/lib/lutaml/qea/validation/validation_message.rb +0 -144
  411. data/lib/lutaml/qea/validation/validation_result.rb +0 -210
  412. data/lib/lutaml/qea/validation/validator_registry.rb +0 -134
  413. data/lib/lutaml/qea/validation.rb +0 -27
  414. data/lib/lutaml/qea/verification/comparison_result.rb +0 -264
  415. data/lib/lutaml/qea/verification/document_normalizer.rb +0 -169
  416. data/lib/lutaml/qea/verification/document_verifier.rb +0 -323
  417. data/lib/lutaml/qea/verification/element_comparator.rb +0 -277
  418. data/lib/lutaml/qea/verification/structure_matcher.rb +0 -287
  419. data/lib/lutaml/qea/verification.rb +0 -14
  420. data/lib/lutaml/qea.rb +0 -225
  421. data/lib/lutaml/uml/abstraction.rb +0 -11
  422. data/lib/lutaml/uml/action.rb +0 -15
  423. data/lib/lutaml/uml/activity.rb +0 -11
  424. data/lib/lutaml/uml/actor.rb +0 -11
  425. data/lib/lutaml/uml/association.rb +0 -35
  426. data/lib/lutaml/uml/association_generalization.rb +0 -18
  427. data/lib/lutaml/uml/behavior.rb +0 -11
  428. data/lib/lutaml/uml/cardinality.rb +0 -10
  429. data/lib/lutaml/uml/class.rb +0 -50
  430. data/lib/lutaml/uml/classifier.rb +0 -17
  431. data/lib/lutaml/uml/comment.rb +0 -13
  432. data/lib/lutaml/uml/connector.rb +0 -18
  433. data/lib/lutaml/uml/connector_end.rb +0 -20
  434. data/lib/lutaml/uml/constraint.rb +0 -22
  435. data/lib/lutaml/uml/data_type.rb +0 -54
  436. data/lib/lutaml/uml/dependency.rb +0 -18
  437. data/lib/lutaml/uml/diagram.rb +0 -23
  438. data/lib/lutaml/uml/diagram_link.rb +0 -26
  439. data/lib/lutaml/uml/diagram_object.rb +0 -30
  440. data/lib/lutaml/uml/document.rb +0 -62
  441. data/lib/lutaml/uml/enum.rb +0 -19
  442. data/lib/lutaml/uml/event.rb +0 -11
  443. data/lib/lutaml/uml/fidelity.rb +0 -10
  444. data/lib/lutaml/uml/final_state.rb +0 -11
  445. data/lib/lutaml/uml/fontname.rb +0 -13
  446. data/lib/lutaml/uml/general_attribute.rb +0 -22
  447. data/lib/lutaml/uml/generalization.rb +0 -35
  448. data/lib/lutaml/uml/group.rb +0 -19
  449. data/lib/lutaml/uml/has_attributes.rb +0 -14
  450. data/lib/lutaml/uml/has_members.rb +0 -30
  451. data/lib/lutaml/uml/inheritance_walker.rb +0 -96
  452. data/lib/lutaml/uml/instance.rb +0 -15
  453. data/lib/lutaml/uml/model.rb +0 -13
  454. data/lib/lutaml/uml/model_helpers.rb +0 -93
  455. data/lib/lutaml/uml/namespace.rb +0 -10
  456. data/lib/lutaml/uml/node/attribute.rb +0 -30
  457. data/lib/lutaml/uml/node/base.rb +0 -19
  458. data/lib/lutaml/uml/node/class_node.rb +0 -48
  459. data/lib/lutaml/uml/node/class_relationship.rb +0 -11
  460. data/lib/lutaml/uml/node/document.rb +0 -15
  461. data/lib/lutaml/uml/node/has_name.rb +0 -15
  462. data/lib/lutaml/uml/node/has_type.rb +0 -15
  463. data/lib/lutaml/uml/node/method_argument.rb +0 -12
  464. data/lib/lutaml/uml/node/operation.rb +0 -23
  465. data/lib/lutaml/uml/node/relationship.rb +0 -22
  466. data/lib/lutaml/uml/opaque_behavior.rb +0 -11
  467. data/lib/lutaml/uml/operation.rb +0 -21
  468. data/lib/lutaml/uml/operation_parameter.rb +0 -17
  469. data/lib/lutaml/uml/package.rb +0 -31
  470. data/lib/lutaml/uml/package_path.rb +0 -235
  471. data/lib/lutaml/uml/parsers/attribute.rb +0 -68
  472. data/lib/lutaml/uml/parsers/dsl.rb +0 -415
  473. data/lib/lutaml/uml/parsers/dsl_preprocessor.rb +0 -63
  474. data/lib/lutaml/uml/parsers/dsl_transform.rb +0 -27
  475. data/lib/lutaml/uml/parsers/yaml.rb +0 -23
  476. data/lib/lutaml/uml/port.rb +0 -8
  477. data/lib/lutaml/uml/primitive_type.rb +0 -13
  478. data/lib/lutaml/uml/property.rb +0 -25
  479. data/lib/lutaml/uml/pseudostate.rb +0 -11
  480. data/lib/lutaml/uml/qualified_name.rb +0 -175
  481. data/lib/lutaml/uml/realization.rb +0 -11
  482. data/lib/lutaml/uml/region.rb +0 -11
  483. data/lib/lutaml/uml/state.rb +0 -20
  484. data/lib/lutaml/uml/state_machine.rb +0 -11
  485. data/lib/lutaml/uml/tagged_value.rb +0 -21
  486. data/lib/lutaml/uml/top_element.rb +0 -83
  487. data/lib/lutaml/uml/top_element_attribute.rb +0 -62
  488. data/lib/lutaml/uml/transition.rb +0 -22
  489. data/lib/lutaml/uml/trigger.rb +0 -16
  490. data/lib/lutaml/uml/validation/document_structure_validator.rb +0 -387
  491. data/lib/lutaml/uml/value.rb +0 -35
  492. data/lib/lutaml/uml/vertex.rb +0 -11
  493. data/lib/lutaml/uml.rb +0 -113
  494. data/lib/lutaml/uml_repository/class_lookup_index.rb +0 -40
  495. data/lib/lutaml/uml_repository/error_handler.rb +0 -203
  496. data/lib/lutaml/uml_repository/exporters/base_exporter.rb +0 -61
  497. data/lib/lutaml/uml_repository/exporters/json_exporter.rb +0 -343
  498. data/lib/lutaml/uml_repository/exporters/markdown/class_page_builder.rb +0 -187
  499. data/lib/lutaml/uml_repository/exporters/markdown/formatting.rb +0 -34
  500. data/lib/lutaml/uml_repository/exporters/markdown/index_page_builder.rb +0 -81
  501. data/lib/lutaml/uml_repository/exporters/markdown/link_resolver.rb +0 -40
  502. data/lib/lutaml/uml_repository/exporters/markdown/package_page_builder.rb +0 -107
  503. data/lib/lutaml/uml_repository/exporters/markdown.rb +0 -20
  504. data/lib/lutaml/uml_repository/exporters/markdown_exporter.rb +0 -86
  505. data/lib/lutaml/uml_repository/index_builder.rb +0 -210
  506. data/lib/lutaml/uml_repository/index_builders/association_index.rb +0 -155
  507. data/lib/lutaml/uml_repository/index_builders/class_index.rb +0 -113
  508. data/lib/lutaml/uml_repository/index_builders/package_index.rb +0 -62
  509. data/lib/lutaml/uml_repository/index_builders.rb +0 -13
  510. data/lib/lutaml/uml_repository/lazy_repository.rb +0 -236
  511. data/lib/lutaml/uml_repository/package_exporter.rb +0 -334
  512. data/lib/lutaml/uml_repository/package_loader.rb +0 -240
  513. data/lib/lutaml/uml_repository/package_metadata.rb +0 -77
  514. data/lib/lutaml/uml_repository/presenters/association_presenter.rb +0 -79
  515. data/lib/lutaml/uml_repository/presenters/attribute_presenter.rb +0 -94
  516. data/lib/lutaml/uml_repository/presenters/class_presenter.rb +0 -72
  517. data/lib/lutaml/uml_repository/presenters/datatype_presenter.rb +0 -97
  518. data/lib/lutaml/uml_repository/presenters/diagram_presenter.rb +0 -469
  519. data/lib/lutaml/uml_repository/presenters/element_presenter.rb +0 -91
  520. data/lib/lutaml/uml_repository/presenters/enum_presenter.rb +0 -78
  521. data/lib/lutaml/uml_repository/presenters/package_presenter.rb +0 -48
  522. data/lib/lutaml/uml_repository/presenters/presenter_factory.rb +0 -74
  523. data/lib/lutaml/uml_repository/queries/association_query.rb +0 -184
  524. data/lib/lutaml/uml_repository/queries/base_query.rb +0 -45
  525. data/lib/lutaml/uml_repository/queries/class_query.rb +0 -178
  526. data/lib/lutaml/uml_repository/queries/diagram_query.rb +0 -108
  527. data/lib/lutaml/uml_repository/queries/inheritance_query.rb +0 -327
  528. data/lib/lutaml/uml_repository/queries/package_query.rb +0 -230
  529. data/lib/lutaml/uml_repository/queries/search_query.rb +0 -209
  530. data/lib/lutaml/uml_repository/query_dsl/conditions/base_condition.rb +0 -28
  531. data/lib/lutaml/uml_repository/query_dsl/conditions/block_condition.rb +0 -44
  532. data/lib/lutaml/uml_repository/query_dsl/conditions/hash_condition.rb +0 -82
  533. data/lib/lutaml/uml_repository/query_dsl/conditions/package_condition.rb +0 -89
  534. data/lib/lutaml/uml_repository/query_dsl/order.rb +0 -90
  535. data/lib/lutaml/uml_repository/query_dsl/query_builder.rb +0 -290
  536. data/lib/lutaml/uml_repository/repository/deprecated.rb +0 -39
  537. data/lib/lutaml/uml_repository/repository/loader.rb +0 -117
  538. data/lib/lutaml/uml_repository/repository.rb +0 -718
  539. data/lib/lutaml/uml_repository/repository_enhanced.rb +0 -431
  540. data/lib/lutaml/uml_repository/search_result.rb +0 -86
  541. data/lib/lutaml/uml_repository/static_site/association_serialization.rb +0 -77
  542. data/lib/lutaml/uml_repository/static_site/configuration.rb +0 -268
  543. data/lib/lutaml/uml_repository/static_site/data_transformer.rb +0 -121
  544. data/lib/lutaml/uml_repository/static_site/generator.rb +0 -434
  545. data/lib/lutaml/uml_repository/static_site/id_generator.rb +0 -115
  546. data/lib/lutaml/uml_repository/static_site/models/spa_association.rb +0 -29
  547. data/lib/lutaml/uml_repository/static_site/models/spa_association_end.rb +0 -25
  548. data/lib/lutaml/uml_repository/static_site/models/spa_attribute.rb +0 -39
  549. data/lib/lutaml/uml_repository/static_site/models/spa_base.rb +0 -12
  550. data/lib/lutaml/uml_repository/static_site/models/spa_cardinality.rb +0 -19
  551. data/lib/lutaml/uml_repository/static_site/models/spa_class.rb +0 -59
  552. data/lib/lutaml/uml_repository/static_site/models/spa_diagram.rb +0 -31
  553. data/lib/lutaml/uml_repository/static_site/models/spa_document.rb +0 -31
  554. data/lib/lutaml/uml_repository/static_site/models/spa_inherited_association.rb +0 -25
  555. data/lib/lutaml/uml_repository/static_site/models/spa_inherited_attribute.rb +0 -25
  556. data/lib/lutaml/uml_repository/static_site/models/spa_literal.rb +0 -19
  557. data/lib/lutaml/uml_repository/static_site/models/spa_metadata.rb +0 -23
  558. data/lib/lutaml/uml_repository/static_site/models/spa_operation.rb +0 -34
  559. data/lib/lutaml/uml_repository/static_site/models/spa_package.rb +0 -35
  560. data/lib/lutaml/uml_repository/static_site/models/spa_package_tree_node.rb +0 -32
  561. data/lib/lutaml/uml_repository/static_site/models/spa_parameter.rb +0 -21
  562. data/lib/lutaml/uml_repository/static_site/models/spa_search_entry.rb +0 -35
  563. data/lib/lutaml/uml_repository/static_site/models/spa_statistics.rb +0 -25
  564. data/lib/lutaml/uml_repository/static_site/models/spa_tree_class_ref.rb +0 -21
  565. data/lib/lutaml/uml_repository/static_site/models.rb +0 -46
  566. data/lib/lutaml/uml_repository/static_site/search_index_builder.rb +0 -239
  567. data/lib/lutaml/uml_repository/static_site/serializers/attribute_serializer.rb +0 -60
  568. data/lib/lutaml/uml_repository/static_site/serializers/class_serializer.rb +0 -123
  569. data/lib/lutaml/uml_repository/static_site/serializers/diagram_serializer.rb +0 -73
  570. data/lib/lutaml/uml_repository/static_site/serializers/inheritance_resolver.rb +0 -262
  571. data/lib/lutaml/uml_repository/static_site/serializers/metadata_builder.rb +0 -48
  572. data/lib/lutaml/uml_repository/static_site/serializers/operation_serializer.rb +0 -57
  573. data/lib/lutaml/uml_repository/static_site/serializers/package_serializer.rb +0 -79
  574. data/lib/lutaml/uml_repository/static_site/serializers/package_tree_builder.rb +0 -91
  575. data/lib/lutaml/uml_repository/static_site/serializers.rb +0 -26
  576. data/lib/lutaml/uml_repository/static_site.rb +0 -94
  577. data/lib/lutaml/uml_repository/statistics_calculator.rb +0 -342
  578. data/lib/lutaml/uml_repository/validators/repository_validator.rb +0 -392
  579. data/lib/lutaml/uml_repository/web_ui/app.rb +0 -161
  580. data/lib/lutaml/uml_repository/web_ui/public/app.js +0 -452
  581. data/lib/lutaml/uml_repository/web_ui/public/styles.css +0 -381
  582. data/lib/lutaml/uml_repository/web_ui/views/index.erb +0 -40
  583. data/lib/lutaml/uml_repository.rb +0 -117
  584. data/lib/lutaml/xmi/liquid_drops/association_drop.rb +0 -56
  585. data/lib/lutaml/xmi/liquid_drops/attribute_drop.rb +0 -72
  586. data/lib/lutaml/xmi/liquid_drops/cardinality_drop.rb +0 -35
  587. data/lib/lutaml/xmi/liquid_drops/connector_drop.rb +0 -54
  588. data/lib/lutaml/xmi/liquid_drops/constraint_drop.rb +0 -29
  589. data/lib/lutaml/xmi/liquid_drops/data_type_drop.rb +0 -63
  590. data/lib/lutaml/xmi/liquid_drops/dependency_drop.rb +0 -36
  591. data/lib/lutaml/xmi/liquid_drops/diagram_drop.rb +0 -34
  592. data/lib/lutaml/xmi/liquid_drops/enum_drop.rb +0 -49
  593. data/lib/lutaml/xmi/liquid_drops/enum_owned_literal_drop.rb +0 -25
  594. data/lib/lutaml/xmi/liquid_drops/generalization_attribute_drop.rb +0 -87
  595. data/lib/lutaml/xmi/liquid_drops/generalization_drop.rb +0 -127
  596. data/lib/lutaml/xmi/liquid_drops/klass_drop.rb +0 -191
  597. data/lib/lutaml/xmi/liquid_drops/operation_drop.rb +0 -29
  598. data/lib/lutaml/xmi/liquid_drops/package_drop.rb +0 -108
  599. data/lib/lutaml/xmi/liquid_drops/root_drop.rb +0 -34
  600. data/lib/lutaml/xmi/liquid_drops/source_target_drop.rb +0 -43
  601. data/lib/lutaml/xmi/parsers/xmi_base.rb +0 -301
  602. data/lib/lutaml/xmi/parsers/xmi_class_members.rb +0 -45
  603. data/lib/lutaml/xmi/parsers/xmi_connector.rb +0 -263
  604. data/lib/lutaml/xmi/parsers/xml.rb +0 -63
  605. data/lib/lutaml/xmi/xmi_lookup_service.rb +0 -40
  606. data/lib/lutaml/xmi.rb +0 -47
  607. data/templates/static_site/assets/images/lutaml-full.svg +0 -1
  608. data/templates/static_site/assets/images/lutaml-icon.svg +0 -1
  609. data/templates/static_site/assets/scripts/app.js +0 -45
  610. data/templates/static_site/assets/scripts/core/state.js +0 -446
  611. data/templates/static_site/assets/scripts/core/utils.js +0 -133
  612. data/templates/static_site/assets/scripts/ui/details.js +0 -74
  613. data/templates/static_site/assets/scripts/ui/diagrams.js +0 -345
  614. data/templates/static_site/assets/scripts/ui/search.js +0 -187
  615. data/templates/static_site/assets/scripts/ui/sidebar.js +0 -123
  616. data/templates/static_site/assets/styles/00-variables.css +0 -144
  617. data/templates/static_site/assets/styles/01-reset.css +0 -69
  618. data/templates/static_site/assets/styles/02-base.css +0 -144
  619. data/templates/static_site/assets/styles/03-layout.css +0 -121
  620. data/templates/static_site/assets/styles/04-components.css +0 -905
  621. data/templates/static_site/assets/styles/05-utilities.css +0 -23
  622. data/templates/static_site/assets/styles/06-diagrams.css +0 -74
  623. data/templates/static_site/components/class_details.liquid +0 -328
  624. data/templates/static_site/components/content.liquid +0 -481
  625. data/templates/static_site/components/diagram_list.liquid +0 -52
  626. data/templates/static_site/components/diagram_viewer.liquid +0 -71
  627. data/templates/static_site/components/header.liquid +0 -114
  628. data/templates/static_site/components/package_details.liquid +0 -119
  629. data/templates/static_site/components/sidebar.liquid +0 -76
  630. data/templates/static_site/components/tree_node.liquid +0 -81
  631. data/templates/static_site/multi_file.liquid +0 -49
  632. data/templates/static_site/single_file.liquid +0 -57
@@ -1,74 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module UmlRepository
5
- module Presenters
6
- # Factory for creating appropriate presenter for UML elements.
7
- #
8
- # Uses a registry pattern to map element classes to presenter classes.
9
- # Automatically selects the correct presenter based on element type.
10
- #
11
- # @example Creating a presenter
12
- # presenter = PresenterFactory.create(class_obj, repository)
13
- # puts presenter.to_text
14
- class PresenterFactory
15
- @presenters = {}
16
-
17
- class << self
18
- # Create appropriate presenter for the given element.
19
- #
20
- # @param element [Object] UML element to present
21
- # @param repository [UmlRepository, nil] Optional repository context
22
- # @param context [Hash, nil] Optional context hash for presenter
23
- # @return [ElementPresenter] Appropriate presenter instance
24
- # @raise [ArgumentError] if no presenter registered for element
25
- # type
26
- def create(element, repository = nil, context = nil)
27
- presenter_class = find_presenter_class(element)
28
- presenter_class.new(element, repository, context)
29
- end
30
-
31
- # Register a presenter class for an element class.
32
- #
33
- # @param element_class [Class] The UML element class
34
- # @param presenter_class [Class] The presenter class to use
35
- def register(element_class, presenter_class)
36
- @presenters[element_class] = presenter_class
37
- end
38
-
39
- # Get all registered presenters.
40
- #
41
- # @return [Hash] Map of element classes to presenter classes
42
- def presenters
43
- @presenters
44
- end
45
-
46
- private
47
-
48
- # Find presenter class for element.
49
- #
50
- # Checks exact class match first, then inheritance chain.
51
- #
52
- # @param element [Object] Element to find presenter for
53
- # @return [Class] Presenter class
54
- # @raise [ArgumentError] if no presenter found
55
- def find_presenter_class(element)
56
- # Check exact class match
57
- return @presenters[element.class] if
58
- @presenters.key?(element.class)
59
-
60
- # Check inheritance chain
61
- element.class.ancestors.each do |ancestor|
62
- return @presenters[ancestor] if @presenters.key?(ancestor)
63
- end
64
-
65
- # No presenter found
66
- raise ArgumentError,
67
- "No presenter registered for #{element.class}. " \
68
- "Available: #{@presenters.keys.join(', ')}"
69
- end
70
- end
71
- end
72
- end
73
- end
74
- end
@@ -1,184 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module UmlRepository
5
- module Queries
6
- # Query service for association operations.
7
- #
8
- # Provides methods to find associations related to classes. Associations
9
- # can be owned by classes or defined at the document level.
10
- #
11
- # @example Finding all associations for a class
12
- # query = AssociationQuery.new(document, indexes)
13
- # associations = query.find_for_class("ModelRoot::Building")
14
- #
15
- # @example Finding owned associations only
16
- # associations = query.find_for_class(klass, owned_only: true)
17
- #
18
- # @example Finding associations in a specific direction
19
- # associations = query.find_for_class(klass, direction: :source)
20
- class AssociationQuery < BaseQuery
21
- # Find associations for a specific class.
22
- #
23
- # @param class_or_qname [Lutaml::Uml::Class, String] The class object
24
- # or qualified name string
25
- # @param options [Hash] Query options
26
- # @option options [Boolean] :owned_only Return only associations owned
27
- # by the class (default: false)
28
- # @option options [Boolean] :navigable_only Return only navigable
29
- # associations (default: false)
30
- # @option options [Symbol] :direction Filter by direction - :source
31
- # (class is owner_end), :target (class is member_end), or :both
32
- # (default: :both)
33
- # @return [Array<Lutaml::Uml::Association>] Array of association objects
34
- # @example
35
- # # Get all associations
36
- # all = query.find_for_class("ModelRoot::Building")
37
- #
38
- # # Get only owned associations
39
- # owned = query.find_for_class(
40
- # "ModelRoot::Building", owned_only: true)
41
- #
42
- # # Get associations where class is the source
43
- # sources = query.find_for_class(
44
- # "ModelRoot::Building", direction: :source)
45
- def find_for_class(class_or_qname, options = {}) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
46
- owned_only = options[:owned_only] || false
47
- navigable_only = options[:navigable_only] || false
48
- direction = options[:direction] || :both
49
-
50
- klass = resolve_class(class_or_qname)
51
- return [] unless klass
52
-
53
- class_name = klass.name
54
- results = []
55
-
56
- # Get owned associations from the class itself
57
- if (klass.is_a?(Lutaml::Uml::Class) || klass.is_a?(Lutaml::Uml::DataType)) && klass.associations
58
- results.concat(klass.associations)
59
- end
60
-
61
- # Get associations from document level unless owned_only
62
- if !owned_only &&
63
- document.is_a?(Lutaml::Uml::Document) && document.associations
64
- document_associations = document.associations.select do |assoc|
65
- match_association?(assoc, class_name, direction)
66
- end
67
- results.concat(document_associations)
68
- end
69
-
70
- # Filter navigable if requested
71
- if navigable_only
72
- results.select! { |assoc| navigable?(assoc) }
73
- end
74
-
75
- results.uniq
76
- end
77
-
78
- # Find associations by their type.
79
- #
80
- # @param association_type [String] The type of association
81
- # (e.g., "aggregation", "composition", "association")
82
- # @return [Array<Lutaml::Uml::Association>] Array of association objects
83
- def find_by_type(association_type)
84
- resolve_all_associations.select do |assoc|
85
- assoc.member_end_type == association_type
86
- end
87
- end
88
-
89
- def find_aggregations
90
- find_by_type("aggregation")
91
- end
92
-
93
- def find_compositions
94
- find_by_type("composition")
95
- end
96
-
97
- # Find associations between two classes
98
- #
99
- # @param owner_end_xmi_id [String] XMI ID of the owner end class
100
- # @param member_end_xmi_id [String] XMI ID of the member end class
101
- # @return [Array<Lutaml::Uml::Association>] Array of association objects
102
- def find_between_classes(owner_end_xmi_id, member_end_xmi_id)
103
- resolve_all_associations.select do |assoc|
104
- assoc.owner_end_xmi_id == owner_end_xmi_id &&
105
- assoc.member_end_xmi_id == member_end_xmi_id
106
- end
107
- end
108
-
109
- # Retrieve all associations in the document
110
- #
111
- # @return [Array<Lutaml::Uml::Association>] Array of all associations
112
- def all
113
- resolve_all_associations
114
- end
115
-
116
- private
117
-
118
- # Resolve all associations in the document
119
- #
120
- # @return [Array<Lutaml::Uml::Association>] Array of all associations
121
- def resolve_all_associations
122
- indexes[:qualified_names].values.filter_map do |entity|
123
- if entity.is_a?(Lutaml::Uml::Association)
124
- entity
125
- elsif entity.is_a?(Lutaml::Uml::Class) && entity.associations
126
- entity.associations
127
- end
128
- end.flatten
129
- end
130
-
131
- # Resolve a class or qualified name to a class object
132
- #
133
- # @param class_or_qname [Lutaml::Uml::Class, String] The class object
134
- # or qualified name string
135
- # @return [Lutaml::Uml::Class, nil] The class object,
136
- # or nil if not found
137
- def resolve_class(class_or_qname)
138
- if class_or_qname.is_a?(String)
139
- indexes[:qualified_names][class_or_qname]
140
- else
141
- class_or_qname
142
- end
143
- end
144
-
145
- # Check if an association matches the class name and direction
146
- #
147
- # @param assoc [Lutaml::Uml::Association] The association to check
148
- # @param class_name [String] The class name to match
149
- # @param direction [Symbol] The direction filter
150
- # (:source, :target, :both)
151
- # @return [Boolean] true if the association matches
152
- def match_association?(assoc, class_name, direction) # rubocop:disable Metrics/MethodLength
153
- case direction
154
- when :source
155
- # Class is the owner_end (source)
156
- assoc.owner_end == class_name
157
- when :target
158
- # Class is the member_end (target)
159
- assoc.member_end == class_name
160
- when :both
161
- # Class is either end
162
- assoc.owner_end == class_name || assoc.member_end == class_name
163
- else
164
- false
165
- end
166
- end
167
-
168
- # Check if an association is navigable
169
- #
170
- # An association is considered navigable if it has attribute names
171
- # defined for navigation.
172
- #
173
- # @param assoc [Lutaml::Uml::Association] The association to check
174
- # @return [Boolean] true if navigable
175
- def navigable?(assoc)
176
- # An association is navigable if it has member_end_attribute_name
177
- # or owner_end_attribute_name defined
178
- !assoc.member_end_attribute_name.nil? ||
179
- !assoc.owner_end_attribute_name.nil?
180
- end
181
- end
182
- end
183
- end
184
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module UmlRepository
5
- module Queries
6
- # Base class for all query services.
7
- #
8
- # Provides common functionality for accessing the document and indexes
9
- # that subclasses can use to implement specific query operations.
10
- #
11
- # @example Creating a custom query
12
- # class CustomQuery < BaseQuery
13
- # def find_something
14
- # indexes[:qualified_names]["ModelRoot::MyClass"]
15
- # end
16
- # end
17
- #
18
- # query = CustomQuery.new(document, indexes)
19
- # result = query.find_something
20
- class BaseQuery
21
- # Create a new query instance
22
- #
23
- # @param document [Lutaml::Uml::Document] The UML document to query
24
- # @param indexes [Hash] The indexes built by IndexBuilder
25
- def initialize(document, indexes)
26
- @document = document
27
- @indexes = indexes
28
- end
29
-
30
- protected
31
-
32
- attr_reader :document, :indexes
33
-
34
- # Resolve all associations in the document
35
- #
36
- # @return [Array<Lutaml::Uml::Association>] Array of all associations
37
- def find_class_by_id(class_id)
38
- indexes[:qualified_names].find do |_qualified_name, entity|
39
- entity.is_a?(Lutaml::Uml::Class) && entity.xmi_id == class_id
40
- end
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,178 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module UmlRepository
5
- module Queries
6
- # Query service for class/classifier operations.
7
- #
8
- # Provides methods to find and query classes, data types, and enums
9
- # using the qualified_names and stereotypes indexes.
10
- #
11
- # @example Finding a class by qualified name
12
- # query = ClassQuery.new(document, indexes)
13
- # klass = query.find_by_qname("ModelRoot::i-UR::urf::Building")
14
- #
15
- # @example Finding classes by stereotype
16
- # classes = query.find_by_stereotype("featureType")
17
- #
18
- # @example Getting classes in a package
19
- # classes = query.in_package("ModelRoot::i-UR::urf")
20
- class ClassQuery < BaseQuery
21
- # Find a class by its qualified name.
22
- #
23
- # @param qualified_name_string [String] The qualified name
24
- # (e.g., "ModelRoot::i-UR::urf::Building")
25
- # @return [Lutaml::Uml::Class, Lutaml::Uml::DataType,
26
- # Lutaml::Uml::Enum, nil]
27
- # The class object, or nil if not found
28
- # @example
29
- # klass = query.find_by_qname("ModelRoot::i-UR::urf::Building")
30
- def find_by_qname(qualified_name_string)
31
- if qualified_name_string.nil? || qualified_name_string.empty?
32
- return nil
33
- end
34
-
35
- indexes[:qualified_names][qualified_name_string]
36
- end
37
-
38
- # Find all classes with a specific stereotype.
39
- #
40
- # @param stereotype [String] The stereotype to search for
41
- # @return [Array] Array of class objects with the stereotype
42
- # @example
43
- # feature_types = query.find_by_stereotype("featureType")
44
- # # => [Class{name: "Building"}, Class{name: "Road"}, ...]
45
- def find_by_stereotype(stereotype)
46
- return [] if stereotype.nil? || stereotype.empty?
47
-
48
- indexes[:stereotypes][stereotype] || []
49
- end
50
-
51
- # Get classes in a specific package.
52
- #
53
- # @param package_path_string [String] The package path
54
- # @param recursive [Boolean] Whether to include classes from nested
55
- # packages (default: false)
56
- # @return [Array] Array of class objects in the package
57
- # @example Non-recursive query
58
- # classes = query.in_package(
59
- # "ModelRoot::i-UR::urf", recursive: false)
60
- # # Returns only classes directly in the urf package
61
- #
62
- # @example Recursive query
63
- # classes = query.in_package("ModelRoot::i-UR", recursive: true)
64
- # # Returns classes in i-UR and all nested packages
65
- def in_package(package_path_string, recursive: false)
66
- return [] if package_path_string.nil? || package_path_string.empty?
67
-
68
- pkg_to_classes = indexes[:package_to_classes]
69
- if pkg_to_classes
70
- in_package_indexed(package_path_string, pkg_to_classes,
71
- recursive: recursive)
72
- else
73
- in_package_scan(package_path_string, recursive: recursive)
74
- end
75
- end
76
-
77
- private
78
-
79
- # O(1) indexed lookup for in_package
80
- def in_package_indexed(package_path_string, pkg_to_classes, recursive:)
81
- is_absolute = package_path_string.start_with?("::")
82
- search_segs = package_path_string.split("::").reject(&:empty?)
83
-
84
- results = []
85
- pkg_to_classes.each do |path, classes|
86
- results.concat(classes) if indexed_path_matches?(
87
- path, package_path_string, is_absolute, search_segs, recursive
88
- )
89
- end
90
- results
91
- end
92
-
93
- def indexed_path_matches?(path, package_path_string, is_absolute,
94
- search_segs, recursive)
95
- if is_absolute
96
- indexed_absolute_match?(path, package_path_string, recursive)
97
- else
98
- indexed_relative_match?(path.split("::"), search_segs, recursive)
99
- end
100
- end
101
-
102
- def indexed_absolute_match?(path, package_path_string, recursive)
103
- if recursive
104
- path == package_path_string ||
105
- path.start_with?("#{package_path_string}::")
106
- else
107
- path == package_path_string
108
- end
109
- end
110
-
111
- def indexed_relative_match?(path_segs, search_segs, recursive)
112
- if recursive
113
- segments_overlap?(path_segs, search_segs)
114
- else
115
- segments_end_with?(path_segs, search_segs)
116
- end
117
- end
118
-
119
- # Fallback: original O(n) scan
120
- def in_package_scan(package_path_string, recursive:)
121
- package_path = Lutaml::Uml::PackagePath.new(package_path_string)
122
- is_absolute = package_path.absolute?
123
-
124
- indexes[:qualified_names].each_value.select do |klass|
125
- scan_matches_package?(klass, package_path, is_absolute, recursive)
126
- end
127
- end
128
-
129
- def scan_matches_package?(klass, package_path, is_absolute, recursive)
130
- qname = resolve_qname_for(klass)
131
- return false unless qname
132
-
133
- if is_absolute
134
- match_absolute_path?(qname, package_path, recursive)
135
- else
136
- match_relative_path?(qname, package_path, recursive)
137
- end
138
- end
139
-
140
- def resolve_qname_for(klass)
141
- indexes[:qualified_names].find { |_, v| v == klass }&.first
142
- end
143
-
144
- def match_absolute_path?(qname, package_path, recursive)
145
- qname = Lutaml::Uml::QualifiedName.new(qname)
146
- if recursive
147
- qname.package_path.starts_with?(package_path)
148
- else
149
- qname.package_path == package_path
150
- end
151
- end
152
-
153
- def match_relative_path?(qname_string, package_path, recursive)
154
- qname = Lutaml::Uml::QualifiedName.new(qname_string)
155
- class_pkg_segs = qname.package_path.segments
156
- search_segs = package_path.segments
157
-
158
- if recursive
159
- segments_overlap?(class_pkg_segs, search_segs)
160
- else
161
- segments_end_with?(class_pkg_segs, search_segs)
162
- end
163
- end
164
-
165
- def segments_overlap?(class_segs, search_segs)
166
- (0..(class_segs.size - search_segs.size)).any? do |i|
167
- class_segs[i, search_segs.size] == search_segs
168
- end
169
- end
170
-
171
- def segments_end_with?(class_segs, search_segs)
172
- class_segs.size >= search_segs.size &&
173
- class_segs[-search_segs.size..] == search_segs
174
- end
175
- end
176
- end
177
- end
178
- end
@@ -1,108 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module UmlRepository
5
- module Queries
6
- # Query service for diagram operations.
7
- #
8
- # Provides methods to find and list diagrams from packages using the
9
- # diagram_index which maps package IDs/paths to diagram collections.
10
- #
11
- # @example Finding diagrams in a package
12
- # query = DiagramQuery.new(document, indexes)
13
- # diagrams = query.in_package("ModelRoot::i-UR::urf")
14
- #
15
- # @example Finding a diagram by name
16
- # diagram = query.find_by_name("Class Diagram")
17
- #
18
- # @example Getting all diagrams
19
- # all_diagrams = query.all
20
- class DiagramQuery < BaseQuery
21
- # Get diagrams in a specific package.
22
- #
23
- # @param package_path_string [String] The package path
24
- # @return [Array<Diagram>] Array of diagram objects in the package
25
- # @example
26
- # diagrams = query.in_package("ModelRoot::i-UR::urf")
27
- def in_package(package_path_string) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
28
- return [] if package_path_string.nil? || package_path_string.empty?
29
-
30
- # Try to find diagrams by path
31
- diagrams = indexes[:diagram_index][package_path_string]
32
- return diagrams if diagrams
33
-
34
- # Try to find the package and use its ID
35
- package = indexes[:package_paths][package_path_string]
36
- return [] unless package
37
-
38
- package_id = package.is_a?(Lutaml::Uml::Package) ? package.xmi_id : nil
39
- return [] unless package_id
40
-
41
- indexes[:diagram_index][package_id] || []
42
- end
43
-
44
- # Find a diagram by its name.
45
- #
46
- #
47
- # @param diagram_name [String] The diagram name to search for
48
- # @return Diagram The diagram object, or nil if not found
49
- # @example
50
- # diagram = query.find_by_name("Building Class Diagram")
51
- def find_by_name(diagram_name)
52
- indexes[:diagram_index].values.filter_map do |diagrams|
53
- diagrams.select { |diagram| diagram.name == diagram_name }
54
- end.flatten.first
55
- end
56
-
57
- # Find diagrams containing a specific package by its XMI ID.
58
- #
59
- # @param package_id [String] The XMI ID of the package
60
- # @return [Array<Diagram>] Array of diagram objects
61
- def find_by_package(package_id)
62
- indexes[:diagram_index].values.filter_map do |diagrams|
63
- diagrams.select { |diagram| diagram.package_id == package_id }
64
- end.flatten
65
- end
66
-
67
- # Find diagrams containing a specific class by its XMI ID.
68
- #
69
- # @param class_xmi_id [String] The XMI ID of the class
70
- # @return [Array<Diagram>] Array of diagram objects
71
- def find_containing_class(class_xmi_id)
72
- package = find_package_containing_class(class_xmi_id)
73
- return [] unless package
74
-
75
- find_by_package(package.xmi_id)
76
- end
77
-
78
- # Find the package containing a specific class by its XMI ID.
79
- #
80
- # @param class_xmi_id [String] The XMI ID of the class
81
- # @return [Lutaml::Uml::Package, nil] The package object
82
- def find_package_containing_class(class_xmi_id)
83
- qualified_name, _klass = find_class_by_id(class_xmi_id)
84
- return nil unless qualified_name
85
-
86
- package_path = qualified_name.split("::")[0..-2].join("::")
87
- indexes[:package_paths][package_path]
88
- end
89
-
90
- # Get all diagrams from all packages.
91
- #
92
- # @return [Array<Diagram>] Array of all diagram objects
93
- # @example
94
- # all_diagrams = query.all
95
- # all_diagrams.each { |d| puts d.name }
96
- def all
97
- result = []
98
-
99
- indexes[:diagram_index].each_value do |diagrams|
100
- result.concat(diagrams)
101
- end
102
-
103
- result
104
- end
105
- end
106
- end
107
- end
108
- end