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,434 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "liquid"
4
- require "json"
5
- require "fileutils"
6
-
7
- module Lutaml
8
- module UmlRepository
9
- module StaticSite
10
- # Resolves Liquid {% include %} paths to template files on disk.
11
- # Unlike LocalFileSystem (which adds a "_" prefix), this resolves
12
- # paths directly: "components/header" → "<root>/components/header.liquid"
13
- class TemplateFileSystem
14
- attr_reader :root
15
-
16
- def initialize(root)
17
- @root = root
18
- end
19
-
20
- def read_template_file(template_path)
21
- full = File.expand_path("#{template_path}.liquid", @root)
22
- unless full.start_with?(@root)
23
- raise Liquid::FileSystemError,
24
- "Illegal template path: #{template_path}"
25
- end
26
-
27
- File.read(full)
28
- end
29
- end
30
-
31
- # Main static site generator for LutaML UML Browser.
32
- #
33
- # Follows Dependency Inversion Principle by injecting dependencies
34
- # and using external configuration instead of hardcoded values.
35
- #
36
- # @example Single-file generation
37
- # config = Configuration.load
38
- # generator = Generator.new(repository, config: config,
39
- # mode: :single_file)
40
- # generator.generate
41
- #
42
- # @example With dependency injection
43
- # generator = Generator.new(repository,
44
- # config: custom_config,
45
- # id_generator: custom_id_gen,
46
- # data_transformer: custom_transformer
47
- # )
48
- class Generator
49
- attr_reader :repository, :config, :options
50
-
51
- # Initialize generator with dependency injection
52
- #
53
- # @param repository [UmlRepository] The repository to generate site for
54
- # @param options [Hash] Generation options
55
- # @option options [Configuration] :config Configuration instance
56
- # (default: auto-loaded)
57
- # @option options [IDGenerator] :id_generator ID generator instance
58
- # @option options [DataTransformer] :data_transformer Data
59
- # transformer instance
60
- # @option options [SearchIndexBuilder] :search_builder Search index
61
- # builder instance
62
- # @option options [Symbol] :mode Output mode
63
- # (:single_file or :multi_file)
64
- # @option options [String] :output Output path
65
- # @option options [Boolean] :minify Minify output (overrides config)
66
- def initialize(repository, options = {}) # rubocop:disable Metrics/MethodLength
67
- @repository = repository
68
- @config = options[:config] ||
69
- Configuration.load(options[:config_path])
70
- @options = build_options(options)
71
-
72
- # Dependency injection for testability
73
- @id_generator = options[:id_generator] || IDGenerator.new
74
- @data_transformer = options[:data_transformer] ||
75
- create_data_transformer
76
- @search_builder = options[:search_builder] ||
77
- create_search_builder
78
-
79
- @liquid = setup_liquid
80
- end
81
-
82
- # Generate the static site
83
- #
84
- # @return [String] Path to generated output
85
- def generate
86
- case @options[:mode]
87
- when :single_file
88
- generate_single_file
89
- when :multi_file
90
- generate_multi_file
91
- else
92
- raise ArgumentError,
93
- "Invalid mode: #{@options[:mode]}. " \
94
- "Use :single_file or :multi_file"
95
- end
96
- end
97
-
98
- private
99
-
100
- # Build final options merging user options with configuration
101
- def build_options(user_options) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
102
- # Priority: user_options > config > defaults
103
- defaults = {
104
- mode: :single_file,
105
- output: determine_default_output,
106
- }
107
-
108
- config_options = {
109
- title: @config.ui&.title,
110
- description: @config.ui&.description,
111
- minify: if user_options[:mode] == :single_file
112
- @config.output&.single_file&.minify
113
- else
114
- @config.output&.multi_file&.minify
115
- end,
116
- template_path: parse_template_path || default_template_path,
117
- }.compact
118
-
119
- defaults.merge(config_options).merge(user_options)
120
- end
121
-
122
- def parse_template_path # rubocop:disable Metrics/MethodLength
123
- return nil unless @config.templates
124
-
125
- templates_hash = case @config.templates
126
- when Hash
127
- @config.templates
128
- when String
129
- begin
130
- YAML.safe_load(@config.templates)
131
- rescue StandardError
132
- nil
133
- end
134
- end
135
-
136
- templates_hash&.dig("base_path")
137
- end
138
-
139
- def determine_default_output # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
140
- if @config.output&.single_file&.enabled
141
- @config.output.single_file.default_filename || "browser.html"
142
- elsif @config.output&.multi_file&.enabled
143
- @config.output.multi_file.default_directory || "dist"
144
- else
145
- "browser.html"
146
- end
147
- end
148
-
149
- def create_data_transformer
150
- DataTransformer.new(@repository, transformer_options)
151
- end
152
-
153
- def create_search_builder
154
- SearchIndexBuilder.new(@repository, search_options)
155
- end
156
-
157
- def transformer_options
158
- config_opts = @config.transformation_options || {}
159
- {
160
- include_diagrams: config_opts["include_diagrams"] != false,
161
- format_definitions: config_opts["format_definitions"] != false,
162
- max_definition_length: config_opts["max_definition_length"],
163
- }.merge(@options.slice(:include_diagrams, :format_definitions,
164
- :render_diagrams))
165
- end
166
-
167
- def search_options
168
- {
169
- # Pass search configuration to builder
170
- fields: @config.search&.fields,
171
- document_types: @config.search&.document_types,
172
- stop_words: @config.search&.stop_words,
173
- }
174
- end
175
-
176
- def default_template_path
177
- # From lib/lutaml/uml_repository/static_site/generator.rb
178
- # Up 4 levels: static_site/ → uml_repository/ → lutaml/ → lib/ →
179
- # (root)
180
- File.expand_path("../../../../templates/static_site", __dir__)
181
- end
182
-
183
- def setup_liquid
184
- @liquid_environment = Liquid::Environment.new
185
- @liquid_environment.file_system = TemplateFileSystem.new(@options[:template_path])
186
- @liquid_environment.error_mode = :lax
187
- end
188
-
189
- # Generate single-file SPA
190
- def generate_single_file # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
191
- puts "Generating single-file SPA..."
192
-
193
- # Transform data
194
- data = @data_transformer.transform
195
- search_index = @search_builder.build
196
-
197
- # Build CSS and JS
198
- css_content = build_css
199
- js_content = build_js
200
-
201
- # Build initial context
202
- context = build_liquid_context(
203
- data.to_json, search_index.to_json, :single_file
204
- )
205
- context["styles"] = css_content
206
- context["scripts"] = js_content
207
-
208
- # Render components with context (call the lambda)
209
- component_renderer = render_components
210
- rendered_components = component_renderer.call(context)
211
- context.merge!(rendered_components)
212
-
213
- # Render template
214
- template_path = File.join(@options[:template_path],
215
- "single_file.liquid")
216
- template_content = File.read(template_path)
217
- template = Liquid::Template.parse(template_content)
218
-
219
- html = template.render(context)
220
-
221
- # Check for rendering errors
222
- if html.nil? || html.empty?
223
- errors = if template.errors.any?
224
- template.errors.join(", ")
225
- else
226
- "No specific errors, but output is empty"
227
- end
228
- raise "Template rendering failed. Errors: #{errors}"
229
- end
230
-
231
- # Minify if requested
232
- html = minify_html(html) if @options[:minify]
233
-
234
- # Write output
235
- File.write(@options[:output], html)
236
- puts "✓ Generated: #{@options[:output]} " \
237
- "(#{File.size(@options[:output]) / 1024}KB)"
238
-
239
- @options[:output]
240
- end
241
-
242
- def render_components # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
243
- # Set up Liquid file system for recursive includes
244
- temp_file_system = TemplateFileSystem.new(@options[:template_path])
245
-
246
- component_names = ["header", "sidebar", "content", "package_details",
247
- "class_details"]
248
- components = {}
249
-
250
- # We need the context to render components, so we'll return a lambda
251
- # that will be called with the context
252
- lambda do |context|
253
- component_names.each do |name|
254
- component_path = File.join(@options[:template_path],
255
- "components", "#{name}.liquid")
256
- if File.exist?(component_path)
257
- component_template = Liquid::Template.parse(File.read(component_path))
258
- component_template.registers[:file_system] = temp_file_system
259
- components[name] = component_template.render(context)
260
- else
261
- components[name] = "<!-- Component #{name} not found -->"
262
- end
263
- end
264
- components
265
- end
266
- end
267
-
268
- # Generate multi-file static site
269
- def generate_multi_file # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
270
- puts "Generating multi-file static site..."
271
-
272
- output_dir = @options[:output]
273
- FileUtils.mkdir_p(output_dir)
274
- FileUtils.mkdir_p(File.join(output_dir, "data"))
275
- FileUtils.mkdir_p(File.join(output_dir, "assets"))
276
-
277
- # Transform data
278
- data = @data_transformer.transform
279
- search_index = @search_builder.build
280
-
281
- # Write data files
282
- write_data_file(File.join(output_dir, "data", "model.json"), data)
283
- write_data_file(File.join(output_dir, "data", "search.json"),
284
- search_index)
285
-
286
- # Build context (without embedded data)
287
- context = build_liquid_context(nil, nil, :multi_file)
288
-
289
- # Render and write index.html
290
- template_content = File.read(File.join(@options[:template_path],
291
- "multi_file.liquid"))
292
- file_system = TemplateFileSystem.new(@options[:template_path])
293
- template = Liquid::Template.parse(template_content,
294
- error_mode: :lax)
295
- template.registers[:file_system] = file_system
296
- html = template.render(context)
297
- html = minify_html(html) if @options[:minify]
298
- File.write(File.join(output_dir, "index.html"), html)
299
-
300
- # Copy/generate assets
301
- generate_assets(output_dir)
302
-
303
- puts "✓ Generated multi-file site in: #{output_dir}"
304
- output_dir
305
- end
306
-
307
- def build_liquid_context(data, search_index, mode) # rubocop:disable Metrics/MethodLength
308
- config_hash = {
309
- "mode" => mode.to_s,
310
- "title" => @options[:title],
311
- "description" => @options[:description],
312
- "theme" => @options[:theme],
313
- "apiMode" => false, # Static mode by default
314
- }
315
-
316
- images_dir = File.join(@options[:template_path], "assets", "images")
317
- lutaml_icon = read_svg_asset(images_dir, "lutaml-icon.svg")
318
- lutaml_full_logo = read_svg_asset(images_dir, "lutaml-full.svg")
319
-
320
- {
321
- "config" => JSON.generate(config_hash),
322
- "data" => data,
323
- "searchIndex" => search_index,
324
- "lutamlIcon" => lutaml_icon,
325
- "lutamlFullLogo" => lutaml_full_logo,
326
- "buildInfo" => {
327
- "timestamp" => Time.now.utc.iso8601,
328
- "generator" => "LutaML Static Site Generator v1.0",
329
- },
330
- }
331
- end
332
-
333
- def write_data_file(path, data)
334
- json = JSON.pretty_generate(data)
335
- File.write(path, json)
336
- puts " ✓ #{File.basename(path)} (#{File.size(path) / 1024}KB)"
337
- end
338
-
339
- def read_svg_asset(images_dir, filename)
340
- path = File.join(images_dir, filename)
341
- return "" unless File.exist?(path)
342
-
343
- File.read(path).strip
344
- end
345
-
346
- def generate_assets(output_dir) # rubocop:disable Metrics/MethodLength
347
- assets_dir = File.join(output_dir, "assets")
348
-
349
- # Generate CSS
350
- css_content = build_css
351
- css_path = File.join(assets_dir, "styles.css")
352
- File.write(css_path, css_content)
353
- puts " ✓ styles.css (#{File.size(css_path) / 1024}KB)"
354
-
355
- # Generate JS
356
- js_content = build_js
357
- js_path = File.join(assets_dir, "app.js")
358
- File.write(js_path, js_content)
359
- puts " ✓ app.js (#{File.size(js_path) / 1024}KB)"
360
-
361
- # Copy image assets
362
- copy_image_assets(assets_dir)
363
- end
364
-
365
- def copy_image_assets(assets_dir)
366
- images_src = File.join(@options[:template_path], "assets", "images")
367
- return unless Dir.exist?(images_src)
368
-
369
- images_dest = File.join(assets_dir, "images")
370
- FileUtils.mkdir_p(images_dest)
371
- Dir.glob(File.join(images_src, "*")).each do |src_file|
372
- next if File.directory?(src_file)
373
-
374
- dest_file = File.join(images_dest, File.basename(src_file))
375
- FileUtils.cp(src_file, dest_file)
376
- end
377
- end
378
-
379
- CSS_FILES = %w[
380
- 00-variables.css 01-reset.css 02-base.css 03-layout.css
381
- 04-components.css 05-utilities.css 06-diagrams.css
382
- ].freeze
383
-
384
- JS_FILES = %w[
385
- core/utils.js core/state.js core/router.js
386
- search/lunr-custom.js ui/sidebar.js ui/details.js
387
- ui/search.js app.js
388
- ].freeze
389
-
390
- def build_css
391
- concatenate_assets("styles", CSS_FILES, :minify_css)
392
- end
393
-
394
- def build_js
395
- concatenate_assets("scripts", JS_FILES, :minify_js)
396
- end
397
-
398
- def concatenate_assets(subdir, files, minifier)
399
- content = files.map do |file|
400
- path = File.join(@options[:template_path], "assets", subdir, file)
401
- File.exist?(path) ? File.read(path) : ""
402
- end.join("\n\n")
403
-
404
- @options[:minify] ? public_send(minifier, content) : content
405
- end
406
-
407
- def minify_html(html)
408
- # Basic HTML minification
409
- html.gsub(/\s+/, " ")
410
- .gsub(/>\s+</, "><")
411
- .strip
412
- end
413
-
414
- def minify_css(css)
415
- # Basic CSS minification
416
- css.gsub(/\s+/, " ")
417
- .gsub(/\s*{\s*/, "{")
418
- .gsub(/\s*}\s*/, "}")
419
- .gsub(/\s*:\s*/, ":")
420
- .gsub(/\s*;\s*/, ";")
421
- .strip
422
- end
423
-
424
- def minify_js(js)
425
- # Basic JS minification (remove comments and extra whitespace)
426
- js.gsub(%r{//.*$}, "") # Remove single-line comments
427
- .gsub(%r{/\*.*?\*/}m, "") # Remove multi-line comments
428
- .gsub(/\s+/, " ") # Collapse whitespace
429
- .strip
430
- end
431
- end
432
- end
433
- end
434
- end
@@ -1,115 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "digest"
4
-
5
- module Lutaml
6
- module UmlRepository
7
- module StaticSite
8
- # Generates stable, short IDs for entities in the JSON data model.
9
- #
10
- # Uses MD5 hash of XMI IDs to create consistent, collision-resistant IDs
11
- # that remain stable across multiple generations.
12
- #
13
- # @example
14
- # generator = IDGenerator.new
15
- # pkg_id = generator.package_id(package) # => "pkg_a1b2c3d4"
16
- # cls_id = generator.class_id(klass) # => "cls_e5f6g7h8"
17
- class IDGenerator
18
- def initialize
19
- @cache = {}
20
- end
21
-
22
- # Generate ID for a package
23
- #
24
- # @param package [Lutaml::Uml::Package] Package object
25
- # @return [String] Stable package ID (e.g., "pkg_a1b2c3d4")
26
- def package_id(package)
27
- # Use XMI ID for uniqueness - each package has unique XMI ID
28
- # even if names are identical in different hierarchies
29
- cache_key = [:package, package.xmi_id]
30
- @cache[cache_key] ||= generate_id("pkg", package.xmi_id)
31
- end
32
-
33
- # Generate ID for a class
34
- #
35
- # @param klass [Lutaml::Uml::TopElement] Class object
36
- # @return [String] Stable class ID (e.g., "cls_a1b2c3d4")
37
- def class_id(klass)
38
- cache_key = [:class, klass.xmi_id]
39
- @cache[cache_key] ||= generate_id("cls", klass.xmi_id)
40
- end
41
-
42
- # Generate ID for an attribute
43
- #
44
- # @param attribute [Object] Attribute object
45
- # @param owner [Object] Owner class
46
- # @return [String] Stable attribute ID (e.g., "attr_a1b2c3d4")
47
- def attribute_id(attribute, owner)
48
- # Use combination of owner ID and attribute name for uniqueness
49
- composite_key = "#{owner.xmi_id}::#{attribute.name}"
50
- cache_key = [:attribute, composite_key]
51
- @cache[cache_key] ||= generate_id("attr", composite_key)
52
- end
53
-
54
- # Generate ID for an association
55
- #
56
- # @param association [Lutaml::Uml::Association] Association object
57
- # @return [String] Stable association ID (e.g., "assoc_a1b2c3d4")
58
- def association_id(association)
59
- cache_key = [:association, association.xmi_id]
60
- @cache[cache_key] ||= generate_id("assoc", association.xmi_id)
61
- end
62
-
63
- # Generate ID for an operation
64
- #
65
- # @param operation [Object] Operation object
66
- # @param owner [Object] Owner class
67
- # @return [String] Stable operation ID (e.g., "op_a1b2c3d4")
68
- def operation_id(operation, owner)
69
- composite_key = "#{owner.xmi_id}::#{operation.name}"
70
- cache_key = [:operation, composite_key]
71
- @cache[cache_key] ||= generate_id("op", composite_key)
72
- end
73
-
74
- # Generate ID for a diagram
75
- #
76
- # @param diagram [Object] Diagram object
77
- # @return [String] Stable diagram ID (e.g., "diag_a1b2c3d4")
78
- def diagram_id(diagram)
79
- cache_key = [:diagram, diagram.xmi_id]
80
- @cache[cache_key] ||= generate_id("diag", diagram.xmi_id)
81
- end
82
-
83
- # Generate ID for a search document
84
- #
85
- # @param type [String] Document type (class, attribute, etc.)
86
- # @param entity_id [String] Entity XMI ID
87
- # @return [String] Stable document ID (e.g., "doc_class_a1b2c3d4")
88
- def document_id(type, entity_id)
89
- cache_key = [:document, type, entity_id]
90
- @cache[cache_key] ||= generate_id("doc_#{type}", entity_id)
91
- end
92
-
93
- # Clear the cache (useful for testing)
94
- #
95
- # @return [void]
96
- def clear_cache
97
- @cache.clear
98
- end
99
-
100
- private
101
-
102
- # Generate a stable ID from a prefix and key
103
- #
104
- # @param prefix [String] ID prefix (e.g., "pkg", "cls")
105
- # @param key [String] Key to hash (typically XMI ID)
106
- # @return [String] Generated ID
107
- def generate_id(prefix, key)
108
- # Use first 8 characters of MD5 hash for short, stable IDs
109
- hash = Digest::MD5.hexdigest(key.to_s)[0..7]
110
- "#{prefix}_#{hash}"
111
- end
112
- end
113
- end
114
- end
115
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module UmlRepository
5
- module StaticSite
6
- module Models
7
- class SpaAssociation < SpaBase
8
- attribute :id, :string
9
- attribute :xmi_id, :string
10
- attribute :name, :string
11
- attribute :type, :string
12
- attribute :definition, :string
13
- attribute :source, SpaAssociationEnd
14
- attribute :target, SpaAssociationEnd
15
-
16
- json do
17
- map "id", to: :id
18
- map "xmiId", to: :xmi_id
19
- map "name", to: :name
20
- map "type", to: :type
21
- map "definition", to: :definition
22
- map "source", to: :source
23
- map "target", to: :target
24
- end
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module UmlRepository
5
- module StaticSite
6
- module Models
7
- class SpaAssociationEnd < SpaBase
8
- attribute :klass, :string
9
- attribute :class_name, :string
10
- attribute :role, :string
11
- attribute :cardinality, SpaCardinality
12
- attribute :aggregation, :string
13
-
14
- json do
15
- map "class", to: :klass
16
- map "className", to: :class_name
17
- map "role", to: :role
18
- map "cardinality", to: :cardinality
19
- map "aggregation", to: :aggregation
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module UmlRepository
5
- module StaticSite
6
- module Models
7
- class SpaAttribute < SpaBase
8
- attribute :id, :string
9
- attribute :name, :string
10
- attribute :type, :string
11
- attribute :visibility, :string
12
- attribute :owner, :string
13
- attribute :owner_name, :string
14
- attribute :cardinality, SpaCardinality
15
- attribute :definition, :string
16
- attribute :stereotypes, :string, collection: true, default: -> { [] }
17
- attribute :is_static, :boolean, default: false
18
- attribute :is_read_only, :boolean, default: false
19
- attribute :default_value, :string
20
-
21
- json do
22
- map "id", to: :id
23
- map "name", to: :name
24
- map "type", to: :type
25
- map "visibility", to: :visibility
26
- map "owner", to: :owner
27
- map "ownerName", to: :owner_name
28
- map "cardinality", to: :cardinality
29
- map "definition", to: :definition
30
- map "stereotypes", to: :stereotypes
31
- map "isStatic", to: :is_static
32
- map "isReadOnly", to: :is_read_only
33
- map "defaultValue", to: :default_value
34
- end
35
- end
36
- end
37
- end
38
- end
39
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module UmlRepository
5
- module StaticSite
6
- module Models
7
- class SpaBase < Lutaml::Model::Serializable
8
- end
9
- end
10
- end
11
- end
12
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module UmlRepository
5
- module StaticSite
6
- module Models
7
- class SpaCardinality < SpaBase
8
- attribute :min, :string
9
- attribute :max, :string
10
-
11
- json do
12
- map "min", to: :min
13
- map "max", to: :max
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end