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.
- checksums.yaml +4 -4
- data/.github/workflows/release.yml +8 -1
- data/.gitignore +4 -0
- data/.rubocop_todo.yml +82 -161
- data/CLAUDE.md +32 -8
- data/Gemfile +14 -10
- data/Rakefile +6 -4
- data/lib/lutaml/version.rb +1 -1
- data/lib/lutaml.rb +3 -9
- data/lutaml.gemspec +2 -18
- metadata +5 -860
- data/Makefile +0 -2
- data/TODO.cleanups/05-replace-marshal-load.md +0 -37
- data/TODO.cleanups/06-replace-eval-in-tests.md +0 -41
- data/TODO.cleanups/10-split-large-files.md +0 -47
- data/config/diagram_styles.yml +0 -200
- data/config/model_transformations.yml +0 -266
- data/config/package_metadata.example.yml +0 -58
- data/config/qea_schema.yml +0 -1024
- data/config/static_site.yml +0 -166
- data/examples/UML_EA.DTD +0 -6856
- data/examples/lur/20251010_current_plateau_v5.1.lur +0 -0
- data/examples/lur/basic.lur +0 -0
- data/examples/lur/test-output.lur +0 -0
- data/examples/lur/test.lur +0 -0
- data/examples/lur_basic_usage.rb +0 -220
- data/examples/lur_cli_workflow.rb +0 -262
- data/examples/lur_statistics.rb +0 -325
- data/examples/qea/20251010_current_plateau_v5.1.qea +0 -0
- data/examples/qea/ArcGISWorkspace_template.qea +0 -0
- data/examples/qea/README_qea_parser.adoc +0 -230
- data/examples/qea/UmlModel_template.qea +0 -0
- data/examples/qea/basic.qea +0 -0
- data/examples/qea/simple.qea +0 -0
- data/examples/qea/simple_example.qea +0 -0
- data/examples/qea/test.qea +0 -0
- data/examples/xmi/20251010_current_plateau_v5.1.xmi +0 -118121
- data/examples/xmi/ArcGISWorkspace_template.xmi +0 -1467
- data/examples/xmi/Images/EAID_0016F797_D055_4717_AF1A_606413D0A166.svg +0 -158
- data/examples/xmi/Images/EAID_00C5C772_5A03_434f_BF30_AC37542A1AAC.svg +0 -659
- data/examples/xmi/Images/EAID_0114FD24_9E58_4664_98CD_71305B59AD11.svg +0 -411
- data/examples/xmi/Images/EAID_01661E1B_31B6_4167_BCCF_A00678FB4EA2.svg +0 -102
- data/examples/xmi/Images/EAID_039FE004_5408_4fc0_89AA_EB319E4F61C7.svg +0 -169
- data/examples/xmi/Images/EAID_04EE9625_17A0_4721_BC71_21756DB21D06.svg +0 -403
- data/examples/xmi/Images/EAID_05FF9417_1619_4170_B0C9_55AA6B988EF1.svg +0 -175
- data/examples/xmi/Images/EAID_09853FB2_AF8A_432f_94C5_6C47461BD937.svg +0 -360
- data/examples/xmi/Images/EAID_09927B7F_A657_4819_99E5_AC9DC99227D9.svg +0 -195
- data/examples/xmi/Images/EAID_09AF6B8A_557C_43bc_BBB0_47C1E9401EF3.svg +0 -218
- data/examples/xmi/Images/EAID_0BE81AC5_031B_4973_A9A0_223CCD92BAA1.svg +0 -471
- data/examples/xmi/Images/EAID_0EDEA6EF_4DC8_4979_BB80_28B1B9EBD1D4.svg +0 -56
- data/examples/xmi/Images/EAID_0F413534_6AD2_48bc_B4AF_8699D530D91D.svg +0 -262
- data/examples/xmi/Images/EAID_1321F39B_AD67_47b5_B5C3_3A42BBFCBDF9.svg +0 -286
- data/examples/xmi/Images/EAID_13E09C71_99E7_40b4_B72D_48AF6379BC2E.svg +0 -164
- data/examples/xmi/Images/EAID_144955D8_CB4E_4b59_BB0C_E549F7F84943.svg +0 -66
- data/examples/xmi/Images/EAID_14E9F5FD_F6CD_4f48_B1CD_F5A40C6D8E83.svg +0 -95
- data/examples/xmi/Images/EAID_157826AA_96A7_4278_89A6_94BD0F31409A.svg +0 -63
- data/examples/xmi/Images/EAID_159E9DA0_7A54_4817_B72A_401C750F675D.svg +0 -306
- data/examples/xmi/Images/EAID_17BC8309_8051_492b_BE87_61CCFE83DB16.svg +0 -45
- data/examples/xmi/Images/EAID_1A10EB6D_E2E5_42a6_A31E_B293D93FD07E.svg +0 -193
- data/examples/xmi/Images/EAID_1A290AFD_CE96_46a2_8351_A986D77CC727.svg +0 -444
- data/examples/xmi/Images/EAID_1B2D9309_C66B_492a_995C_95B2B02E0D7C.svg +0 -168
- data/examples/xmi/Images/EAID_1DE6B973_CE8A_416f_909B_54CEA1E5944E.svg +0 -10
- data/examples/xmi/Images/EAID_204F4ACC_2230_4c8d_9861_EF5A6844B712.svg +0 -60
- data/examples/xmi/Images/EAID_227300E2_4F4B_4955_83B9_FA626CE8680B.svg +0 -188
- data/examples/xmi/Images/EAID_22C24D4C_4894_480a_B113_0CB034CB59E9.svg +0 -426
- data/examples/xmi/Images/EAID_234BC4F5_8100_4969_BDCB_A24E0E641F23.svg +0 -169
- data/examples/xmi/Images/EAID_24446BFC_9FEB_4935_8970_65A4C562A93F.svg +0 -277
- data/examples/xmi/Images/EAID_24E8A45C_C99F_49b7_860A_9CF65FF76C76.svg +0 -575
- data/examples/xmi/Images/EAID_272F3181_4300_48b7_98A0_A8CFD12B1A72.svg +0 -255
- data/examples/xmi/Images/EAID_292E0D94_392C_4da6_A0B5_841501FAE50A.svg +0 -183
- data/examples/xmi/Images/EAID_29DD0967_ADAB_4abb_99C5_544821F5E7DA.svg +0 -10
- data/examples/xmi/Images/EAID_2A339928_E5EF_4ed2_9E5D_CC2CA5CF248B.svg +0 -310
- data/examples/xmi/Images/EAID_2A5E0832_06BE_4381_85D4_9B00E4F95575.svg +0 -155
- data/examples/xmi/Images/EAID_2AAB709F_EFCE_496f_8AFE_92809D66A0A9.svg +0 -81
- data/examples/xmi/Images/EAID_2C8DD882_8DEA_4065_89F8_DDA796AA0C85.svg +0 -520
- data/examples/xmi/Images/EAID_2E98EA19_37D8_4b70_BDCE_CFEE4FA800B0.svg +0 -173
- data/examples/xmi/Images/EAID_30D62231_110F_44e8_9C06_6FCDCBA53A09.svg +0 -722
- data/examples/xmi/Images/EAID_3206D3FD_1FC4_41c7_8D00_36DB908E9319.svg +0 -181
- data/examples/xmi/Images/EAID_3452CC53_9ACB_44eb_9C9D_B90CF862F284.svg +0 -92
- data/examples/xmi/Images/EAID_348EE46E_ABD9_40b0_82A1_0285E75BDC52.svg +0 -187
- data/examples/xmi/Images/EAID_34FF671B_CFDC_47ad_91DF_ECA6D8358180.svg +0 -217
- data/examples/xmi/Images/EAID_359DD694_0100_4bdf_AD5F_712D97E9C69B.svg +0 -157
- data/examples/xmi/Images/EAID_35DE714C_49A8_490e_913A_56F39EF317F9.svg +0 -180
- data/examples/xmi/Images/EAID_360C79F1_8EDF_41db_A069_DECDC55625BC.svg +0 -31
- data/examples/xmi/Images/EAID_36913C58_FF35_4ba2_A04B_9A4824E24609.svg +0 -166
- data/examples/xmi/Images/EAID_372F7F7B_57ED_469a_A640_70DB578B3C56.svg +0 -361
- data/examples/xmi/Images/EAID_37AC19B9_8433_4fee_A326_763170D54D06.svg +0 -32
- data/examples/xmi/Images/EAID_38170608_32B5_4a6f_A68D_A0D7C0C9D019.svg +0 -234
- data/examples/xmi/Images/EAID_3A77A5D0_4E1B_4116_8AAD_407FC422B47F.svg +0 -183
- data/examples/xmi/Images/EAID_3B8BD087_1683_46b1_8D0D_6F839C46C578.svg +0 -42
- data/examples/xmi/Images/EAID_3DC20801_AE8B_4e76_B08C_F574E8A90E13.svg +0 -192
- data/examples/xmi/Images/EAID_3DE28C70_C6D4_406c_B49F_EEF52148C8C1.svg +0 -124
- data/examples/xmi/Images/EAID_458E093C_BA2B_4292_BEC4_37511C163DDC.svg +0 -140
- data/examples/xmi/Images/EAID_45F9B1F7_E568_47c9_B229_953BC2E707E4.svg +0 -266
- data/examples/xmi/Images/EAID_46B3041A_8C23_46e6_8E14_ADE7012274C5.svg +0 -80
- data/examples/xmi/Images/EAID_47E4600F_CEC9_4245_9BF5_EE38007A9DDB.svg +0 -584
- data/examples/xmi/Images/EAID_4881CEEE_792C_4cb0_BEA7_54333B643D0A.svg +0 -155
- data/examples/xmi/Images/EAID_48D364F0_DCA4_41e8_B4D4_509B3023B969.svg +0 -17
- data/examples/xmi/Images/EAID_4DBDAB9E_4C1C_4cb1_A767_06BD743A50A7.svg +0 -78
- data/examples/xmi/Images/EAID_4EB75007_B31D_4f2c_8855_7E9D3A3B17F4.svg +0 -454
- data/examples/xmi/Images/EAID_4F421236_FCF3_4aae_B22A_C7E6A5EFBAC7.svg +0 -81
- data/examples/xmi/Images/EAID_4FC1D352_2102_4b73_BCB0_1410B29C6BD7.svg +0 -379
- data/examples/xmi/Images/EAID_4FE346EA_01E1_4b30_8BE6_BB32EA191E47.svg +0 -126
- data/examples/xmi/Images/EAID_5038EEE3_7DD0_4cca_9829_364E044D37E8.svg +0 -199
- data/examples/xmi/Images/EAID_508A37DC_9378_4f5a_BD96_48F4D24E03A5.svg +0 -162
- data/examples/xmi/Images/EAID_516DA1A2_F0EC_415c_9664_E4CA54E7F05C.svg +0 -136
- data/examples/xmi/Images/EAID_52A1DBD3_D3DA_4b6d_8F96_FC6F39F64242.svg +0 -161
- data/examples/xmi/Images/EAID_575E87BA_32E9_4a84_AA4E_0EFDFC5D4C07.svg +0 -71
- data/examples/xmi/Images/EAID_57E0F1A0_6C72_47ef_B922_B806F9A875E8.svg +0 -209
- data/examples/xmi/Images/EAID_5957C373_3FC1_482f_8F35_D809153A17F5.svg +0 -123
- data/examples/xmi/Images/EAID_59A66AE2_412C_48a6_BFC7_EA56CF11D269.svg +0 -218
- data/examples/xmi/Images/EAID_5A43833E_680B_4a90_8931_0C902304E029.svg +0 -236
- data/examples/xmi/Images/EAID_5D6DB5A0_5047_4bac_9E60_69904A60B56D.svg +0 -353
- data/examples/xmi/Images/EAID_5DA1E7A7_8E59_4803_A831_E9F3EC27328F.svg +0 -242
- data/examples/xmi/Images/EAID_5E2C1E2A_82A8_47f4_B2ED_1398D72BFCFD.svg +0 -246
- data/examples/xmi/Images/EAID_6052620C_4BD5_49f6_A21C_AD7E6DCA2795.svg +0 -290
- data/examples/xmi/Images/EAID_6481E2CC_35A6_43b0_88D4_10A667A2BC2D.svg +0 -60
- data/examples/xmi/Images/EAID_660C7D03_A26C_4977_A7BA_9D0A773DA811.svg +0 -318
- data/examples/xmi/Images/EAID_671F3C3D_35B6_4514_B5B6_DD7E84925493.svg +0 -24
- data/examples/xmi/Images/EAID_676B9C9A_D85F_4d2f_A46B_73F02090DC87.svg +0 -127
- data/examples/xmi/Images/EAID_6797FEFA_5801_48e4_8B9C_3C824C0E165D.svg +0 -412
- data/examples/xmi/Images/EAID_6807F4EE_18EF_4e7e_ACCF_D5BD323AFDE9.svg +0 -130
- data/examples/xmi/Images/EAID_69E81E34_CF28_4c7f_A48F_5941BA85CEE3.svg +0 -96
- data/examples/xmi/Images/EAID_6A3C55E8_3C3C_4f3a_8AAC_0299C5B23070.svg +0 -10
- data/examples/xmi/Images/EAID_6BAC333E_E2C2_42c7_8DDF_6B4FA0FFC03B.svg +0 -143
- data/examples/xmi/Images/EAID_6D0349D5_3F1B_4b28_82D2_910743DEB5E5.svg +0 -114
- data/examples/xmi/Images/EAID_6E95B74E_8A09_4698_9E9E_23BCFD2CE194.svg +0 -37
- data/examples/xmi/Images/EAID_70C77F92_5614_4b22_8C8E_67859F59D8FD.svg +0 -254
- data/examples/xmi/Images/EAID_71F9216B_E7A7_4083_B08E_6C71B57F3A1F.svg +0 -187
- data/examples/xmi/Images/EAID_73025C5A_08FC_47ff_AB2F_C7F79CF54B41.svg +0 -145
- data/examples/xmi/Images/EAID_74C974B6_6D07_425d_B7AC_C8899E3B4967.svg +0 -76
- data/examples/xmi/Images/EAID_7504FCD2_524C_4e7d_BAE4_4E58A8A8A12C.svg +0 -196
- data/examples/xmi/Images/EAID_78030266_3603_4747_9D75_03D16614BE7D.svg +0 -35
- data/examples/xmi/Images/EAID_785226C1_12B1_4104_A4C1_F19B70B9FB71.svg +0 -348
- data/examples/xmi/Images/EAID_7854470F_26B8_4d3c_AFDF_C05BCE6ED0CD.svg +0 -72
- data/examples/xmi/Images/EAID_794F4A8F_18CA_4e9f_8477_A6F0E5ED22D4.svg +0 -187
- data/examples/xmi/Images/EAID_7A24839E_C8AE_424d_B7D2_6DA16DC813E7.svg +0 -114
- data/examples/xmi/Images/EAID_7A3649FD_E960_4ae6_B9B1_A9001C066AE7.svg +0 -181
- data/examples/xmi/Images/EAID_7B2C6765_AB68_439a_87F3_DAC323CB2AF5.svg +0 -196
- data/examples/xmi/Images/EAID_7C44AC09_27C1_47b3_9A85_88EC71C081FF.svg +0 -55
- data/examples/xmi/Images/EAID_7CE102CA_97C1_4cac_BD3B_0500D3712D2A.svg +0 -195
- data/examples/xmi/Images/EAID_7D960BD8_65D8_4934_9C11_4EF860DD8FBA.svg +0 -90
- data/examples/xmi/Images/EAID_80939C98_A456_48c3_BCEA_4B72851F2DF6.svg +0 -174
- data/examples/xmi/Images/EAID_812FE862_76ED_44f0_B678_7A4601B395CF.svg +0 -142
- data/examples/xmi/Images/EAID_81B76F5B_9D64_4bbf_8AC8_34234FB87533.svg +0 -740
- data/examples/xmi/Images/EAID_84352F1A_195B_411b_9552_5BFC40BF90B5.svg +0 -105
- data/examples/xmi/Images/EAID_846DD800_139C_4d47_A1DF_3FB1AC5D130F.svg +0 -554
- data/examples/xmi/Images/EAID_84A9C65B_FD6D_4bb5_818F_E8C35FF5BCD1.svg +0 -228
- data/examples/xmi/Images/EAID_853674F5_7DC9_4aae_809B_5728098B5D5B.svg +0 -154
- data/examples/xmi/Images/EAID_860CBBFB_2F27_408f_9144_751F9D1F487F.svg +0 -273
- data/examples/xmi/Images/EAID_87476527_7B9B_4b92_967E_3D38365470CA.svg +0 -239
- data/examples/xmi/Images/EAID_87DAE930_5069_4c58_AC65_4B0B2C0F32C8.svg +0 -10
- data/examples/xmi/Images/EAID_88AF6BD7_BC34_406f_BB59_47CFAB4A7D5D.svg +0 -116
- data/examples/xmi/Images/EAID_88D0CB44_20D0_44fc_A6E3_B663332EF401.svg +0 -200
- data/examples/xmi/Images/EAID_8BB1CA0C_C003_4678_973B_A1C3308E021D.svg +0 -136
- data/examples/xmi/Images/EAID_8DAB169F_D189_4320_A0F5_4443E3297F0E.svg +0 -181
- data/examples/xmi/Images/EAID_8FD488EF_BAAB_40ec_A7ED_F7CC831D546E.svg +0 -324
- data/examples/xmi/Images/EAID_90BCA409_BB45_42c5_AFA5_45FE3D995904.svg +0 -342
- data/examples/xmi/Images/EAID_926AFE38_01FA_469e_B6AA_ED5F4D62B66F.svg +0 -105
- data/examples/xmi/Images/EAID_92AB0FD0_B0FB_4ceb_8EAE_66B6600D31D7.svg +0 -681
- data/examples/xmi/Images/EAID_92C43670_3057_47f1_A576_C60843FF3D26.svg +0 -136
- data/examples/xmi/Images/EAID_93F63576_BE01_4cd8_8A91_C674FF77FC3D.svg +0 -718
- data/examples/xmi/Images/EAID_9400D9BC_05A5_41fc_83F7_02E5C67F9718.svg +0 -487
- data/examples/xmi/Images/EAID_95246DCF_1C09_4a16_9512_98000F56B3D8.svg +0 -292
- data/examples/xmi/Images/EAID_9994BF62_51E2_42cd_BB35_16C537B6718A.svg +0 -715
- data/examples/xmi/Images/EAID_9AAD6C21_B1E7_4472_B64A_FB5E3569D970.svg +0 -116
- data/examples/xmi/Images/EAID_9BD7189A_877B_4ca9_B42C_817DEF144FB2.svg +0 -284
- data/examples/xmi/Images/EAID_9DA6C553_94FC_4204_83AD_ECC4B45A53EF.svg +0 -159
- data/examples/xmi/Images/EAID_9EE6A41B_5FAA_4c89_B98F_732059778630.svg +0 -10
- data/examples/xmi/Images/EAID_9F1A4B54_46F6_435c_9529_E43E54CF6050.svg +0 -172
- data/examples/xmi/Images/EAID_9FE1EA7B_4CEF_4976_A281_93A94315BD84.svg +0 -153
- data/examples/xmi/Images/EAID_A0695647_6172_4262_8C30_67441399609C.svg +0 -290
- data/examples/xmi/Images/EAID_A081C63E_D6F2_41a7_A99C_307836754AFA.svg +0 -149
- data/examples/xmi/Images/EAID_A24E2778_5AD9_44f2_AB8F_5CD3913477D6.svg +0 -194
- data/examples/xmi/Images/EAID_A264F089_F9B3_406c_A3A8_FF34903797D3.svg +0 -143
- data/examples/xmi/Images/EAID_A282E5D1_2A13_4e7f_BC76_5D086DD4A577.svg +0 -357
- data/examples/xmi/Images/EAID_A3BCE1D6_9DB5_4272_A020_4C0E194B99CC.svg +0 -171
- data/examples/xmi/Images/EAID_A56E3818_D1B8_4b63_B69E_FBAC4A8AF482.svg +0 -218
- data/examples/xmi/Images/EAID_A57215D5_75C5_4532_BCF4_264A77CD62F1.svg +0 -204
- data/examples/xmi/Images/EAID_A59065AF_9669_486c_9582_9693177CFC7F.svg +0 -263
- data/examples/xmi/Images/EAID_A759374D_589A_488c_99EF_537ACB9B1FF9.svg +0 -398
- data/examples/xmi/Images/EAID_A7B25F46_F18A_4373_B16D_8C6AC0B868B0.svg +0 -174
- data/examples/xmi/Images/EAID_A9FE9E6F_A5F4_47e5_A6BA_26E22C7346B6.svg +0 -310
- data/examples/xmi/Images/EAID_AA62CDEB_55EC_498d_B326_4AA2C9AF6A05.svg +0 -144
- data/examples/xmi/Images/EAID_AAF52AF6_F7F9_4005_AE46_8920847BEA03.svg +0 -144
- data/examples/xmi/Images/EAID_AB281AC1_7CB8_404a_8124_34343DDD84E2.svg +0 -198
- data/examples/xmi/Images/EAID_AB7F1FDF_A66B_42a1_B8A3_7F594BAAD508.svg +0 -143
- data/examples/xmi/Images/EAID_AC2191E3_76E3_40b2_9E21_0E0B9B5277D2.svg +0 -114
- data/examples/xmi/Images/EAID_AD451676_A7C8_4c6a_A925_A9B9CA344142.svg +0 -339
- data/examples/xmi/Images/EAID_ADBA40A1_9375_4c1b_9938_0990612EB615.svg +0 -429
- data/examples/xmi/Images/EAID_ADC8773C_1B27_48ac_BAC1_14C1C919FAF6.svg +0 -245
- data/examples/xmi/Images/EAID_AE0718DF_AF69_4ea1_A099_E20028FE40A1.svg +0 -173
- data/examples/xmi/Images/EAID_B0DDB85D_A00C_4a7f_8C06_CCA15E5E4FE5.svg +0 -31
- data/examples/xmi/Images/EAID_B27ED282_D5E5_4f33_8AC1_62802F9E0B35.svg +0 -256
- data/examples/xmi/Images/EAID_B3AFECCB_17DD_44d6_8A44_2C38D9A64C0B.svg +0 -95
- data/examples/xmi/Images/EAID_B3B6C5B1_278E_4714_8244_B6C28B66AB50.svg +0 -176
- data/examples/xmi/Images/EAID_B53E76CD_A0F2_4e2f_B3AB_796D85964EF2.svg +0 -179
- data/examples/xmi/Images/EAID_B55D6E67_0BDD_4163_B359_11A6FBA89C74.svg +0 -207
- data/examples/xmi/Images/EAID_B58D1A53_E860_41a3_8352_11C274093E83.svg +0 -189
- data/examples/xmi/Images/EAID_B62C02B3_69DB_49e9_8089_4EE398BDE666.svg +0 -165
- data/examples/xmi/Images/EAID_BC008774_B539_4150_8174_B675989053D0.svg +0 -22
- data/examples/xmi/Images/EAID_BC1F7E00_082D_4a26_922B_3967A8D66859.svg +0 -266
- data/examples/xmi/Images/EAID_BDA613D8_402A_475a_AA15_683D88FD3D23.svg +0 -183
- data/examples/xmi/Images/EAID_C028B286_4C85_47d8_B6D5_80B28F556E82.svg +0 -303
- data/examples/xmi/Images/EAID_C173A6F4_1D1B_400e_AD8C_64FFF7CD5BE5.svg +0 -178
- data/examples/xmi/Images/EAID_C1834072_CADC_4ce4_B0FC_8284AE5CF4A4.svg +0 -158
- data/examples/xmi/Images/EAID_C1EC985B_5CBD_4e91_8661_EB4EF23781D9.svg +0 -286
- data/examples/xmi/Images/EAID_C31C1314_B679_4413_B8FE_A2CD584FC128.svg +0 -305
- data/examples/xmi/Images/EAID_C37CFBD6_69BA_42fb_9AC7_2D329D931BCF.svg +0 -171
- data/examples/xmi/Images/EAID_C857C934_306F_463a_87D5_257CB225ECFE.svg +0 -174
- data/examples/xmi/Images/EAID_C96797DE_2238_42d3_896A_9F92500270ED.svg +0 -180
- data/examples/xmi/Images/EAID_C96CBC24_B20E_459a_8F9D_75B61CDCB89F.svg +0 -656
- data/examples/xmi/Images/EAID_CACB523D_56A5_4f05_B3C2_51BB18F380FD.svg +0 -158
- data/examples/xmi/Images/EAID_CB34B578_101B_48b4_9271_214FFEA6A83A.svg +0 -409
- data/examples/xmi/Images/EAID_CBBD6CF4_0A1E_4406_9930_89DE43527910.svg +0 -361
- data/examples/xmi/Images/EAID_CC06A828_3750_472f_8DB2_C2E0863FCE17.svg +0 -96
- data/examples/xmi/Images/EAID_CD5CF053_1772_4a0f_962D_B17054D8EEAA.svg +0 -173
- data/examples/xmi/Images/EAID_CE440B5A_9534_4c75_9BA5_50862BB396C2.svg +0 -97
- data/examples/xmi/Images/EAID_CE4734FC_7986_4b3a_807F_A5B2C7EDE9E4.svg +0 -193
- data/examples/xmi/Images/EAID_D14AA320_9D41_4366_8739_9C2C21F96AE1.svg +0 -32
- data/examples/xmi/Images/EAID_D2FA55D3_C733_4a4d_92D0_0BC7AC0BB5BC.svg +0 -108
- data/examples/xmi/Images/EAID_D351FC34_FB03_488d_ADA4_BDB93DA9CB02.svg +0 -49
- data/examples/xmi/Images/EAID_D368FDF3_BDC5_4718_A701_351C8587A376.svg +0 -592
- data/examples/xmi/Images/EAID_D4DA8C48_3998_450d_87C4_9D65C9FECDB4.svg +0 -42
- data/examples/xmi/Images/EAID_D5464ECF_290E_4b2b_A6C4_25BE80F886CB.svg +0 -76
- data/examples/xmi/Images/EAID_D55235B0_61E9_461a_8379_2B8BF2403BE2.svg +0 -147
- data/examples/xmi/Images/EAID_D555ED73_F010_45d7_8A53_45A33C64C249.svg +0 -318
- data/examples/xmi/Images/EAID_D7AAC526_267E_45a0_A853_3207F02363F8.svg +0 -45
- data/examples/xmi/Images/EAID_D998B20D_A875_4ef8_A9CE_996BE56602BD.svg +0 -158
- data/examples/xmi/Images/EAID_DBFA8B39_F5B7_4c0e_9552_19AEAE5BA64E.svg +0 -200
- data/examples/xmi/Images/EAID_DE47A47D_E7BE_4e6f_BA81_F789EE8CFE72.svg +0 -61
- data/examples/xmi/Images/EAID_DFBB1072_8EC5_4384_8241_7EDF4B6B888B.svg +0 -78
- data/examples/xmi/Images/EAID_E325B9D8_E955_4aed_8125_63167BD40320.svg +0 -67
- data/examples/xmi/Images/EAID_E32D9D02_CAE9_4a47_92A8_3290EDCD6E6D.svg +0 -79
- data/examples/xmi/Images/EAID_E3B28611_7857_458a_B0BC_736E777B88EC.svg +0 -194
- data/examples/xmi/Images/EAID_E43C37EC_1176_4d2e_8B98_B6F3DFF6A092.svg +0 -96
- data/examples/xmi/Images/EAID_E591C1CF_7F35_4160_8A72_DFA097AD5811.svg +0 -271
- data/examples/xmi/Images/EAID_E77C66A2_2E94_4196_BFC6_662FE5AEEB6F.svg +0 -332
- data/examples/xmi/Images/EAID_E7AABA98_2450_4986_9736_DCCAF0108C50.svg +0 -639
- data/examples/xmi/Images/EAID_E7D9A2C4_72D6_40b9_8EB8_6B35476246B3.svg +0 -134
- data/examples/xmi/Images/EAID_E9CDAD85_ECF1_43de_819F_30A0D01785E6.svg +0 -193
- data/examples/xmi/Images/EAID_EC8AF507_F441_4e8a_B8A7_C1690F3C7D0B.svg +0 -58
- data/examples/xmi/Images/EAID_ED501058_D540_47ac_8EBC_5921E8C0BF57.svg +0 -384
- data/examples/xmi/Images/EAID_EFBF5F0F_DF74_4944_8791_114F5637C335.svg +0 -590
- data/examples/xmi/Images/EAID_EFFFA027_2A1F_425c_8437_BF89AADC8893.svg +0 -365
- data/examples/xmi/Images/EAID_F07E7718_B2C2_4a65_B5DD_477CB73E971E.svg +0 -165
- data/examples/xmi/Images/EAID_F0F20BDF_C729_47f7_B6FC_25ED2C4609CA.svg +0 -61
- data/examples/xmi/Images/EAID_F32E5AFE_8605_4c77_AE69_D0D0A6E380AC.svg +0 -76
- data/examples/xmi/Images/EAID_F3F00F45_CD37_46fd_B521_D1040EB2FB16.svg +0 -123
- data/examples/xmi/Images/EAID_F46E8F19_D8F1_4a3d_B87B_B0BAB4F50F50.svg +0 -202
- data/examples/xmi/Images/EAID_F48E5F6E_2411_4635_9315_3EAA4CFA29F7.svg +0 -351
- data/examples/xmi/Images/EAID_F4C23F9E_DD74_4fed_B75D_AD3C6448BA24.svg +0 -189
- data/examples/xmi/Images/EAID_F853B3C4_B145_4ef0_B261_C3CC0475B6D2.svg +0 -215
- data/examples/xmi/Images/EAID_F8BE68CA_1F8F_47e5_9454_01A2EB7D388A.svg +0 -124
- data/examples/xmi/Images/EAID_F92A6A28_612E_468e_9E39_D7AE7D24E24D.svg +0 -208
- data/examples/xmi/Images/EAID_F995FA49_B86E_4c94_BE5E_C928FB6B87D0.svg +0 -302
- data/examples/xmi/Images/EAID_FEAE013A_A4E4_4283_A491_1FEB8D0EBA28.svg +0 -524
- data/examples/xmi/Images/EAID_FEBE5726_3751_470b_9023_8C569202E97E.svg +0 -730
- data/examples/xmi/UML_EA.DTD +0 -6856
- data/examples/xmi/UmlModel_template.xmi +0 -23
- data/examples/xmi/basic.xmi +0 -9086
- data/examples/xmi/simple.xmi +0 -655
- data/examples/xmi/simple_example.xmi +0 -23
- data/examples/xmi/test.xmi +0 -1703
- data/exe/lutaml +0 -11
- data/exe/lutaml-sysml +0 -22
- data/exe/lutaml-wsd2uml +0 -63
- data/exe/lutaml-yaml2uml +0 -146
- data/lib/lutaml/cli/element_identifier.rb +0 -160
- data/lib/lutaml/cli/enhanced_formatter.rb +0 -494
- data/lib/lutaml/cli/interactive_shell/bookmark_commands.rb +0 -85
- data/lib/lutaml/cli/interactive_shell/command_base.rb +0 -32
- data/lib/lutaml/cli/interactive_shell/export_handler.rb +0 -73
- data/lib/lutaml/cli/interactive_shell/help_display.rb +0 -107
- data/lib/lutaml/cli/interactive_shell/navigation_commands.rb +0 -151
- data/lib/lutaml/cli/interactive_shell/query_commands.rb +0 -208
- data/lib/lutaml/cli/interactive_shell.rb +0 -254
- data/lib/lutaml/cli/lml_commands.rb +0 -205
- data/lib/lutaml/cli/output_formatter.rb +0 -348
- data/lib/lutaml/cli/resource_registry.rb +0 -127
- data/lib/lutaml/cli/tree_view_formatter.rb +0 -312
- data/lib/lutaml/cli/uml/build_command.rb +0 -466
- data/lib/lutaml/cli/uml/diagram_command.rb +0 -415
- data/lib/lutaml/cli/uml/export_command.rb +0 -77
- data/lib/lutaml/cli/uml/find_command.rb +0 -119
- data/lib/lutaml/cli/uml/info_command.rb +0 -103
- data/lib/lutaml/cli/uml/inspect_command.rb +0 -85
- data/lib/lutaml/cli/uml/ls_command.rb +0 -102
- data/lib/lutaml/cli/uml/repl_command.rb +0 -49
- data/lib/lutaml/cli/uml/search_command.rb +0 -85
- data/lib/lutaml/cli/uml/serve_command.rb +0 -58
- data/lib/lutaml/cli/uml/shared_helpers.rb +0 -49
- data/lib/lutaml/cli/uml/spa_command.rb +0 -208
- data/lib/lutaml/cli/uml/stats_command.rb +0 -57
- data/lib/lutaml/cli/uml/tree_command.rb +0 -82
- data/lib/lutaml/cli/uml/validate_command.rb +0 -190
- data/lib/lutaml/cli/uml/verify_command.rb +0 -103
- data/lib/lutaml/cli/uml.rb +0 -24
- data/lib/lutaml/cli/uml_commands.rb +0 -145
- data/lib/lutaml/cli.rb +0 -84
- data/lib/lutaml/converter/dsl_to_uml.rb +0 -237
- data/lib/lutaml/converter/xmi_to_uml.rb +0 -329
- data/lib/lutaml/converter/xmi_to_uml_generalization.rb +0 -193
- data/lib/lutaml/converter.rb +0 -10
- data/lib/lutaml/ea/diagram/configuration.rb +0 -379
- data/lib/lutaml/ea/diagram/element_renderers/base_renderer.rb +0 -81
- data/lib/lutaml/ea/diagram/element_renderers/class_renderer.rb +0 -328
- data/lib/lutaml/ea/diagram/element_renderers/connector_renderer.rb +0 -53
- data/lib/lutaml/ea/diagram/element_renderers/package_renderer.rb +0 -67
- data/lib/lutaml/ea/diagram/element_renderers.rb +0 -18
- data/lib/lutaml/ea/diagram/extractor.rb +0 -562
- data/lib/lutaml/ea/diagram/layout_engine.rb +0 -249
- data/lib/lutaml/ea/diagram/path_builder.rb +0 -256
- data/lib/lutaml/ea/diagram/style_parser.rb +0 -315
- data/lib/lutaml/ea/diagram/style_resolver.rb +0 -281
- data/lib/lutaml/ea/diagram/svg_renderer.rb +0 -279
- data/lib/lutaml/ea/diagram/util.rb +0 -69
- data/lib/lutaml/ea/diagram.rb +0 -62
- data/lib/lutaml/ea.rb +0 -7
- data/lib/lutaml/formatter/base.rb +0 -63
- data/lib/lutaml/formatter/graphviz.rb +0 -374
- data/lib/lutaml/formatter.rb +0 -20
- data/lib/lutaml/layout/engine.rb +0 -17
- data/lib/lutaml/layout/graph_viz_engine.rb +0 -19
- data/lib/lutaml/layout.rb +0 -8
- data/lib/lutaml/model_transformations/configuration.rb +0 -333
- data/lib/lutaml/model_transformations/format_registry.rb +0 -392
- data/lib/lutaml/model_transformations/parsers/base_parser.rb +0 -464
- data/lib/lutaml/model_transformations/parsers/qea_parser.rb +0 -450
- data/lib/lutaml/model_transformations/parsers/xmi_parser.rb +0 -289
- data/lib/lutaml/model_transformations/transformation_engine.rb +0 -405
- data/lib/lutaml/model_transformations.rb +0 -143
- data/lib/lutaml/qea/benchmark.rb +0 -210
- data/lib/lutaml/qea/database.rb +0 -270
- data/lib/lutaml/qea/factory/association_builder.rb +0 -203
- data/lib/lutaml/qea/factory/association_transformer.rb +0 -107
- data/lib/lutaml/qea/factory/attribute_tag_transformer.rb +0 -57
- data/lib/lutaml/qea/factory/attribute_transformer.rb +0 -93
- data/lib/lutaml/qea/factory/base_transformer.rb +0 -127
- data/lib/lutaml/qea/factory/class_transformer.rb +0 -164
- data/lib/lutaml/qea/factory/constraint_transformer.rb +0 -75
- data/lib/lutaml/qea/factory/data_type_transformer.rb +0 -133
- data/lib/lutaml/qea/factory/diagram_transformer.rb +0 -157
- data/lib/lutaml/qea/factory/document_builder.rb +0 -273
- data/lib/lutaml/qea/factory/ea_to_uml_factory.rb +0 -243
- data/lib/lutaml/qea/factory/enum_transformer.rb +0 -88
- data/lib/lutaml/qea/factory/generalization_builder.rb +0 -236
- data/lib/lutaml/qea/factory/generalization_transformer.rb +0 -98
- data/lib/lutaml/qea/factory/instance_transformer.rb +0 -84
- data/lib/lutaml/qea/factory/object_property_transformer.rb +0 -58
- data/lib/lutaml/qea/factory/operation_transformer.rb +0 -66
- data/lib/lutaml/qea/factory/package_transformer.rb +0 -208
- data/lib/lutaml/qea/factory/reference_resolver.rb +0 -99
- data/lib/lutaml/qea/factory/stereotype_loader.rb +0 -40
- data/lib/lutaml/qea/factory/tagged_value_transformer.rb +0 -38
- data/lib/lutaml/qea/factory/transformer_registry.rb +0 -77
- data/lib/lutaml/qea/factory.rb +0 -37
- data/lib/lutaml/qea/file_detector.rb +0 -178
- data/lib/lutaml/qea/infrastructure/database_connection.rb +0 -100
- data/lib/lutaml/qea/infrastructure/schema_reader.rb +0 -136
- data/lib/lutaml/qea/infrastructure/table_reader.rb +0 -224
- data/lib/lutaml/qea/infrastructure.rb +0 -12
- data/lib/lutaml/qea/models/base_model.rb +0 -48
- data/lib/lutaml/qea/models/ea_attribute.rb +0 -133
- data/lib/lutaml/qea/models/ea_attribute_tag.rb +0 -107
- data/lib/lutaml/qea/models/ea_complexity_type.rb +0 -79
- data/lib/lutaml/qea/models/ea_connector.rb +0 -160
- data/lib/lutaml/qea/models/ea_connector_type.rb +0 -60
- data/lib/lutaml/qea/models/ea_constraint_type.rb +0 -63
- data/lib/lutaml/qea/models/ea_datatype.rb +0 -104
- data/lib/lutaml/qea/models/ea_diagram.rb +0 -115
- data/lib/lutaml/qea/models/ea_diagram_link.rb +0 -78
- data/lib/lutaml/qea/models/ea_diagram_object.rb +0 -84
- data/lib/lutaml/qea/models/ea_diagram_type.rb +0 -56
- data/lib/lutaml/qea/models/ea_document.rb +0 -66
- data/lib/lutaml/qea/models/ea_object.rb +0 -206
- data/lib/lutaml/qea/models/ea_object_constraint.rb +0 -60
- data/lib/lutaml/qea/models/ea_object_property.rb +0 -94
- data/lib/lutaml/qea/models/ea_object_type.rb +0 -73
- data/lib/lutaml/qea/models/ea_operation.rb +0 -151
- data/lib/lutaml/qea/models/ea_operation_param.rb +0 -71
- data/lib/lutaml/qea/models/ea_package.rb +0 -73
- data/lib/lutaml/qea/models/ea_script.rb +0 -67
- data/lib/lutaml/qea/models/ea_status_type.rb +0 -66
- data/lib/lutaml/qea/models/ea_stereotype.rb +0 -57
- data/lib/lutaml/qea/models/ea_tagged_value.rb +0 -103
- data/lib/lutaml/qea/models/ea_xref.rb +0 -172
- data/lib/lutaml/qea/models.rb +0 -35
- data/lib/lutaml/qea/parser.rb +0 -57
- data/lib/lutaml/qea/repositories/base_repository.rb +0 -215
- data/lib/lutaml/qea/repositories/object_repository.rb +0 -219
- data/lib/lutaml/qea/repositories.rb +0 -10
- data/lib/lutaml/qea/services/configuration.rb +0 -211
- data/lib/lutaml/qea/services/database_loader.rb +0 -186
- data/lib/lutaml/qea/services.rb +0 -10
- data/lib/lutaml/qea/validation/association_validator.rb +0 -73
- data/lib/lutaml/qea/validation/attribute_validator.rb +0 -101
- data/lib/lutaml/qea/validation/base_validator.rb +0 -312
- data/lib/lutaml/qea/validation/class_validator.rb +0 -121
- data/lib/lutaml/qea/validation/database/circular_reference_validator.rb +0 -109
- data/lib/lutaml/qea/validation/database/orphan_validator.rb +0 -153
- data/lib/lutaml/qea/validation/database/referential_integrity_validator.rb +0 -128
- data/lib/lutaml/qea/validation/database.rb +0 -10
- data/lib/lutaml/qea/validation/diagram_validator.rb +0 -112
- data/lib/lutaml/qea/validation/formatters/json_formatter.rb +0 -137
- data/lib/lutaml/qea/validation/formatters/text_formatter.rb +0 -235
- data/lib/lutaml/qea/validation/operation_validator.rb +0 -79
- data/lib/lutaml/qea/validation/package_validator.rb +0 -111
- data/lib/lutaml/qea/validation/validation_engine.rb +0 -477
- data/lib/lutaml/qea/validation/validation_message.rb +0 -144
- data/lib/lutaml/qea/validation/validation_result.rb +0 -210
- data/lib/lutaml/qea/validation/validator_registry.rb +0 -134
- data/lib/lutaml/qea/validation.rb +0 -27
- data/lib/lutaml/qea/verification/comparison_result.rb +0 -264
- data/lib/lutaml/qea/verification/document_normalizer.rb +0 -169
- data/lib/lutaml/qea/verification/document_verifier.rb +0 -323
- data/lib/lutaml/qea/verification/element_comparator.rb +0 -277
- data/lib/lutaml/qea/verification/structure_matcher.rb +0 -287
- data/lib/lutaml/qea/verification.rb +0 -14
- data/lib/lutaml/qea.rb +0 -225
- data/lib/lutaml/uml/abstraction.rb +0 -11
- data/lib/lutaml/uml/action.rb +0 -15
- data/lib/lutaml/uml/activity.rb +0 -11
- data/lib/lutaml/uml/actor.rb +0 -11
- data/lib/lutaml/uml/association.rb +0 -35
- data/lib/lutaml/uml/association_generalization.rb +0 -18
- data/lib/lutaml/uml/behavior.rb +0 -11
- data/lib/lutaml/uml/cardinality.rb +0 -10
- data/lib/lutaml/uml/class.rb +0 -50
- data/lib/lutaml/uml/classifier.rb +0 -17
- data/lib/lutaml/uml/comment.rb +0 -13
- data/lib/lutaml/uml/connector.rb +0 -18
- data/lib/lutaml/uml/connector_end.rb +0 -20
- data/lib/lutaml/uml/constraint.rb +0 -22
- data/lib/lutaml/uml/data_type.rb +0 -54
- data/lib/lutaml/uml/dependency.rb +0 -18
- data/lib/lutaml/uml/diagram.rb +0 -23
- data/lib/lutaml/uml/diagram_link.rb +0 -26
- data/lib/lutaml/uml/diagram_object.rb +0 -30
- data/lib/lutaml/uml/document.rb +0 -62
- data/lib/lutaml/uml/enum.rb +0 -19
- data/lib/lutaml/uml/event.rb +0 -11
- data/lib/lutaml/uml/fidelity.rb +0 -10
- data/lib/lutaml/uml/final_state.rb +0 -11
- data/lib/lutaml/uml/fontname.rb +0 -13
- data/lib/lutaml/uml/general_attribute.rb +0 -22
- data/lib/lutaml/uml/generalization.rb +0 -35
- data/lib/lutaml/uml/group.rb +0 -19
- data/lib/lutaml/uml/has_attributes.rb +0 -14
- data/lib/lutaml/uml/has_members.rb +0 -30
- data/lib/lutaml/uml/inheritance_walker.rb +0 -96
- data/lib/lutaml/uml/instance.rb +0 -15
- data/lib/lutaml/uml/model.rb +0 -13
- data/lib/lutaml/uml/model_helpers.rb +0 -93
- data/lib/lutaml/uml/namespace.rb +0 -10
- data/lib/lutaml/uml/node/attribute.rb +0 -30
- data/lib/lutaml/uml/node/base.rb +0 -19
- data/lib/lutaml/uml/node/class_node.rb +0 -48
- data/lib/lutaml/uml/node/class_relationship.rb +0 -11
- data/lib/lutaml/uml/node/document.rb +0 -15
- data/lib/lutaml/uml/node/has_name.rb +0 -15
- data/lib/lutaml/uml/node/has_type.rb +0 -15
- data/lib/lutaml/uml/node/method_argument.rb +0 -12
- data/lib/lutaml/uml/node/operation.rb +0 -23
- data/lib/lutaml/uml/node/relationship.rb +0 -22
- data/lib/lutaml/uml/opaque_behavior.rb +0 -11
- data/lib/lutaml/uml/operation.rb +0 -21
- data/lib/lutaml/uml/operation_parameter.rb +0 -17
- data/lib/lutaml/uml/package.rb +0 -31
- data/lib/lutaml/uml/package_path.rb +0 -235
- data/lib/lutaml/uml/parsers/attribute.rb +0 -68
- data/lib/lutaml/uml/parsers/dsl.rb +0 -415
- data/lib/lutaml/uml/parsers/dsl_preprocessor.rb +0 -63
- data/lib/lutaml/uml/parsers/dsl_transform.rb +0 -27
- data/lib/lutaml/uml/parsers/yaml.rb +0 -23
- data/lib/lutaml/uml/port.rb +0 -8
- data/lib/lutaml/uml/primitive_type.rb +0 -13
- data/lib/lutaml/uml/property.rb +0 -25
- data/lib/lutaml/uml/pseudostate.rb +0 -11
- data/lib/lutaml/uml/qualified_name.rb +0 -175
- data/lib/lutaml/uml/realization.rb +0 -11
- data/lib/lutaml/uml/region.rb +0 -11
- data/lib/lutaml/uml/state.rb +0 -20
- data/lib/lutaml/uml/state_machine.rb +0 -11
- data/lib/lutaml/uml/tagged_value.rb +0 -21
- data/lib/lutaml/uml/top_element.rb +0 -83
- data/lib/lutaml/uml/top_element_attribute.rb +0 -62
- data/lib/lutaml/uml/transition.rb +0 -22
- data/lib/lutaml/uml/trigger.rb +0 -16
- data/lib/lutaml/uml/validation/document_structure_validator.rb +0 -387
- data/lib/lutaml/uml/value.rb +0 -35
- data/lib/lutaml/uml/vertex.rb +0 -11
- data/lib/lutaml/uml.rb +0 -113
- data/lib/lutaml/uml_repository/class_lookup_index.rb +0 -40
- data/lib/lutaml/uml_repository/error_handler.rb +0 -203
- data/lib/lutaml/uml_repository/exporters/base_exporter.rb +0 -61
- data/lib/lutaml/uml_repository/exporters/json_exporter.rb +0 -343
- data/lib/lutaml/uml_repository/exporters/markdown/class_page_builder.rb +0 -187
- data/lib/lutaml/uml_repository/exporters/markdown/formatting.rb +0 -34
- data/lib/lutaml/uml_repository/exporters/markdown/index_page_builder.rb +0 -81
- data/lib/lutaml/uml_repository/exporters/markdown/link_resolver.rb +0 -40
- data/lib/lutaml/uml_repository/exporters/markdown/package_page_builder.rb +0 -107
- data/lib/lutaml/uml_repository/exporters/markdown.rb +0 -20
- data/lib/lutaml/uml_repository/exporters/markdown_exporter.rb +0 -86
- data/lib/lutaml/uml_repository/index_builder.rb +0 -210
- data/lib/lutaml/uml_repository/index_builders/association_index.rb +0 -155
- data/lib/lutaml/uml_repository/index_builders/class_index.rb +0 -113
- data/lib/lutaml/uml_repository/index_builders/package_index.rb +0 -62
- data/lib/lutaml/uml_repository/index_builders.rb +0 -13
- data/lib/lutaml/uml_repository/lazy_repository.rb +0 -236
- data/lib/lutaml/uml_repository/package_exporter.rb +0 -334
- data/lib/lutaml/uml_repository/package_loader.rb +0 -240
- data/lib/lutaml/uml_repository/package_metadata.rb +0 -77
- data/lib/lutaml/uml_repository/presenters/association_presenter.rb +0 -79
- data/lib/lutaml/uml_repository/presenters/attribute_presenter.rb +0 -94
- data/lib/lutaml/uml_repository/presenters/class_presenter.rb +0 -72
- data/lib/lutaml/uml_repository/presenters/datatype_presenter.rb +0 -97
- data/lib/lutaml/uml_repository/presenters/diagram_presenter.rb +0 -469
- data/lib/lutaml/uml_repository/presenters/element_presenter.rb +0 -91
- data/lib/lutaml/uml_repository/presenters/enum_presenter.rb +0 -78
- data/lib/lutaml/uml_repository/presenters/package_presenter.rb +0 -48
- data/lib/lutaml/uml_repository/presenters/presenter_factory.rb +0 -74
- data/lib/lutaml/uml_repository/queries/association_query.rb +0 -184
- data/lib/lutaml/uml_repository/queries/base_query.rb +0 -45
- data/lib/lutaml/uml_repository/queries/class_query.rb +0 -178
- data/lib/lutaml/uml_repository/queries/diagram_query.rb +0 -108
- data/lib/lutaml/uml_repository/queries/inheritance_query.rb +0 -327
- data/lib/lutaml/uml_repository/queries/package_query.rb +0 -230
- data/lib/lutaml/uml_repository/queries/search_query.rb +0 -209
- data/lib/lutaml/uml_repository/query_dsl/conditions/base_condition.rb +0 -28
- data/lib/lutaml/uml_repository/query_dsl/conditions/block_condition.rb +0 -44
- data/lib/lutaml/uml_repository/query_dsl/conditions/hash_condition.rb +0 -82
- data/lib/lutaml/uml_repository/query_dsl/conditions/package_condition.rb +0 -89
- data/lib/lutaml/uml_repository/query_dsl/order.rb +0 -90
- data/lib/lutaml/uml_repository/query_dsl/query_builder.rb +0 -290
- data/lib/lutaml/uml_repository/repository/deprecated.rb +0 -39
- data/lib/lutaml/uml_repository/repository/loader.rb +0 -117
- data/lib/lutaml/uml_repository/repository.rb +0 -718
- data/lib/lutaml/uml_repository/repository_enhanced.rb +0 -431
- data/lib/lutaml/uml_repository/search_result.rb +0 -86
- data/lib/lutaml/uml_repository/static_site/association_serialization.rb +0 -77
- data/lib/lutaml/uml_repository/static_site/configuration.rb +0 -268
- data/lib/lutaml/uml_repository/static_site/data_transformer.rb +0 -121
- data/lib/lutaml/uml_repository/static_site/generator.rb +0 -434
- data/lib/lutaml/uml_repository/static_site/id_generator.rb +0 -115
- data/lib/lutaml/uml_repository/static_site/models/spa_association.rb +0 -29
- data/lib/lutaml/uml_repository/static_site/models/spa_association_end.rb +0 -25
- data/lib/lutaml/uml_repository/static_site/models/spa_attribute.rb +0 -39
- data/lib/lutaml/uml_repository/static_site/models/spa_base.rb +0 -12
- data/lib/lutaml/uml_repository/static_site/models/spa_cardinality.rb +0 -19
- data/lib/lutaml/uml_repository/static_site/models/spa_class.rb +0 -59
- data/lib/lutaml/uml_repository/static_site/models/spa_diagram.rb +0 -31
- data/lib/lutaml/uml_repository/static_site/models/spa_document.rb +0 -31
- data/lib/lutaml/uml_repository/static_site/models/spa_inherited_association.rb +0 -25
- data/lib/lutaml/uml_repository/static_site/models/spa_inherited_attribute.rb +0 -25
- data/lib/lutaml/uml_repository/static_site/models/spa_literal.rb +0 -19
- data/lib/lutaml/uml_repository/static_site/models/spa_metadata.rb +0 -23
- data/lib/lutaml/uml_repository/static_site/models/spa_operation.rb +0 -34
- data/lib/lutaml/uml_repository/static_site/models/spa_package.rb +0 -35
- data/lib/lutaml/uml_repository/static_site/models/spa_package_tree_node.rb +0 -32
- data/lib/lutaml/uml_repository/static_site/models/spa_parameter.rb +0 -21
- data/lib/lutaml/uml_repository/static_site/models/spa_search_entry.rb +0 -35
- data/lib/lutaml/uml_repository/static_site/models/spa_statistics.rb +0 -25
- data/lib/lutaml/uml_repository/static_site/models/spa_tree_class_ref.rb +0 -21
- data/lib/lutaml/uml_repository/static_site/models.rb +0 -46
- data/lib/lutaml/uml_repository/static_site/search_index_builder.rb +0 -239
- data/lib/lutaml/uml_repository/static_site/serializers/attribute_serializer.rb +0 -60
- data/lib/lutaml/uml_repository/static_site/serializers/class_serializer.rb +0 -123
- data/lib/lutaml/uml_repository/static_site/serializers/diagram_serializer.rb +0 -73
- data/lib/lutaml/uml_repository/static_site/serializers/inheritance_resolver.rb +0 -262
- data/lib/lutaml/uml_repository/static_site/serializers/metadata_builder.rb +0 -48
- data/lib/lutaml/uml_repository/static_site/serializers/operation_serializer.rb +0 -57
- data/lib/lutaml/uml_repository/static_site/serializers/package_serializer.rb +0 -79
- data/lib/lutaml/uml_repository/static_site/serializers/package_tree_builder.rb +0 -91
- data/lib/lutaml/uml_repository/static_site/serializers.rb +0 -26
- data/lib/lutaml/uml_repository/static_site.rb +0 -94
- data/lib/lutaml/uml_repository/statistics_calculator.rb +0 -342
- data/lib/lutaml/uml_repository/validators/repository_validator.rb +0 -392
- data/lib/lutaml/uml_repository/web_ui/app.rb +0 -161
- data/lib/lutaml/uml_repository/web_ui/public/app.js +0 -452
- data/lib/lutaml/uml_repository/web_ui/public/styles.css +0 -381
- data/lib/lutaml/uml_repository/web_ui/views/index.erb +0 -40
- data/lib/lutaml/uml_repository.rb +0 -117
- data/lib/lutaml/xmi/liquid_drops/association_drop.rb +0 -56
- data/lib/lutaml/xmi/liquid_drops/attribute_drop.rb +0 -72
- data/lib/lutaml/xmi/liquid_drops/cardinality_drop.rb +0 -35
- data/lib/lutaml/xmi/liquid_drops/connector_drop.rb +0 -54
- data/lib/lutaml/xmi/liquid_drops/constraint_drop.rb +0 -29
- data/lib/lutaml/xmi/liquid_drops/data_type_drop.rb +0 -63
- data/lib/lutaml/xmi/liquid_drops/dependency_drop.rb +0 -36
- data/lib/lutaml/xmi/liquid_drops/diagram_drop.rb +0 -34
- data/lib/lutaml/xmi/liquid_drops/enum_drop.rb +0 -49
- data/lib/lutaml/xmi/liquid_drops/enum_owned_literal_drop.rb +0 -25
- data/lib/lutaml/xmi/liquid_drops/generalization_attribute_drop.rb +0 -87
- data/lib/lutaml/xmi/liquid_drops/generalization_drop.rb +0 -127
- data/lib/lutaml/xmi/liquid_drops/klass_drop.rb +0 -191
- data/lib/lutaml/xmi/liquid_drops/operation_drop.rb +0 -29
- data/lib/lutaml/xmi/liquid_drops/package_drop.rb +0 -108
- data/lib/lutaml/xmi/liquid_drops/root_drop.rb +0 -34
- data/lib/lutaml/xmi/liquid_drops/source_target_drop.rb +0 -43
- data/lib/lutaml/xmi/parsers/xmi_base.rb +0 -301
- data/lib/lutaml/xmi/parsers/xmi_class_members.rb +0 -45
- data/lib/lutaml/xmi/parsers/xmi_connector.rb +0 -263
- data/lib/lutaml/xmi/parsers/xml.rb +0 -63
- data/lib/lutaml/xmi/xmi_lookup_service.rb +0 -40
- data/lib/lutaml/xmi.rb +0 -47
- data/templates/static_site/assets/images/lutaml-full.svg +0 -1
- data/templates/static_site/assets/images/lutaml-icon.svg +0 -1
- data/templates/static_site/assets/scripts/app.js +0 -45
- data/templates/static_site/assets/scripts/core/state.js +0 -446
- data/templates/static_site/assets/scripts/core/utils.js +0 -133
- data/templates/static_site/assets/scripts/ui/details.js +0 -74
- data/templates/static_site/assets/scripts/ui/diagrams.js +0 -345
- data/templates/static_site/assets/scripts/ui/search.js +0 -187
- data/templates/static_site/assets/scripts/ui/sidebar.js +0 -123
- data/templates/static_site/assets/styles/00-variables.css +0 -144
- data/templates/static_site/assets/styles/01-reset.css +0 -69
- data/templates/static_site/assets/styles/02-base.css +0 -144
- data/templates/static_site/assets/styles/03-layout.css +0 -121
- data/templates/static_site/assets/styles/04-components.css +0 -905
- data/templates/static_site/assets/styles/05-utilities.css +0 -23
- data/templates/static_site/assets/styles/06-diagrams.css +0 -74
- data/templates/static_site/components/class_details.liquid +0 -328
- data/templates/static_site/components/content.liquid +0 -481
- data/templates/static_site/components/diagram_list.liquid +0 -52
- data/templates/static_site/components/diagram_viewer.liquid +0 -71
- data/templates/static_site/components/header.liquid +0 -114
- data/templates/static_site/components/package_details.liquid +0 -119
- data/templates/static_site/components/sidebar.liquid +0 -76
- data/templates/static_site/components/tree_node.liquid +0 -81
- data/templates/static_site/multi_file.liquid +0 -49
- 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
|