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,203 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module UmlRepository
5
- # Error handler for user-friendly error messages with suggestions.
6
- #
7
- # Provides helpful error messages when classes, packages, or other model
8
- # elements are not found. Uses fuzzy matching (Levenshtein distance) to
9
- # suggest similar names that might be what the user intended.
10
- #
11
- # @example Class not found
12
- # handler = ErrorHandler.new(repository)
13
- # handler.class_not_found_error("ModelRoot::Buildng")
14
- # # => Raises error with suggestion: Did you mean "ModelRoot::Building"?
15
- #
16
- # @example Package not found
17
- # handler.package_not_found_error("ModelRoot::i-UR::urf")
18
- # # => Raises error with suggestions for similar packages
19
- class ErrorHandler
20
- # Maximum Levenshtein distance for suggestions
21
- MAX_SUGGESTION_DISTANCE = 3
22
-
23
- # Maximum number of suggestions to show
24
- MAX_SUGGESTIONS = 5
25
-
26
- # @return [UmlRepository] The repository to search for suggestions
27
- attr_reader :repository
28
-
29
- # Initialize a new ErrorHandler.
30
- #
31
- # @param repository [UmlRepository] Repository to use for suggestions
32
- def initialize(repository)
33
- @repository = repository
34
- end
35
-
36
- # Raise a class not found error with suggestions.
37
- #
38
- # Searches for similar class names using fuzzy matching and provides
39
- # helpful suggestions in the error message.
40
- #
41
- # @param attempted_qname [String] The qualified name that was attempted
42
- # @raise [NameError] With helpful message and suggestions
43
- # @example
44
- # handler.class_not_found_error("ModelRoot::Buildng")
45
- def class_not_found_error(attempted_qname)
46
- suggestions = suggest_similar_classes(attempted_qname)
47
-
48
- message = "Class not found: #{attempted_qname}"
49
-
50
- if suggestions.any?
51
- message += "\n\nDid you mean one of these?"
52
- suggestions.each { |s| message += "\n - #{s}" }
53
- else
54
- message += "\n\nTip: Use the 'search' or 'find' commands to " \
55
- "explore available classes."
56
- end
57
-
58
- raise NameError, message
59
- end
60
-
61
- # Raise a package not found error with suggestions.
62
- #
63
- # Searches for similar package paths using fuzzy matching and provides
64
- # helpful suggestions in the error message.
65
- #
66
- # @param attempted_path [String] The package path that was attempted
67
- # @raise [NameError] With helpful message and suggestions
68
- # @example
69
- # handler.package_not_found_error("ModelRoot::i-UR::urf")
70
- def package_not_found_error(attempted_path)
71
- suggestions = suggest_similar_packages(attempted_path)
72
-
73
- message = "Package not found: #{attempted_path}"
74
-
75
- if suggestions.any?
76
- message += "\n\nDid you mean one of these?"
77
- suggestions.each { |s| message += "\n - #{s}" }
78
- else
79
- message += "\n\nTip: Use the 'list' or 'tree' commands to explore " \
80
- "available packages."
81
- end
82
-
83
- raise NameError, message
84
- end
85
-
86
- # Suggest similar class names based on Levenshtein distance.
87
- #
88
- # @param attempted [String] The attempted qualified name
89
- # @return [Array<String>] Array of suggested qualified names, sorted by
90
- # similarity
91
- # @example
92
- # suggestions = handler.suggest_similar_classes("ModelRoot::Buildng")
93
- # # => ["ModelRoot::Building", "ModelRoot::BuildingPart"]
94
- def suggest_similar_classes(attempted)
95
- return [] unless repository.indexes[:class_to_qname]
96
-
97
- all_qnames = repository.indexes[:class_to_qname].values
98
- find_similar_names(attempted, all_qnames)
99
- end
100
-
101
- # Suggest similar package paths based on Levenshtein distance.
102
- #
103
- # @param attempted [String] The attempted package path
104
- # @return [Array<String>] Array of suggested package paths, sorted by
105
- # similarity
106
- # @example
107
- # suggestions = handler.suggest_similar_packages("ModelRoot::i-UR")
108
- # # => ["ModelRoot::i-UR::urf", "ModelRoot::i-UR::core"]
109
- def suggest_similar_packages(attempted)
110
- return [] unless repository.indexes[:package_to_path]
111
-
112
- all_paths = repository.indexes[:package_to_path].values
113
- find_similar_names(attempted, all_paths)
114
- end
115
-
116
- # Calculate Levenshtein distance between two strings.
117
- #
118
- # The Levenshtein distance is the minimum number of single-character edits
119
- # (insertions, deletions, or substitutions) required to change one string
120
- # into another.
121
- #
122
- # @param str1 [String] First string
123
- # @param str2 [String] Second string
124
- # @return [Integer] The Levenshtein distance
125
- # @example
126
- # distance = handler.levenshtein_distance("kitten", "sitting")
127
- # # => 3
128
- def levenshtein_distance(str1, str2) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
129
- return str2.length if str1.empty?
130
- return str1.length if str2.empty?
131
-
132
- # Create a matrix to store distances
133
- matrix = Array.new(str1.length + 1) do |i|
134
- Array.new(str2.length + 1) do |j|
135
- if i.zero?
136
- j
137
- else
138
- (j.zero? ? i : 0)
139
- end
140
- end
141
- end
142
-
143
- # Calculate distances
144
- (1..str1.length).each do |i|
145
- (1..str2.length).each do |j|
146
- cost = str1[i - 1] == str2[j - 1] ? 0 : 1
147
- matrix[i][j] = [
148
- matrix[i - 1][j] + 1, # deletion
149
- matrix[i][j - 1] + 1, # insertion
150
- matrix[i - 1][j - 1] + cost, # substitution
151
- ].min
152
- end
153
- end
154
-
155
- matrix[str1.length][str2.length]
156
- end
157
-
158
- private
159
-
160
- # Find similar names from a list using Levenshtein distance.
161
- #
162
- # @param attempted [String] The attempted name
163
- # @param candidates [Array<String>] List of candidate names
164
- # @return [Array<String>] Sorted array of similar names
165
- def find_similar_names(attempted, candidates) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
166
- # Calculate distances for all candidates
167
- distances = candidates.map do |candidate|
168
- distance = levenshtein_distance(
169
- attempted.downcase,
170
- candidate.downcase,
171
- )
172
- { name: candidate, distance: distance }
173
- end
174
-
175
- # Filter by maximum distance and sort
176
- similar = distances
177
- .select { |d| d[:distance] <= MAX_SUGGESTION_DISTANCE }
178
- .sort_by { |d| d[:distance] }
179
- .take(MAX_SUGGESTIONS)
180
- .map { |d| d[:name] }
181
-
182
- # If no close matches, try substring matching
183
- if similar.empty?
184
- similar = find_substring_matches(attempted, candidates)
185
- end
186
-
187
- similar
188
- end
189
-
190
- # Find names containing the attempted string as a substring.
191
- #
192
- # @param attempted [String] The attempted name
193
- # @param candidates [Array<String>] List of candidate names
194
- # @return [Array<String>] Array of matching names
195
- def find_substring_matches(attempted, candidates)
196
- attempted_lower = attempted.downcase
197
- candidates
198
- .select { |c| c.downcase.include?(attempted_lower) }
199
- .take(MAX_SUGGESTIONS)
200
- end
201
- end
202
- end
203
- end
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module UmlRepository
5
- module Exporters
6
- # Base class for all exporters.
7
- #
8
- # Exporters convert a UmlRepository to various formats such as CSV,
9
- # JSON, Markdown, etc. All exporters inherit from this base class and
10
- # implement the [`export`](#export) method.
11
- #
12
- # @example Creating a custom exporter
13
- # class MyExporter < BaseExporter
14
- # def export(output_path, options = {})
15
- # # Implementation here
16
- # end
17
- # end
18
- #
19
- # exporter = MyExporter.new(repository)
20
- # exporter.export("output.txt")
21
- class BaseExporter
22
- # @return [UmlRepository] The repository to export
23
- attr_reader :repository
24
-
25
- # Initialize a new exporter.
26
- #
27
- # @param repository [UmlRepository] The repository to export
28
- def initialize(repository)
29
- @repository = repository
30
- end
31
-
32
- # Export the repository to a file.
33
- #
34
- # @param output_path [String] Path to the output file
35
- # @param options [Hash] Export options (exporter-specific)
36
- # @raise [NotImplementedError] Must be implemented by subclasses
37
- # @return [void]
38
- def export(output_path, options = {})
39
- raise NotImplementedError,
40
- "#{self.class.name} must implement #export"
41
- end
42
-
43
- private
44
-
45
- # Get the document from the repository.
46
- #
47
- # @return [Lutaml::Uml::Document] The UML document
48
- def document
49
- @repository.document
50
- end
51
-
52
- # Get the indexes from the repository.
53
- #
54
- # @return [Hash] The repository indexes
55
- def indexes
56
- @repository.indexes
57
- end
58
- end
59
- end
60
- end
61
- end
@@ -1,343 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "json"
4
-
5
- module Lutaml
6
- module UmlRepository
7
- module Exporters
8
- # Export UML repository to JSON format.
9
- #
10
- # Exports the complete UML model as JSON, preserving all relationships
11
- # and metadata. Supports filtering by package and optional pretty
12
- # printing.
13
- #
14
- # @example Basic export
15
- # exporter = JsonExporter.new(repository)
16
- # exporter.export("model.json")
17
- #
18
- # @example Pretty-printed export
19
- # exporter.export("model.json", pretty: true)
20
- #
21
- # @example Export specific package
22
- # exporter.export("model.json", package: "ModelRoot::i-UR::urf")
23
- class JsonExporter < BaseExporter
24
- # Export repository to JSON format.
25
- #
26
- # @param output_path [String] Path to the output JSON file
27
- # @param options [Hash] Export options
28
- # @option options [Boolean] :pretty (true) Pretty-print JSON
29
- # @option options [String] :package Filter by package path
30
- # @option options [Boolean] :recursive (false) Include nested packages
31
- # when filtering
32
- # @option options [Boolean] :include_diagrams (true) Include diagram
33
- # metadata
34
- # @return [void]
35
- def export(output_path, options = {})
36
- data = build_export_data(options)
37
-
38
- File.write(output_path, format_json(data, options))
39
- end
40
-
41
- private
42
-
43
- # Build the export data structure.
44
- #
45
- # @param options [Hash] Export options
46
- # @return [Hash] The complete data structure
47
- def build_export_data(options) # rubocop:disable Metrics/MethodLength
48
- {
49
- metadata: build_metadata,
50
- packages: build_packages(options),
51
- classes: build_classes(options),
52
- associations: build_associations(options),
53
- diagrams: if options.fetch(:include_diagrams, true)
54
- build_diagrams(options)
55
- else
56
- []
57
- end,
58
- }
59
- end
60
-
61
- # Build metadata section.
62
- #
63
- # @return [Hash] Metadata hash
64
- def build_metadata
65
- stats = repository.statistics
66
- {
67
- exported_at: Time.now.utc.iso8601,
68
- total_packages: stats&.dig(:total_packages) || 0,
69
- total_classes: stats&.dig(:total_classes) || 0,
70
- total_associations: stats&.dig(:total_associations) || 0,
71
- total_diagrams: stats&.dig(:total_diagrams) || 0,
72
- }
73
- end
74
-
75
- # Build packages section.
76
- #
77
- # @param options [Hash] Export options
78
- # @return [Array<Hash>] Array of package hashes
79
- def build_packages(options)
80
- packages = if options[:package]
81
- repository.list_packages(
82
- options[:package],
83
- recursive: options[:recursive] || false,
84
- )
85
- else
86
- repository.list_packages("ModelRoot", recursive: true)
87
- end
88
-
89
- packages.map { |pkg| serialize_package(pkg) }
90
- end
91
-
92
- # Serialize a package to a hash.
93
- #
94
- # @param package [Lutaml::Uml::Package, Lutaml::Uml::Document]
95
- # The package object
96
- # @return [Hash] Package data
97
- def serialize_package(package)
98
- {
99
- id: package.xmi_id,
100
- name: package.name,
101
- path: package_path(package),
102
- classes_count: package.classes&.size || 0,
103
- packages_count: package.packages&.size || 0,
104
- }
105
- end
106
-
107
- # Get package path.
108
- #
109
- # @param package [Object] The package object
110
- # @return [String] The package path
111
- def package_path(package)
112
- indexes&.dig(:package_to_path, package.xmi_id) || package.name
113
- end
114
-
115
- # Build classes section.
116
- #
117
- # @param options [Hash] Export options
118
- # @return [Array<Hash>] Array of class hashes
119
- def build_classes(options) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
120
- classes = if options[:package]
121
- repository.classes_in_package(
122
- options[:package],
123
- recursive: options[:recursive] || false,
124
- )
125
- else
126
- indexes&.dig(:classes)&.values || []
127
- end
128
-
129
- classes.map { |klass| serialize_class(klass) }
130
- end
131
-
132
- # Serialize a class to a hash.
133
- #
134
- # @param klass [Lutaml::Uml::Class, Lutaml::Uml::DataType,
135
- # Lutaml::Uml::Enum] The class object
136
- # @return [Hash] Class data
137
- def serialize_class(klass) # rubocop:disable Metrics/MethodLength
138
- qname = qualified_name(klass)
139
-
140
- {
141
- id: klass.xmi_id,
142
- qualified_name: qname,
143
- name: klass.name,
144
- type: class_type(klass),
145
- stereotypes: normalize_stereotypes(klass.stereotype),
146
- package: extract_package_path(qname),
147
- attributes: serialize_attributes(klass),
148
- operations: serialize_operations(klass),
149
- generalizations: serialize_generalizations(klass),
150
- }
151
- end
152
-
153
- # Normalize stereotypes to array format.
154
- #
155
- # @param stereotype [String, Array, nil] The stereotype(s)
156
- # @return [Array] Array of stereotypes
157
- def normalize_stereotypes(stereotype)
158
- return [] unless stereotype
159
-
160
- case stereotype
161
- when Array
162
- stereotype
163
- when String
164
- [stereotype]
165
- else
166
- []
167
- end
168
- end
169
-
170
- # Get class type.
171
- #
172
- # @param klass [Object] The class object
173
- # @return [String] The class type
174
- def class_type(klass)
175
- klass.class.name.split("::").last
176
- end
177
-
178
- # Get qualified name.
179
- #
180
- # @param klass [Object] The class object
181
- # @return [String] The qualified name
182
- def qualified_name(klass)
183
- indexes&.dig(:class_to_qname, klass.xmi_id) || klass.name
184
- end
185
-
186
- # Extract package path from qualified name.
187
- #
188
- # @param qname [String] The qualified name
189
- # @return [String] The package path
190
- def extract_package_path(qname)
191
- parts = qname.split("::")
192
- parts.size > 1 ? parts[0..-2].join("::") : ""
193
- end
194
-
195
- # Serialize class attributes.
196
- #
197
- # @param klass [Object] The class object
198
- # @return [Array<Hash>] Array of attribute hashes
199
- def serialize_attributes(klass)
200
- return [] unless klass.attributes
201
-
202
- klass.attributes.map do |attr|
203
- {
204
- name: attr.name,
205
- type: attr.type,
206
- visibility: attr.visibility,
207
- cardinality: serialize_cardinality(attr.cardinality),
208
- }
209
- end
210
- end
211
-
212
- # Serialize cardinality.
213
- #
214
- # @param cardinality [Lutaml::Uml::Cardinality, nil] The cardinality
215
- # @return [Hash, nil] Cardinality data
216
- def serialize_cardinality(cardinality)
217
- return nil unless cardinality
218
-
219
- {
220
- min: cardinality.min,
221
- max: cardinality.max,
222
- }
223
- end
224
-
225
- # Serialize class operations.
226
- #
227
- # @param klass [Object] The class object
228
- # @return [Array<Hash>] Array of operation hashes
229
- def serialize_operations(klass)
230
- return [] unless klass.is_a?(Lutaml::Uml::Classifier) && klass.operations
231
-
232
- klass.operations.map do |op|
233
- {
234
- name: op.name,
235
- visibility: op.visibility,
236
- return_type: op.return_type,
237
- }
238
- end
239
- end
240
-
241
- # Serialize generalizations.
242
- #
243
- # @param klass [Object] The class object
244
- # @return [Array<String>] Array of parent class qualified names
245
- def serialize_generalizations(klass)
246
- parent = repository.supertype_of(klass)
247
- parent ? [qualified_name(parent)] : []
248
- rescue StandardError
249
- []
250
- end
251
-
252
- # Build associations section.
253
- #
254
- # @param options [Hash] Export options
255
- # @return [Array<Hash>] Array of association hashes
256
- def build_associations(options) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
257
- associations = indexes[:associations]&.values || []
258
-
259
- # Filter by package if specified
260
- if options[:package]
261
- classes = repository.classes_in_package(
262
- options[:package],
263
- recursive: options[:recursive] || false,
264
- )
265
- class_ids = classes.to_set(&:xmi_id)
266
- associations = associations.select do |assoc|
267
- class_ids.include?(assoc.member_end_xmi_id) ||
268
- class_ids.include?(assoc.owner_end_xmi_id)
269
- end
270
- end
271
-
272
- associations.map { |assoc| serialize_association(assoc) }
273
- end
274
-
275
- # Serialize an association.
276
- #
277
- # @param association [Lutaml::Uml::Association] The association object
278
- # @return [Hash] Association data
279
- def serialize_association(association) # rubocop:disable Metrics/MethodLength
280
- {
281
- id: association.xmi_id,
282
- name: association.name,
283
- owner_end: association.owner_end,
284
- owner_end_attribute_name: association.owner_end_attribute_name,
285
- owner_end_cardinality: serialize_cardinality(
286
- association.owner_end_cardinality,
287
- ),
288
- owner_end_type: association.owner_end_type,
289
- owner_end_xmi_id: association.owner_end_xmi_id,
290
- member_end: association.member_end,
291
- member_end_attribute_name: association.member_end_attribute_name,
292
- member_end_xmi_id: association.member_end_xmi_id,
293
- member_end_cardinality: serialize_cardinality(
294
- association.member_end_cardinality,
295
- ),
296
- member_end_type: association.member_end_type,
297
- }
298
- end
299
-
300
- # Build diagrams section.
301
- #
302
- # @param options [Hash] Export options
303
- # @return [Array<Hash>] Array of diagram hashes
304
- def build_diagrams(options)
305
- diagrams = if options[:package]
306
- repository.diagrams_in_package(options[:package])
307
- else
308
- repository.all_diagrams
309
- end
310
-
311
- diagrams.map { |diagram| serialize_diagram(diagram) }
312
- rescue StandardError
313
- []
314
- end
315
-
316
- # Serialize a diagram.
317
- #
318
- # @param diagram [Lutaml::Uml::Diagram] The diagram object
319
- # @return [Hash] Diagram data
320
- def serialize_diagram(diagram)
321
- {
322
- id: diagram.xmi_id,
323
- name: diagram.name,
324
- type: diagram.diagram_type,
325
- }
326
- end
327
-
328
- # Format JSON output.
329
- #
330
- # @param data [Hash] The data to format
331
- # @param options [Hash] Formatting options
332
- # @return [String] Formatted JSON string
333
- def format_json(data, options)
334
- if options.fetch(:pretty, true)
335
- JSON.pretty_generate(data)
336
- else
337
- JSON.generate(data)
338
- end
339
- end
340
- end
341
- end
342
- end
343
- end