lutaml-uml 0.4.3 → 0.5.1
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 +32 -0
- data/.gitignore +5 -9
- data/.rspec +1 -1
- data/CLAUDE.md +54 -0
- data/Gemfile +14 -2
- data/README.adoc +22 -33
- data/Rakefile +0 -1
- data/TODO.next/01-remove-repository-enhanced.md +26 -0
- data/TODO.next/02-drop-fontname-autoload.md +32 -0
- data/TODO.next/03-add-missing-behavioral-specs.md +56 -0
- data/TODO.next/04-finish-double-elimination.md +34 -0
- data/TODO.next/05-remove-dead-umlrepository-autoloads.md +31 -0
- data/TODO.next/06-cleanup-phantom-requires.md +46 -0
- data/TODO.next/07-unused-liquid-templates.md +42 -0
- data/TODO.next/08-broken-executables.md +60 -0
- data/config/package_metadata.example.yml +58 -0
- data/config/static_site.yml +166 -0
- data/examples/UML_EA.DTD +6856 -0
- 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 +220 -0
- data/examples/lur_cli_workflow.rb +262 -0
- data/examples/lur_statistics.rb +325 -0
- 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 +230 -0
- 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 +118121 -0
- data/examples/xmi/ArcGISWorkspace_template.xmi +1467 -0
- data/examples/xmi/Images/EAID_0016F797_D055_4717_AF1A_606413D0A166.svg +158 -0
- data/examples/xmi/Images/EAID_00C5C772_5A03_434f_BF30_AC37542A1AAC.svg +659 -0
- data/examples/xmi/Images/EAID_0114FD24_9E58_4664_98CD_71305B59AD11.svg +411 -0
- data/examples/xmi/Images/EAID_01661E1B_31B6_4167_BCCF_A00678FB4EA2.svg +102 -0
- data/examples/xmi/Images/EAID_039FE004_5408_4fc0_89AA_EB319E4F61C7.svg +169 -0
- data/examples/xmi/Images/EAID_04EE9625_17A0_4721_BC71_21756DB21D06.svg +403 -0
- data/examples/xmi/Images/EAID_05FF9417_1619_4170_B0C9_55AA6B988EF1.svg +175 -0
- data/examples/xmi/Images/EAID_09853FB2_AF8A_432f_94C5_6C47461BD937.svg +360 -0
- data/examples/xmi/Images/EAID_09927B7F_A657_4819_99E5_AC9DC99227D9.svg +195 -0
- data/examples/xmi/Images/EAID_09AF6B8A_557C_43bc_BBB0_47C1E9401EF3.svg +218 -0
- data/examples/xmi/Images/EAID_0BE81AC5_031B_4973_A9A0_223CCD92BAA1.svg +471 -0
- data/examples/xmi/Images/EAID_0EDEA6EF_4DC8_4979_BB80_28B1B9EBD1D4.svg +56 -0
- data/examples/xmi/Images/EAID_0F413534_6AD2_48bc_B4AF_8699D530D91D.svg +262 -0
- data/examples/xmi/Images/EAID_1321F39B_AD67_47b5_B5C3_3A42BBFCBDF9.svg +286 -0
- data/examples/xmi/Images/EAID_13E09C71_99E7_40b4_B72D_48AF6379BC2E.svg +164 -0
- data/examples/xmi/Images/EAID_144955D8_CB4E_4b59_BB0C_E549F7F84943.svg +66 -0
- data/examples/xmi/Images/EAID_14E9F5FD_F6CD_4f48_B1CD_F5A40C6D8E83.svg +95 -0
- data/examples/xmi/Images/EAID_157826AA_96A7_4278_89A6_94BD0F31409A.svg +63 -0
- data/examples/xmi/Images/EAID_159E9DA0_7A54_4817_B72A_401C750F675D.svg +306 -0
- data/examples/xmi/Images/EAID_17BC8309_8051_492b_BE87_61CCFE83DB16.svg +45 -0
- data/examples/xmi/Images/EAID_1A10EB6D_E2E5_42a6_A31E_B293D93FD07E.svg +193 -0
- data/examples/xmi/Images/EAID_1A290AFD_CE96_46a2_8351_A986D77CC727.svg +444 -0
- data/examples/xmi/Images/EAID_1B2D9309_C66B_492a_995C_95B2B02E0D7C.svg +168 -0
- data/examples/xmi/Images/EAID_1DE6B973_CE8A_416f_909B_54CEA1E5944E.svg +10 -0
- data/examples/xmi/Images/EAID_204F4ACC_2230_4c8d_9861_EF5A6844B712.svg +60 -0
- data/examples/xmi/Images/EAID_227300E2_4F4B_4955_83B9_FA626CE8680B.svg +188 -0
- data/examples/xmi/Images/EAID_22C24D4C_4894_480a_B113_0CB034CB59E9.svg +426 -0
- data/examples/xmi/Images/EAID_234BC4F5_8100_4969_BDCB_A24E0E641F23.svg +169 -0
- data/examples/xmi/Images/EAID_24446BFC_9FEB_4935_8970_65A4C562A93F.svg +277 -0
- data/examples/xmi/Images/EAID_24E8A45C_C99F_49b7_860A_9CF65FF76C76.svg +575 -0
- data/examples/xmi/Images/EAID_272F3181_4300_48b7_98A0_A8CFD12B1A72.svg +255 -0
- data/examples/xmi/Images/EAID_292E0D94_392C_4da6_A0B5_841501FAE50A.svg +183 -0
- data/examples/xmi/Images/EAID_29DD0967_ADAB_4abb_99C5_544821F5E7DA.svg +10 -0
- data/examples/xmi/Images/EAID_2A339928_E5EF_4ed2_9E5D_CC2CA5CF248B.svg +310 -0
- data/examples/xmi/Images/EAID_2A5E0832_06BE_4381_85D4_9B00E4F95575.svg +155 -0
- data/examples/xmi/Images/EAID_2AAB709F_EFCE_496f_8AFE_92809D66A0A9.svg +81 -0
- data/examples/xmi/Images/EAID_2C8DD882_8DEA_4065_89F8_DDA796AA0C85.svg +520 -0
- data/examples/xmi/Images/EAID_2E98EA19_37D8_4b70_BDCE_CFEE4FA800B0.svg +173 -0
- data/examples/xmi/Images/EAID_30D62231_110F_44e8_9C06_6FCDCBA53A09.svg +722 -0
- data/examples/xmi/Images/EAID_3206D3FD_1FC4_41c7_8D00_36DB908E9319.svg +181 -0
- data/examples/xmi/Images/EAID_3452CC53_9ACB_44eb_9C9D_B90CF862F284.svg +92 -0
- data/examples/xmi/Images/EAID_348EE46E_ABD9_40b0_82A1_0285E75BDC52.svg +187 -0
- data/examples/xmi/Images/EAID_34FF671B_CFDC_47ad_91DF_ECA6D8358180.svg +217 -0
- data/examples/xmi/Images/EAID_359DD694_0100_4bdf_AD5F_712D97E9C69B.svg +157 -0
- data/examples/xmi/Images/EAID_35DE714C_49A8_490e_913A_56F39EF317F9.svg +180 -0
- data/examples/xmi/Images/EAID_360C79F1_8EDF_41db_A069_DECDC55625BC.svg +31 -0
- data/examples/xmi/Images/EAID_36913C58_FF35_4ba2_A04B_9A4824E24609.svg +166 -0
- data/examples/xmi/Images/EAID_372F7F7B_57ED_469a_A640_70DB578B3C56.svg +361 -0
- data/examples/xmi/Images/EAID_37AC19B9_8433_4fee_A326_763170D54D06.svg +32 -0
- data/examples/xmi/Images/EAID_38170608_32B5_4a6f_A68D_A0D7C0C9D019.svg +234 -0
- data/examples/xmi/Images/EAID_3A77A5D0_4E1B_4116_8AAD_407FC422B47F.svg +183 -0
- data/examples/xmi/Images/EAID_3B8BD087_1683_46b1_8D0D_6F839C46C578.svg +42 -0
- data/examples/xmi/Images/EAID_3DC20801_AE8B_4e76_B08C_F574E8A90E13.svg +192 -0
- data/examples/xmi/Images/EAID_3DE28C70_C6D4_406c_B49F_EEF52148C8C1.svg +124 -0
- data/examples/xmi/Images/EAID_458E093C_BA2B_4292_BEC4_37511C163DDC.svg +140 -0
- data/examples/xmi/Images/EAID_45F9B1F7_E568_47c9_B229_953BC2E707E4.svg +266 -0
- data/examples/xmi/Images/EAID_46B3041A_8C23_46e6_8E14_ADE7012274C5.svg +80 -0
- data/examples/xmi/Images/EAID_47E4600F_CEC9_4245_9BF5_EE38007A9DDB.svg +584 -0
- data/examples/xmi/Images/EAID_4881CEEE_792C_4cb0_BEA7_54333B643D0A.svg +155 -0
- data/examples/xmi/Images/EAID_48D364F0_DCA4_41e8_B4D4_509B3023B969.svg +17 -0
- data/examples/xmi/Images/EAID_4DBDAB9E_4C1C_4cb1_A767_06BD743A50A7.svg +78 -0
- data/examples/xmi/Images/EAID_4EB75007_B31D_4f2c_8855_7E9D3A3B17F4.svg +454 -0
- data/examples/xmi/Images/EAID_4F421236_FCF3_4aae_B22A_C7E6A5EFBAC7.svg +81 -0
- data/examples/xmi/Images/EAID_4FC1D352_2102_4b73_BCB0_1410B29C6BD7.svg +379 -0
- data/examples/xmi/Images/EAID_4FE346EA_01E1_4b30_8BE6_BB32EA191E47.svg +126 -0
- data/examples/xmi/Images/EAID_5038EEE3_7DD0_4cca_9829_364E044D37E8.svg +199 -0
- data/examples/xmi/Images/EAID_508A37DC_9378_4f5a_BD96_48F4D24E03A5.svg +162 -0
- data/examples/xmi/Images/EAID_516DA1A2_F0EC_415c_9664_E4CA54E7F05C.svg +136 -0
- data/examples/xmi/Images/EAID_52A1DBD3_D3DA_4b6d_8F96_FC6F39F64242.svg +161 -0
- data/examples/xmi/Images/EAID_575E87BA_32E9_4a84_AA4E_0EFDFC5D4C07.svg +71 -0
- data/examples/xmi/Images/EAID_57E0F1A0_6C72_47ef_B922_B806F9A875E8.svg +209 -0
- data/examples/xmi/Images/EAID_5957C373_3FC1_482f_8F35_D809153A17F5.svg +123 -0
- data/examples/xmi/Images/EAID_59A66AE2_412C_48a6_BFC7_EA56CF11D269.svg +218 -0
- data/examples/xmi/Images/EAID_5A43833E_680B_4a90_8931_0C902304E029.svg +236 -0
- data/examples/xmi/Images/EAID_5D6DB5A0_5047_4bac_9E60_69904A60B56D.svg +353 -0
- data/examples/xmi/Images/EAID_5DA1E7A7_8E59_4803_A831_E9F3EC27328F.svg +242 -0
- data/examples/xmi/Images/EAID_5E2C1E2A_82A8_47f4_B2ED_1398D72BFCFD.svg +246 -0
- data/examples/xmi/Images/EAID_6052620C_4BD5_49f6_A21C_AD7E6DCA2795.svg +290 -0
- data/examples/xmi/Images/EAID_6481E2CC_35A6_43b0_88D4_10A667A2BC2D.svg +60 -0
- data/examples/xmi/Images/EAID_660C7D03_A26C_4977_A7BA_9D0A773DA811.svg +318 -0
- data/examples/xmi/Images/EAID_671F3C3D_35B6_4514_B5B6_DD7E84925493.svg +24 -0
- data/examples/xmi/Images/EAID_676B9C9A_D85F_4d2f_A46B_73F02090DC87.svg +127 -0
- data/examples/xmi/Images/EAID_6797FEFA_5801_48e4_8B9C_3C824C0E165D.svg +412 -0
- data/examples/xmi/Images/EAID_6807F4EE_18EF_4e7e_ACCF_D5BD323AFDE9.svg +130 -0
- data/examples/xmi/Images/EAID_69E81E34_CF28_4c7f_A48F_5941BA85CEE3.svg +96 -0
- data/examples/xmi/Images/EAID_6A3C55E8_3C3C_4f3a_8AAC_0299C5B23070.svg +10 -0
- data/examples/xmi/Images/EAID_6BAC333E_E2C2_42c7_8DDF_6B4FA0FFC03B.svg +143 -0
- data/examples/xmi/Images/EAID_6D0349D5_3F1B_4b28_82D2_910743DEB5E5.svg +114 -0
- data/examples/xmi/Images/EAID_6E95B74E_8A09_4698_9E9E_23BCFD2CE194.svg +37 -0
- data/examples/xmi/Images/EAID_70C77F92_5614_4b22_8C8E_67859F59D8FD.svg +254 -0
- data/examples/xmi/Images/EAID_71F9216B_E7A7_4083_B08E_6C71B57F3A1F.svg +187 -0
- data/examples/xmi/Images/EAID_73025C5A_08FC_47ff_AB2F_C7F79CF54B41.svg +145 -0
- data/examples/xmi/Images/EAID_74C974B6_6D07_425d_B7AC_C8899E3B4967.svg +76 -0
- data/examples/xmi/Images/EAID_7504FCD2_524C_4e7d_BAE4_4E58A8A8A12C.svg +196 -0
- data/examples/xmi/Images/EAID_78030266_3603_4747_9D75_03D16614BE7D.svg +35 -0
- data/examples/xmi/Images/EAID_785226C1_12B1_4104_A4C1_F19B70B9FB71.svg +348 -0
- data/examples/xmi/Images/EAID_7854470F_26B8_4d3c_AFDF_C05BCE6ED0CD.svg +72 -0
- data/examples/xmi/Images/EAID_794F4A8F_18CA_4e9f_8477_A6F0E5ED22D4.svg +187 -0
- data/examples/xmi/Images/EAID_7A24839E_C8AE_424d_B7D2_6DA16DC813E7.svg +114 -0
- data/examples/xmi/Images/EAID_7A3649FD_E960_4ae6_B9B1_A9001C066AE7.svg +181 -0
- data/examples/xmi/Images/EAID_7B2C6765_AB68_439a_87F3_DAC323CB2AF5.svg +196 -0
- data/examples/xmi/Images/EAID_7C44AC09_27C1_47b3_9A85_88EC71C081FF.svg +55 -0
- data/examples/xmi/Images/EAID_7CE102CA_97C1_4cac_BD3B_0500D3712D2A.svg +195 -0
- data/examples/xmi/Images/EAID_7D960BD8_65D8_4934_9C11_4EF860DD8FBA.svg +90 -0
- data/examples/xmi/Images/EAID_80939C98_A456_48c3_BCEA_4B72851F2DF6.svg +174 -0
- data/examples/xmi/Images/EAID_812FE862_76ED_44f0_B678_7A4601B395CF.svg +142 -0
- data/examples/xmi/Images/EAID_81B76F5B_9D64_4bbf_8AC8_34234FB87533.svg +740 -0
- data/examples/xmi/Images/EAID_84352F1A_195B_411b_9552_5BFC40BF90B5.svg +105 -0
- data/examples/xmi/Images/EAID_846DD800_139C_4d47_A1DF_3FB1AC5D130F.svg +554 -0
- data/examples/xmi/Images/EAID_84A9C65B_FD6D_4bb5_818F_E8C35FF5BCD1.svg +228 -0
- data/examples/xmi/Images/EAID_853674F5_7DC9_4aae_809B_5728098B5D5B.svg +154 -0
- data/examples/xmi/Images/EAID_860CBBFB_2F27_408f_9144_751F9D1F487F.svg +273 -0
- data/examples/xmi/Images/EAID_87476527_7B9B_4b92_967E_3D38365470CA.svg +239 -0
- data/examples/xmi/Images/EAID_87DAE930_5069_4c58_AC65_4B0B2C0F32C8.svg +10 -0
- data/examples/xmi/Images/EAID_88AF6BD7_BC34_406f_BB59_47CFAB4A7D5D.svg +116 -0
- data/examples/xmi/Images/EAID_88D0CB44_20D0_44fc_A6E3_B663332EF401.svg +200 -0
- data/examples/xmi/Images/EAID_8BB1CA0C_C003_4678_973B_A1C3308E021D.svg +136 -0
- data/examples/xmi/Images/EAID_8DAB169F_D189_4320_A0F5_4443E3297F0E.svg +181 -0
- data/examples/xmi/Images/EAID_8FD488EF_BAAB_40ec_A7ED_F7CC831D546E.svg +324 -0
- data/examples/xmi/Images/EAID_90BCA409_BB45_42c5_AFA5_45FE3D995904.svg +342 -0
- data/examples/xmi/Images/EAID_926AFE38_01FA_469e_B6AA_ED5F4D62B66F.svg +105 -0
- data/examples/xmi/Images/EAID_92AB0FD0_B0FB_4ceb_8EAE_66B6600D31D7.svg +681 -0
- data/examples/xmi/Images/EAID_92C43670_3057_47f1_A576_C60843FF3D26.svg +136 -0
- data/examples/xmi/Images/EAID_93F63576_BE01_4cd8_8A91_C674FF77FC3D.svg +718 -0
- data/examples/xmi/Images/EAID_9400D9BC_05A5_41fc_83F7_02E5C67F9718.svg +487 -0
- data/examples/xmi/Images/EAID_95246DCF_1C09_4a16_9512_98000F56B3D8.svg +292 -0
- data/examples/xmi/Images/EAID_9994BF62_51E2_42cd_BB35_16C537B6718A.svg +715 -0
- data/examples/xmi/Images/EAID_9AAD6C21_B1E7_4472_B64A_FB5E3569D970.svg +116 -0
- data/examples/xmi/Images/EAID_9BD7189A_877B_4ca9_B42C_817DEF144FB2.svg +284 -0
- data/examples/xmi/Images/EAID_9DA6C553_94FC_4204_83AD_ECC4B45A53EF.svg +159 -0
- data/examples/xmi/Images/EAID_9EE6A41B_5FAA_4c89_B98F_732059778630.svg +10 -0
- data/examples/xmi/Images/EAID_9F1A4B54_46F6_435c_9529_E43E54CF6050.svg +172 -0
- data/examples/xmi/Images/EAID_9FE1EA7B_4CEF_4976_A281_93A94315BD84.svg +153 -0
- data/examples/xmi/Images/EAID_A0695647_6172_4262_8C30_67441399609C.svg +290 -0
- data/examples/xmi/Images/EAID_A081C63E_D6F2_41a7_A99C_307836754AFA.svg +149 -0
- data/examples/xmi/Images/EAID_A24E2778_5AD9_44f2_AB8F_5CD3913477D6.svg +194 -0
- data/examples/xmi/Images/EAID_A264F089_F9B3_406c_A3A8_FF34903797D3.svg +143 -0
- data/examples/xmi/Images/EAID_A282E5D1_2A13_4e7f_BC76_5D086DD4A577.svg +357 -0
- data/examples/xmi/Images/EAID_A3BCE1D6_9DB5_4272_A020_4C0E194B99CC.svg +171 -0
- data/examples/xmi/Images/EAID_A56E3818_D1B8_4b63_B69E_FBAC4A8AF482.svg +218 -0
- data/examples/xmi/Images/EAID_A57215D5_75C5_4532_BCF4_264A77CD62F1.svg +204 -0
- data/examples/xmi/Images/EAID_A59065AF_9669_486c_9582_9693177CFC7F.svg +263 -0
- data/examples/xmi/Images/EAID_A759374D_589A_488c_99EF_537ACB9B1FF9.svg +398 -0
- data/examples/xmi/Images/EAID_A7B25F46_F18A_4373_B16D_8C6AC0B868B0.svg +174 -0
- data/examples/xmi/Images/EAID_A9FE9E6F_A5F4_47e5_A6BA_26E22C7346B6.svg +310 -0
- data/examples/xmi/Images/EAID_AA62CDEB_55EC_498d_B326_4AA2C9AF6A05.svg +144 -0
- data/examples/xmi/Images/EAID_AAF52AF6_F7F9_4005_AE46_8920847BEA03.svg +144 -0
- data/examples/xmi/Images/EAID_AB281AC1_7CB8_404a_8124_34343DDD84E2.svg +198 -0
- data/examples/xmi/Images/EAID_AB7F1FDF_A66B_42a1_B8A3_7F594BAAD508.svg +143 -0
- data/examples/xmi/Images/EAID_AC2191E3_76E3_40b2_9E21_0E0B9B5277D2.svg +114 -0
- data/examples/xmi/Images/EAID_AD451676_A7C8_4c6a_A925_A9B9CA344142.svg +339 -0
- data/examples/xmi/Images/EAID_ADBA40A1_9375_4c1b_9938_0990612EB615.svg +429 -0
- data/examples/xmi/Images/EAID_ADC8773C_1B27_48ac_BAC1_14C1C919FAF6.svg +245 -0
- data/examples/xmi/Images/EAID_AE0718DF_AF69_4ea1_A099_E20028FE40A1.svg +173 -0
- data/examples/xmi/Images/EAID_B0DDB85D_A00C_4a7f_8C06_CCA15E5E4FE5.svg +31 -0
- data/examples/xmi/Images/EAID_B27ED282_D5E5_4f33_8AC1_62802F9E0B35.svg +256 -0
- data/examples/xmi/Images/EAID_B3AFECCB_17DD_44d6_8A44_2C38D9A64C0B.svg +95 -0
- data/examples/xmi/Images/EAID_B3B6C5B1_278E_4714_8244_B6C28B66AB50.svg +176 -0
- data/examples/xmi/Images/EAID_B53E76CD_A0F2_4e2f_B3AB_796D85964EF2.svg +179 -0
- data/examples/xmi/Images/EAID_B55D6E67_0BDD_4163_B359_11A6FBA89C74.svg +207 -0
- data/examples/xmi/Images/EAID_B58D1A53_E860_41a3_8352_11C274093E83.svg +189 -0
- data/examples/xmi/Images/EAID_B62C02B3_69DB_49e9_8089_4EE398BDE666.svg +165 -0
- data/examples/xmi/Images/EAID_BC008774_B539_4150_8174_B675989053D0.svg +22 -0
- data/examples/xmi/Images/EAID_BC1F7E00_082D_4a26_922B_3967A8D66859.svg +266 -0
- data/examples/xmi/Images/EAID_BDA613D8_402A_475a_AA15_683D88FD3D23.svg +183 -0
- data/examples/xmi/Images/EAID_C028B286_4C85_47d8_B6D5_80B28F556E82.svg +303 -0
- data/examples/xmi/Images/EAID_C173A6F4_1D1B_400e_AD8C_64FFF7CD5BE5.svg +178 -0
- data/examples/xmi/Images/EAID_C1834072_CADC_4ce4_B0FC_8284AE5CF4A4.svg +158 -0
- data/examples/xmi/Images/EAID_C1EC985B_5CBD_4e91_8661_EB4EF23781D9.svg +286 -0
- data/examples/xmi/Images/EAID_C31C1314_B679_4413_B8FE_A2CD584FC128.svg +305 -0
- data/examples/xmi/Images/EAID_C37CFBD6_69BA_42fb_9AC7_2D329D931BCF.svg +171 -0
- data/examples/xmi/Images/EAID_C857C934_306F_463a_87D5_257CB225ECFE.svg +174 -0
- data/examples/xmi/Images/EAID_C96797DE_2238_42d3_896A_9F92500270ED.svg +180 -0
- data/examples/xmi/Images/EAID_C96CBC24_B20E_459a_8F9D_75B61CDCB89F.svg +656 -0
- data/examples/xmi/Images/EAID_CACB523D_56A5_4f05_B3C2_51BB18F380FD.svg +158 -0
- data/examples/xmi/Images/EAID_CB34B578_101B_48b4_9271_214FFEA6A83A.svg +409 -0
- data/examples/xmi/Images/EAID_CBBD6CF4_0A1E_4406_9930_89DE43527910.svg +361 -0
- data/examples/xmi/Images/EAID_CC06A828_3750_472f_8DB2_C2E0863FCE17.svg +96 -0
- data/examples/xmi/Images/EAID_CD5CF053_1772_4a0f_962D_B17054D8EEAA.svg +173 -0
- data/examples/xmi/Images/EAID_CE440B5A_9534_4c75_9BA5_50862BB396C2.svg +97 -0
- data/examples/xmi/Images/EAID_CE4734FC_7986_4b3a_807F_A5B2C7EDE9E4.svg +193 -0
- data/examples/xmi/Images/EAID_D14AA320_9D41_4366_8739_9C2C21F96AE1.svg +32 -0
- data/examples/xmi/Images/EAID_D2FA55D3_C733_4a4d_92D0_0BC7AC0BB5BC.svg +108 -0
- data/examples/xmi/Images/EAID_D351FC34_FB03_488d_ADA4_BDB93DA9CB02.svg +49 -0
- data/examples/xmi/Images/EAID_D368FDF3_BDC5_4718_A701_351C8587A376.svg +592 -0
- data/examples/xmi/Images/EAID_D4DA8C48_3998_450d_87C4_9D65C9FECDB4.svg +42 -0
- data/examples/xmi/Images/EAID_D5464ECF_290E_4b2b_A6C4_25BE80F886CB.svg +76 -0
- data/examples/xmi/Images/EAID_D55235B0_61E9_461a_8379_2B8BF2403BE2.svg +147 -0
- data/examples/xmi/Images/EAID_D555ED73_F010_45d7_8A53_45A33C64C249.svg +318 -0
- data/examples/xmi/Images/EAID_D7AAC526_267E_45a0_A853_3207F02363F8.svg +45 -0
- data/examples/xmi/Images/EAID_D998B20D_A875_4ef8_A9CE_996BE56602BD.svg +158 -0
- data/examples/xmi/Images/EAID_DBFA8B39_F5B7_4c0e_9552_19AEAE5BA64E.svg +200 -0
- data/examples/xmi/Images/EAID_DE47A47D_E7BE_4e6f_BA81_F789EE8CFE72.svg +61 -0
- data/examples/xmi/Images/EAID_DFBB1072_8EC5_4384_8241_7EDF4B6B888B.svg +78 -0
- data/examples/xmi/Images/EAID_E325B9D8_E955_4aed_8125_63167BD40320.svg +67 -0
- data/examples/xmi/Images/EAID_E32D9D02_CAE9_4a47_92A8_3290EDCD6E6D.svg +79 -0
- data/examples/xmi/Images/EAID_E3B28611_7857_458a_B0BC_736E777B88EC.svg +194 -0
- data/examples/xmi/Images/EAID_E43C37EC_1176_4d2e_8B98_B6F3DFF6A092.svg +96 -0
- data/examples/xmi/Images/EAID_E591C1CF_7F35_4160_8A72_DFA097AD5811.svg +271 -0
- data/examples/xmi/Images/EAID_E77C66A2_2E94_4196_BFC6_662FE5AEEB6F.svg +332 -0
- data/examples/xmi/Images/EAID_E7AABA98_2450_4986_9736_DCCAF0108C50.svg +639 -0
- data/examples/xmi/Images/EAID_E7D9A2C4_72D6_40b9_8EB8_6B35476246B3.svg +134 -0
- data/examples/xmi/Images/EAID_E9CDAD85_ECF1_43de_819F_30A0D01785E6.svg +193 -0
- data/examples/xmi/Images/EAID_EC8AF507_F441_4e8a_B8A7_C1690F3C7D0B.svg +58 -0
- data/examples/xmi/Images/EAID_ED501058_D540_47ac_8EBC_5921E8C0BF57.svg +384 -0
- data/examples/xmi/Images/EAID_EFBF5F0F_DF74_4944_8791_114F5637C335.svg +590 -0
- data/examples/xmi/Images/EAID_EFFFA027_2A1F_425c_8437_BF89AADC8893.svg +365 -0
- data/examples/xmi/Images/EAID_F07E7718_B2C2_4a65_B5DD_477CB73E971E.svg +165 -0
- data/examples/xmi/Images/EAID_F0F20BDF_C729_47f7_B6FC_25ED2C4609CA.svg +61 -0
- data/examples/xmi/Images/EAID_F32E5AFE_8605_4c77_AE69_D0D0A6E380AC.svg +76 -0
- data/examples/xmi/Images/EAID_F3F00F45_CD37_46fd_B521_D1040EB2FB16.svg +123 -0
- data/examples/xmi/Images/EAID_F46E8F19_D8F1_4a3d_B87B_B0BAB4F50F50.svg +202 -0
- data/examples/xmi/Images/EAID_F48E5F6E_2411_4635_9315_3EAA4CFA29F7.svg +351 -0
- data/examples/xmi/Images/EAID_F4C23F9E_DD74_4fed_B75D_AD3C6448BA24.svg +189 -0
- data/examples/xmi/Images/EAID_F853B3C4_B145_4ef0_B261_C3CC0475B6D2.svg +215 -0
- data/examples/xmi/Images/EAID_F8BE68CA_1F8F_47e5_9454_01A2EB7D388A.svg +124 -0
- data/examples/xmi/Images/EAID_F92A6A28_612E_468e_9E39_D7AE7D24E24D.svg +208 -0
- data/examples/xmi/Images/EAID_F995FA49_B86E_4c94_BE5E_C928FB6B87D0.svg +302 -0
- data/examples/xmi/Images/EAID_FEAE013A_A4E4_4283_A491_1FEB8D0EBA28.svg +524 -0
- data/examples/xmi/Images/EAID_FEBE5726_3751_470b_9023_8C569202E97E.svg +730 -0
- data/examples/xmi/UML_EA.DTD +6856 -0
- data/examples/xmi/UmlModel_template.xmi +23 -0
- data/examples/xmi/basic.xmi +9086 -0
- data/examples/xmi/simple.xmi +655 -0
- data/examples/xmi/simple_example.xmi +23 -0
- data/examples/xmi/test.xmi +1703 -0
- data/exe/lutaml +11 -0
- data/exe/lutaml-sysml +22 -0
- data/exe/lutaml-wsd2uml +10 -6
- data/exe/lutaml-yaml2uml +8 -6
- data/frontend/dist/app.iife.js +24 -0
- data/frontend/dist/style.css +1 -0
- data/frontend/index.html +26 -0
- data/frontend/package-lock.json +2805 -0
- data/frontend/package.json +26 -0
- data/frontend/src/App.vue +59 -0
- data/frontend/src/app.ts +8 -0
- data/frontend/src/components/AppHeader.vue +127 -0
- data/frontend/src/components/AppSidebar.vue +119 -0
- data/frontend/src/components/ClassDetails.vue +247 -0
- data/frontend/src/components/DiagramView.vue +79 -0
- data/frontend/src/components/PackageDetails.vue +92 -0
- data/frontend/src/components/PackageTreeNode.vue +64 -0
- data/frontend/src/components/SearchResults.vue +48 -0
- data/frontend/src/components/WelcomeView.vue +66 -0
- data/frontend/src/shims-vue.d.ts +5 -0
- data/frontend/src/stores/dataStore.ts +79 -0
- data/frontend/src/stores/uiStore.ts +167 -0
- data/frontend/src/styles/main.css +1566 -0
- data/frontend/src/types.ts +221 -0
- data/frontend/tests/e2e/__screenshots__/new-dark-mode.png +0 -0
- data/frontend/tests/e2e/__screenshots__/new-package-details.png +0 -0
- data/frontend/tests/e2e/__screenshots__/new-search-modal.png +0 -0
- data/frontend/tests/e2e/__screenshots__/new-sidebar-collapsed.png +0 -0
- data/frontend/tests/e2e/__screenshots__/new-welcome.png +0 -0
- data/frontend/tests/e2e/render.spec.ts +188 -0
- data/frontend/tsconfig.json +20 -0
- data/frontend/vite.config.ts +26 -0
- data/frontend/vitest.config.ts +8 -0
- data/lib/lutaml/uml/abstraction.rb +1 -0
- data/lib/lutaml/uml/action.rb +17 -0
- data/lib/lutaml/uml/activity.rb +1 -0
- data/lib/lutaml/uml/actor.rb +2 -9
- data/lib/lutaml/uml/association.rb +26 -32
- data/lib/lutaml/uml/association_generalization.rb +20 -0
- data/lib/lutaml/uml/behavior.rb +2 -1
- data/lib/lutaml/uml/cardinality.rb +12 -0
- data/lib/lutaml/uml/class.rb +43 -73
- data/lib/lutaml/uml/classifier.rb +12 -4
- data/lib/lutaml/uml/comment.rb +15 -0
- data/lib/lutaml/uml/connector.rb +7 -8
- data/lib/lutaml/uml/connector_end.rb +22 -0
- data/lib/lutaml/uml/constraint.rb +13 -1
- data/lib/lutaml/uml/data_type.rb +36 -54
- data/lib/lutaml/uml/dependency.rb +7 -8
- data/lib/lutaml/uml/diagram.rb +17 -0
- data/lib/lutaml/uml/diagram_link.rb +28 -0
- data/lib/lutaml/uml/diagram_object.rb +32 -0
- data/lib/lutaml/uml/document.rb +45 -62
- data/lib/lutaml/uml/enum.rb +12 -36
- data/lib/lutaml/uml/event.rb +1 -1
- data/lib/lutaml/uml/fidelity.rb +12 -0
- data/lib/lutaml/uml/final_state.rb +1 -0
- data/lib/lutaml/uml/fontname.rb +19 -0
- data/lib/lutaml/uml/general_attribute.rb +24 -0
- data/lib/lutaml/uml/generalization.rb +37 -0
- data/lib/lutaml/uml/group.rb +21 -0
- data/lib/lutaml/uml/has_attributes.rb +2 -2
- data/lib/lutaml/uml/has_members.rb +7 -7
- data/lib/lutaml/uml/inheritance_walker.rb +96 -0
- data/lib/lutaml/uml/instance.rb +7 -7
- data/lib/lutaml/uml/model.rb +5 -3
- data/lib/lutaml/uml/model_helpers.rb +104 -0
- data/lib/lutaml/uml/namespace.rb +12 -0
- data/lib/lutaml/uml/opaque_behavior.rb +1 -0
- data/lib/lutaml/uml/operation.rb +13 -21
- data/lib/lutaml/uml/operation_parameter.rb +19 -0
- data/lib/lutaml/uml/package.rb +24 -44
- data/lib/lutaml/uml/package_path.rb +235 -0
- data/lib/lutaml/uml/package_walker.rb +54 -0
- data/lib/lutaml/uml/port.rb +1 -0
- data/lib/lutaml/uml/primitive_type.rb +5 -4
- data/lib/lutaml/uml/property.rb +17 -17
- data/lib/lutaml/uml/pseudostate.rb +1 -0
- data/lib/lutaml/uml/qualified_name.rb +175 -0
- data/lib/lutaml/uml/realization.rb +1 -0
- data/lib/lutaml/uml/region.rb +1 -1
- data/lib/lutaml/uml/state.rb +11 -1
- data/lib/lutaml/uml/state_machine.rb +1 -1
- data/lib/lutaml/uml/tagged_value.rb +23 -0
- data/lib/lutaml/uml/top_element.rb +66 -39
- data/lib/lutaml/uml/top_element_attribute.rb +52 -26
- data/lib/lutaml/uml/transition.rb +13 -1
- data/lib/lutaml/uml/trigger.rb +7 -1
- data/lib/lutaml/uml/validation/base_validator.rb +67 -0
- data/lib/lutaml/uml/validation/document_structure_validator.rb +387 -0
- data/lib/lutaml/uml/value.rb +25 -18
- data/lib/lutaml/uml/version.rb +1 -1
- data/lib/lutaml/uml/vertex.rb +1 -0
- data/lib/lutaml/uml.rb +84 -5
- data/lib/lutaml/uml_repository/class_lookup_index.rb +39 -0
- data/lib/lutaml/uml_repository/error_handler.rb +203 -0
- data/lib/lutaml/uml_repository/exporters/base_exporter.rb +61 -0
- data/lib/lutaml/uml_repository/exporters/json_exporter.rb +343 -0
- data/lib/lutaml/uml_repository/exporters/markdown/class_page_builder.rb +187 -0
- data/lib/lutaml/uml_repository/exporters/markdown/formatting.rb +34 -0
- data/lib/lutaml/uml_repository/exporters/markdown/index_page_builder.rb +81 -0
- data/lib/lutaml/uml_repository/exporters/markdown/link_resolver.rb +40 -0
- data/lib/lutaml/uml_repository/exporters/markdown/package_page_builder.rb +107 -0
- data/lib/lutaml/uml_repository/exporters/markdown.rb +20 -0
- data/lib/lutaml/uml_repository/exporters/markdown_exporter.rb +86 -0
- data/lib/lutaml/uml_repository/index_builder.rb +210 -0
- data/lib/lutaml/uml_repository/index_builders/association_index.rb +155 -0
- data/lib/lutaml/uml_repository/index_builders/class_index.rb +113 -0
- data/lib/lutaml/uml_repository/index_builders/package_index.rb +62 -0
- data/lib/lutaml/uml_repository/index_builders.rb +13 -0
- data/lib/lutaml/uml_repository/lazy_repository.rb +237 -0
- data/lib/lutaml/uml_repository/package_exporter.rb +334 -0
- data/lib/lutaml/uml_repository/package_loader.rb +240 -0
- data/lib/lutaml/uml_repository/package_metadata.rb +77 -0
- data/lib/lutaml/uml_repository/presenters/association_presenter.rb +79 -0
- data/lib/lutaml/uml_repository/presenters/attribute_presenter.rb +94 -0
- data/lib/lutaml/uml_repository/presenters/class_presenter.rb +72 -0
- data/lib/lutaml/uml_repository/presenters/datatype_presenter.rb +97 -0
- data/lib/lutaml/uml_repository/presenters/element_presenter.rb +91 -0
- data/lib/lutaml/uml_repository/presenters/enum_presenter.rb +78 -0
- data/lib/lutaml/uml_repository/presenters/package_presenter.rb +48 -0
- data/lib/lutaml/uml_repository/presenters/presenter_factory.rb +74 -0
- data/lib/lutaml/uml_repository/queries/association_query.rb +184 -0
- data/lib/lutaml/uml_repository/queries/base_query.rb +45 -0
- data/lib/lutaml/uml_repository/queries/class_query.rb +178 -0
- data/lib/lutaml/uml_repository/queries/diagram_query.rb +108 -0
- data/lib/lutaml/uml_repository/queries/inheritance_query.rb +327 -0
- data/lib/lutaml/uml_repository/queries/package_query.rb +230 -0
- data/lib/lutaml/uml_repository/queries/search_query.rb +236 -0
- data/lib/lutaml/uml_repository/query_dsl/conditions/base_condition.rb +28 -0
- data/lib/lutaml/uml_repository/query_dsl/conditions/block_condition.rb +44 -0
- data/lib/lutaml/uml_repository/query_dsl/conditions/hash_condition.rb +82 -0
- data/lib/lutaml/uml_repository/query_dsl/conditions/package_condition.rb +89 -0
- data/lib/lutaml/uml_repository/query_dsl/order.rb +90 -0
- data/lib/lutaml/uml_repository/query_dsl/query_builder.rb +290 -0
- data/lib/lutaml/uml_repository/repository/deprecated.rb +39 -0
- data/lib/lutaml/uml_repository/repository.rb +689 -0
- data/lib/lutaml/uml_repository/repository_enhanced.rb.disabled +431 -0
- data/lib/lutaml/uml_repository/search_result.rb +86 -0
- data/lib/lutaml/uml_repository/static_site/configuration.rb +377 -0
- data/lib/lutaml/uml_repository/static_site/data_transformer.rb +135 -0
- data/lib/lutaml/uml_repository/static_site/generator.rb +120 -0
- data/lib/lutaml/uml_repository/static_site/id_generator.rb +120 -0
- data/lib/lutaml/uml_repository/static_site/models/spa_association.rb +29 -0
- data/lib/lutaml/uml_repository/static_site/models/spa_association_end.rb +25 -0
- data/lib/lutaml/uml_repository/static_site/models/spa_attribute.rb +58 -0
- data/lib/lutaml/uml_repository/static_site/models/spa_base.rb +12 -0
- data/lib/lutaml/uml_repository/static_site/models/spa_cardinality.rb +28 -0
- data/lib/lutaml/uml_repository/static_site/models/spa_class.rb +60 -0
- data/lib/lutaml/uml_repository/static_site/models/spa_diagram.rb +31 -0
- data/lib/lutaml/uml_repository/static_site/models/spa_document.rb +31 -0
- data/lib/lutaml/uml_repository/static_site/models/spa_inherited_association.rb +25 -0
- data/lib/lutaml/uml_repository/static_site/models/spa_inherited_attribute.rb +25 -0
- data/lib/lutaml/uml_repository/static_site/models/spa_literal.rb +19 -0
- data/lib/lutaml/uml_repository/static_site/models/spa_metadata.rb +39 -0
- data/lib/lutaml/uml_repository/static_site/models/spa_operation.rb +34 -0
- data/lib/lutaml/uml_repository/static_site/models/spa_package.rb +37 -0
- data/lib/lutaml/uml_repository/static_site/models/spa_package_tree_node.rb +32 -0
- data/lib/lutaml/uml_repository/static_site/models/spa_parameter.rb +21 -0
- data/lib/lutaml/uml_repository/static_site/models/spa_search_entry.rb +34 -0
- data/lib/lutaml/uml_repository/static_site/models/spa_search_index.rb +29 -0
- data/lib/lutaml/uml_repository/static_site/models/spa_statistics.rb +25 -0
- data/lib/lutaml/uml_repository/static_site/models/spa_tree_class_ref.rb +22 -0
- data/lib/lutaml/uml_repository/static_site/models.rb +48 -0
- data/lib/lutaml/uml_repository/static_site/output/multi_file_strategy.rb +69 -0
- data/lib/lutaml/uml_repository/static_site/output/strategy.rb +36 -0
- data/lib/lutaml/uml_repository/static_site/output/vue_inlined_strategy.rb +113 -0
- data/lib/lutaml/uml_repository/static_site/output.rb +15 -0
- data/lib/lutaml/uml_repository/static_site/search_index_builder.rb +216 -0
- data/lib/lutaml/uml_repository/static_site/serializers/association_serializer.rb +70 -0
- data/lib/lutaml/uml_repository/static_site/serializers/attribute_serializer.rb +24 -0
- data/lib/lutaml/uml_repository/static_site/serializers/base.rb +66 -0
- data/lib/lutaml/uml_repository/static_site/serializers/class_serializer.rb +97 -0
- data/lib/lutaml/uml_repository/static_site/serializers/diagram_serializer.rb +59 -0
- data/lib/lutaml/uml_repository/static_site/serializers/inheritance_resolver.rb +151 -0
- data/lib/lutaml/uml_repository/static_site/serializers/metadata_builder.rb +102 -0
- data/lib/lutaml/uml_repository/static_site/serializers/operation_serializer.rb +52 -0
- data/lib/lutaml/uml_repository/static_site/serializers/package_serializer.rb +55 -0
- data/lib/lutaml/uml_repository/static_site/serializers/package_tree_builder.rb +77 -0
- data/lib/lutaml/uml_repository/static_site/serializers.rb +30 -0
- data/lib/lutaml/uml_repository/static_site.rb +92 -0
- data/lib/lutaml/uml_repository/statistics_calculator.rb +342 -0
- data/lib/lutaml/uml_repository/validators/repository_validator.rb +402 -0
- data/lib/lutaml/uml_repository.rb +99 -0
- data/lutaml-uml.gemspec +20 -20
- data/templates/static_site/assets/images/lutaml-full.svg +1 -0
- data/templates/static_site/assets/images/lutaml-icon.svg +1 -0
- data/templates/static_site/assets/scripts/app.js +45 -0
- data/templates/static_site/assets/scripts/core/state.js +446 -0
- data/templates/static_site/assets/scripts/core/utils.js +133 -0
- data/templates/static_site/assets/scripts/ui/details.js +74 -0
- data/templates/static_site/assets/scripts/ui/diagrams.js +345 -0
- data/templates/static_site/assets/scripts/ui/search.js +187 -0
- data/templates/static_site/assets/scripts/ui/sidebar.js +123 -0
- data/templates/static_site/assets/styles/00-variables.css +144 -0
- data/templates/static_site/assets/styles/01-reset.css +69 -0
- data/templates/static_site/assets/styles/02-base.css +144 -0
- data/templates/static_site/assets/styles/03-layout.css +121 -0
- data/templates/static_site/assets/styles/04-components.css +905 -0
- data/templates/static_site/assets/styles/05-utilities.css +23 -0
- data/templates/static_site/assets/styles/06-diagrams.css +74 -0
- data/templates/static_site/components/class_details.liquid +328 -0
- data/templates/static_site/components/content.liquid +481 -0
- data/templates/static_site/components/diagram_list.liquid +52 -0
- data/templates/static_site/components/diagram_viewer.liquid +71 -0
- data/templates/static_site/components/header.liquid +114 -0
- data/templates/static_site/components/package_details.liquid +119 -0
- data/templates/static_site/components/sidebar.liquid +76 -0
- data/templates/static_site/components/tree_node.liquid +81 -0
- data/templates/static_site/multi_file.liquid +49 -0
- data/templates/static_site/single_file.liquid +57 -0
- metadata +444 -224
- data/.github/workflows/macos.yml +0 -38
- data/.github/workflows/ubuntu.yml +0 -40
- data/.github/workflows/windows.yml +0 -51
- data/.travis.yml +0 -6
- data/CODE_OF_CONDUCT.md +0 -74
- data/LUTAML.adoc +0 -372
- data/bin/console +0 -15
- data/bin/folder_yaml2lutaml.sh +0 -6
- data/bin/plantuml2lutaml +0 -59
- data/bin/setup +0 -8
- data/bin/yaml2lutaml +0 -144
- data/lib/lutaml/layout/engine.rb +0 -15
- data/lib/lutaml/layout/graph_viz_engine.rb +0 -19
- data/lib/lutaml/uml/constructor_end.rb +0 -16
- data/lib/lutaml/uml/formatter/base.rb +0 -67
- data/lib/lutaml/uml/formatter/graphviz.rb +0 -334
- data/lib/lutaml/uml/formatter.rb +0 -21
- data/lib/lutaml/uml/node/base.rb +0 -21
- data/lib/lutaml/uml/node/class_node.rb +0 -57
- data/lib/lutaml/uml/node/class_relationship.rb +0 -14
- data/lib/lutaml/uml/node/document.rb +0 -18
- data/lib/lutaml/uml/node/field.rb +0 -34
- 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.rb +0 -29
- data/lib/lutaml/uml/node/method_argument.rb +0 -16
- data/lib/lutaml/uml/node/relationship.rb +0 -28
- data/lib/lutaml/uml/parsers/attribute.rb +0 -70
- data/lib/lutaml/uml/parsers/dsl.rb +0 -413
- data/lib/lutaml/uml/parsers/dsl_preprocessor.rb +0 -59
- data/lib/lutaml/uml/parsers/dsl_transform.rb +0 -27
- data/lib/lutaml/uml/parsers/yaml.rb +0 -46
- data/lib/lutaml/uml/serializers/association.rb +0 -58
- data/lib/lutaml/uml/serializers/base.rb +0 -16
- data/lib/lutaml/uml/serializers/class.rb +0 -29
- data/lib/lutaml/uml/serializers/top_element_attribute.rb +0 -14
- data/lib/lutaml/uml/serializers/yaml_view.rb +0 -18
- data/spec/fixtures/datamodel/models/AddressClassProfile.yml +0 -90
- data/spec/fixtures/datamodel/models/AddressComponentProfile.yml +0 -63
- data/spec/fixtures/datamodel/models/AddressComponentSpecification.yml +0 -15
- data/spec/fixtures/datamodel/models/AddressProfile.yml +0 -36
- data/spec/fixtures/datamodel/models/AttributeProfile.yml +0 -32
- data/spec/fixtures/datamodel/models/InterchangeAddressClassProfile.yml +0 -79
- data/spec/fixtures/datamodel/models/Localization copy.yml +0 -23
- data/spec/fixtures/datamodel/models/Localization.yml +0 -23
- data/spec/fixtures/datamodel/models/ProfileCompliantAddress.yml +0 -36
- data/spec/fixtures/datamodel/models/ProfileCompliantAddressComponent.yml +0 -15
- data/spec/fixtures/datamodel/models/Signature.yml +0 -20
- data/spec/fixtures/datamodel/models/SignatureBlankDefinition.yml +0 -20
- data/spec/fixtures/datamodel/models/TextDirectionCode copy.yml +0 -16
- data/spec/fixtures/datamodel/models/TextDirectionCode.yml +0 -16
- data/spec/fixtures/datamodel/models/Validity.yml +0 -14
- data/spec/fixtures/datamodel/models/iso19160-1/Address.yml +0 -22
- data/spec/fixtures/datamodel/models/iso19160-1/AddressComponent.yml +0 -2
- data/spec/fixtures/datamodel/style.uml.inc +0 -37
- data/spec/fixtures/datamodel/views/AddressClassProfile.yml +0 -12
- data/spec/fixtures/datamodel/views/AddressProfile.yml +0 -3
- data/spec/fixtures/datamodel/views/CommonModels.yml +0 -9
- data/spec/fixtures/datamodel/views/TopDown.yml +0 -62
- data/spec/fixtures/dsl/broken_diagram.lutaml +0 -34
- data/spec/fixtures/dsl/diagram.lutaml +0 -3
- data/spec/fixtures/dsl/diagram_attributes.lutaml +0 -6
- data/spec/fixtures/dsl/diagram_blank_definion.lutaml +0 -6
- data/spec/fixtures/dsl/diagram_blank_entities.lutaml +0 -8
- data/spec/fixtures/dsl/diagram_class_assocation.lutaml +0 -29
- data/spec/fixtures/dsl/diagram_class_fields.lutaml +0 -25
- data/spec/fixtures/dsl/diagram_commented_includes.lutaml +0 -5
- data/spec/fixtures/dsl/diagram_comments.lutaml +0 -28
- data/spec/fixtures/dsl/diagram_concept_model.lutaml +0 -132
- data/spec/fixtures/dsl/diagram_data_types.lutaml +0 -44
- data/spec/fixtures/dsl/diagram_definitions.lutaml +0 -25
- data/spec/fixtures/dsl/diagram_includes.lutaml +0 -6
- data/spec/fixtures/dsl/diagram_multiply_classes.lutaml +0 -7
- data/spec/fixtures/dsl/diagram_non_existing_include.lutaml +0 -6
- data/spec/fixtures/dsl/shared.lutaml +0 -3
- data/spec/fixtures/dsl/shared1.lutaml +0 -4
- data/spec/fixtures/generated_dot/AddressClassProfile.dot +0 -170
- data/spec/fixtures/generated_dot/AddressProfile.dot +0 -34
- data/spec/lutaml/layout/graph_viz_engine_spec.rb +0 -31
- data/spec/lutaml/uml/formatter/graphviz_spec.rb +0 -41
- data/spec/lutaml/uml/parsers/dsl_spec.rb +0 -345
- data/spec/lutaml/uml/parsers/yaml_spec.rb +0 -18
- data/spec/lutaml/uml/serializers/yaml_view_spec.rb +0 -20
- data/spec/lutaml/uml_spec.rb +0 -7
- data/spec/spec_helper.rb +0 -25
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: aacf10e874c4c7f4231804cfd3d9893f396cc822f8fc9fa7e8659a65f6c6c98b
|
|
4
|
+
data.tar.gz: 397bb118c072767eb92019fef01b910b2347bbeb4920d9b42c140cb863d78e5e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2504a3f5e075518691fa4fb31a2f97b7ba85f9ef91030b72b81257b6895af6fa53f33ebf12c0286c5dfa6c6b54a2ffa792f20dfc047c722e7b867068eb3105a7
|
|
7
|
+
data.tar.gz: 56009d73018c61a5eac9d168dba558fe9617dc6f854e364ef5166f6b59e2b55a407089e5bef37d82571efa5487ffef94b231665f2bf9dc98f1ee9745f02065af
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: release
|
|
2
|
+
|
|
3
|
+
permissions:
|
|
4
|
+
contents: write
|
|
5
|
+
packages: write
|
|
6
|
+
id-token: write
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
workflow_dispatch:
|
|
10
|
+
inputs:
|
|
11
|
+
next_version:
|
|
12
|
+
description: |
|
|
13
|
+
Next release version. Possible values: x.y.z, major, minor, patch or pre|rc|etc
|
|
14
|
+
required: true
|
|
15
|
+
default: "skip"
|
|
16
|
+
acknowledge_breaking_in_patch:
|
|
17
|
+
description: "Skip the release-breaking-check guard"
|
|
18
|
+
required: false
|
|
19
|
+
default: "true"
|
|
20
|
+
repository_dispatch:
|
|
21
|
+
types: [do-release]
|
|
22
|
+
|
|
23
|
+
jobs:
|
|
24
|
+
release:
|
|
25
|
+
uses: metanorma/ci/.github/workflows/rubygems-release.yml@main
|
|
26
|
+
with:
|
|
27
|
+
next_version: ${{ github.event.inputs.next_version }}
|
|
28
|
+
acknowledge_breaking_in_patch: ${{ github.event.inputs.acknowledge_breaking_in_patch == 'true' }}
|
|
29
|
+
gated: false
|
|
30
|
+
secrets:
|
|
31
|
+
rubygems-api-key: ${{ secrets.LUTAML_CI_RUBYGEMS_API_KEY }}
|
|
32
|
+
pat_token: ${{ secrets.GITHUB_TOKEN }}
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
data/CLAUDE.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# CLAUDE.md — Lutaml::Uml Gem
|
|
2
|
+
|
|
3
|
+
## Project Overview
|
|
4
|
+
`lutaml-uml` provides UML domain models, a repository pattern for querying/presenting UML documents, format converters, EA diagram rendering, and a Vue.js SPA static site generator. It is the core UML library used by the `lutaml` gem.
|
|
5
|
+
|
|
6
|
+
## Testing Constraints
|
|
7
|
+
|
|
8
|
+
**CRITICAL: Do NOT run the full test suite at once.** It will crash due to memory. Run targeted subsets:
|
|
9
|
+
- `bundle exec rspec spec/lutaml/uml/` — UML model specs
|
|
10
|
+
- `bundle exec rspec spec/lutaml/uml_repository/` — Repository, presenters, queries, SPA specs
|
|
11
|
+
- Combine at most 2-3 suites at a time for targeted verification.
|
|
12
|
+
|
|
13
|
+
## Code Quality Rules
|
|
14
|
+
- Never use `send` (breaks encapsulation). Use `public_send` only when dynamic dispatch is truly necessary.
|
|
15
|
+
- Never use `respond_to?` (poor typing). Use `is_a?` for type checks.
|
|
16
|
+
- Extract god methods into focused helpers.
|
|
17
|
+
- Keep files under ~300 lines. Extract into modules/classes when growing.
|
|
18
|
+
- DRY: consolidate duplicated patterns.
|
|
19
|
+
- Never commit TODO tracking files to git.
|
|
20
|
+
|
|
21
|
+
## Spec Require Rules
|
|
22
|
+
|
|
23
|
+
In this repo, specs should use `require` since the gem's lib is on the load path via bundler:
|
|
24
|
+
```ruby
|
|
25
|
+
require "spec_helper"
|
|
26
|
+
require "lutaml/uml"
|
|
27
|
+
require "lutaml/uml_repository"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
For code in the **lutaml** gem (xmi, formatter), use `require` — it's a dev dependency:
|
|
31
|
+
```ruby
|
|
32
|
+
require "lutaml/formatter"
|
|
33
|
+
require "lutaml/xmi"
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Architecture
|
|
37
|
+
- `lib/lutaml/uml/` — UML domain models (Class, Association, Package, DataType, Enum, etc.)
|
|
38
|
+
- `lib/lutaml/uml_repository/` — Repository pattern (queries, presenters, exporters, SPA, web UI)
|
|
39
|
+
- `lib/lutaml/converter/` — Format converters (XMI→UML, DSL→UML)
|
|
40
|
+
- `lib/lutaml/ea/` — EA diagram SVG rendering
|
|
41
|
+
- `frontend/` — Vue 3 SPA frontend (pre-built dist checked in)
|
|
42
|
+
- `templates/` — Liquid templates for web UI
|
|
43
|
+
- `config/` — Default SPA configuration
|
|
44
|
+
|
|
45
|
+
## SPA Static Site Generator
|
|
46
|
+
The SPA generator uses typed models + strategy pattern:
|
|
47
|
+
- `DataTransformer` builds a `SpaDocument` from a repository
|
|
48
|
+
- `Output::Strategy` subclasses render HTML (single-file or multi-file)
|
|
49
|
+
- `Output::VueInlinedStrategy` embeds Vue IIFE + JSON data in single HTML
|
|
50
|
+
- Frontend built with Vue 3 + Vite + TypeScript in `frontend/`
|
|
51
|
+
|
|
52
|
+
## CI Notes
|
|
53
|
+
- Ignore Ruby 3.4 ubuntu failures (performance-related, not code issues)
|
|
54
|
+
- Ignore macOS job slowness (GitHub Actions is slow for macOS)
|
data/Gemfile
CHANGED
|
@@ -2,7 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
source "https://rubygems.org"
|
|
4
4
|
|
|
5
|
-
# Specify your gem's dependencies in lutaml-uml.gemspec
|
|
6
5
|
gemspec
|
|
7
6
|
|
|
8
|
-
gem "
|
|
7
|
+
gem "lutaml-model", github: "lutaml/lutaml-model", branch: "main"
|
|
8
|
+
gem "rack-test"
|
|
9
|
+
gem "rake", "~> 13.0"
|
|
10
|
+
gem "rspec", "~> 3.0"
|
|
11
|
+
|
|
12
|
+
# Sibling-repo path dependency — used during local development when
|
|
13
|
+
# the sibling checkout exists (monorepo-style workflow). In CI and for
|
|
14
|
+
# gem install, fall back to the published rubygems version.
|
|
15
|
+
ea_path = File.expand_path("../ea", __dir__)
|
|
16
|
+
if File.directory?(ea_path)
|
|
17
|
+
gem "ea", path: ea_path
|
|
18
|
+
else
|
|
19
|
+
gem "ea"
|
|
20
|
+
end
|
data/README.adoc
CHANGED
|
@@ -1,44 +1,33 @@
|
|
|
1
|
-
|
|
1
|
+
= lutaml-uml
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
UML domain models, repository pattern, format converters, and SPA generator for LutaML.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
image:https://github.com/lutaml/lutaml-uml/actions/workflows/ubuntu.yml/badge.svg["ubuntu", link="https://github.com/lutaml/lutaml-uml/actions/workflows/ubuntu.yml"]
|
|
7
|
-
image:https://github.com/lutaml/lutaml-uml/actions/workflows/windows.yml/badge.svg["windows", link="https://github.com/lutaml/lutaml-uml/actions/workflows/windows.yml"]
|
|
5
|
+
== Overview
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
This gem provides:
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
* `Lutaml::Uml` — UML domain model classes (Class, Association, Package, DataType, Enum, etc.)
|
|
10
|
+
* `Lutaml::UmlRepository` — Repository pattern for querying and presenting UML documents
|
|
11
|
+
* `Lutaml::Converter` — Format converters (XMI to UML, DSL to UML)
|
|
12
|
+
* `Lutaml::Ea` — Enterprise Architect diagram SVG rendering
|
|
13
|
+
* SPA static site generator with Vue.js frontend
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
== Installation
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
Add to your Gemfile:
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
[source,ruby]
|
|
20
|
+
gem "lutaml-uml"
|
|
18
21
|
|
|
19
|
-
|
|
22
|
+
== Usage
|
|
20
23
|
|
|
21
|
-
|
|
24
|
+
[source,ruby]
|
|
25
|
+
require "lutaml/uml"
|
|
22
26
|
|
|
23
|
-
|
|
27
|
+
== Architecture
|
|
24
28
|
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
## Development
|
|
32
|
-
|
|
33
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
|
34
|
-
|
|
35
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
|
36
|
-
|
|
37
|
-
## Contributing
|
|
38
|
-
|
|
39
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/lutaml-uml. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/lutaml-uml/blob/master/CODE_OF_CONDUCT.md).
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
## Code of Conduct
|
|
43
|
-
|
|
44
|
-
Everyone interacting in the Lutaml::Uml project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/lutaml-uml/blob/master/CODE_OF_CONDUCT.md).
|
|
29
|
+
* `lib/lutaml/uml/` — UML domain models
|
|
30
|
+
* `lib/lutaml/uml_repository/` — Repository, queries, presenters, exporters, SPA
|
|
31
|
+
* `lib/lutaml/converter/` — XMI→UML and DSL→UML converters
|
|
32
|
+
* `lib/lutaml/ea/` — EA diagram SVG rendering
|
|
33
|
+
* `frontend/` — Vue 3 SPA frontend (pre-built dist included)
|
data/Rakefile
CHANGED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# 01 - Remove Dead `RepositoryEnhanced` From lutaml-uml
|
|
2
|
+
|
|
3
|
+
## Status: ✅ DONE (2026-06-27)
|
|
4
|
+
|
|
5
|
+
## What was done
|
|
6
|
+
|
|
7
|
+
1. Removed `autoload :RepositoryEnhanced, ...` from
|
|
8
|
+
`lib/lutaml/uml_repository.rb` (line 24).
|
|
9
|
+
2. Renamed the source file to
|
|
10
|
+
`lib/lutaml/uml_repository/repository_enhanced.rb.disabled` — preserves the
|
|
11
|
+
source per the "never delete source" rule while preventing autoload.
|
|
12
|
+
|
|
13
|
+
## Verification
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
grep -rn 'RepositoryEnhanced' lib/ spec/
|
|
17
|
+
# → only the .disabled file (not loadable as Ruby)
|
|
18
|
+
bundle exec rspec # → still green
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Why disabled, not deleted
|
|
22
|
+
|
|
23
|
+
The class body still references `ModelTransformations::*` constants (now in
|
|
24
|
+
`ea`). If re-enabled, callers would trigger `NameError` unless `ea` is also
|
|
25
|
+
loaded. Keeping it as `.disabled` lets a future caller (if any legitimate use
|
|
26
|
+
emerges) explicitly opt in by renaming back, after restoring the references.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# 02 - Drop `Fontname` Autoload (Dead Code)
|
|
2
|
+
|
|
3
|
+
## Status: ✅ DONE (2026-06-27)
|
|
4
|
+
|
|
5
|
+
## What was done
|
|
6
|
+
|
|
7
|
+
1. Removed `autoload :Fontname, "lutaml/uml/fontname"` from
|
|
8
|
+
`lib/lutaml/uml.rb`.
|
|
9
|
+
2. Added deprecation header to `lib/lutaml/uml/fontname.rb`.
|
|
10
|
+
3. **Kept** `autoload :Group` — `Document` uses it
|
|
11
|
+
(`attribute :groups, Group, collection: true`). The original TODO.namespace
|
|
12
|
+
audit was incorrect.
|
|
13
|
+
|
|
14
|
+
## Source file (kept, not deleted)
|
|
15
|
+
|
|
16
|
+
- `lib/lutaml/uml/fontname.rb` — deprecated header added; file retained per
|
|
17
|
+
never-delete-source rule.
|
|
18
|
+
|
|
19
|
+
## Verification
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
grep -n 'Fontname' lib/lutaml/uml.rb # → no autoload
|
|
23
|
+
grep -n 'Group' lib/lutaml/uml.rb # → autoload still present (used by Document)
|
|
24
|
+
bundle exec rspec # → 754 examples, 0 failures, 103 pending
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Lesson
|
|
28
|
+
|
|
29
|
+
The audit "Group is unused" was based on grepping for `:Group,` as a type.
|
|
30
|
+
The actual usage is `Group, collection: true` (no leading colon) in
|
|
31
|
+
`lib/lutaml/uml/document.rb:11`. Future dead-code audits must check both
|
|
32
|
+
`:Symbol` and bare constant forms.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# 03 - Add Missing Behavioral Specs
|
|
2
|
+
|
|
3
|
+
## Status: NOT YET APPLIED
|
|
4
|
+
|
|
5
|
+
## Problem
|
|
6
|
+
|
|
7
|
+
Critical behavioral coverage gaps in `lutaml-uml`:
|
|
8
|
+
|
|
9
|
+
### High-priority gaps
|
|
10
|
+
1. `spec/lutaml/uml/uml_class_spec.rb` — only 57 lines, tests YAML
|
|
11
|
+
serialization only. Missing: association management, attribute handling,
|
|
12
|
+
generalization, stereotypes, constraints.
|
|
13
|
+
2. `spec/lutaml/uml_repository/static_site/serializers/inheritance_resolver_spec.rb`
|
|
14
|
+
— only tests "returns empty for no generalization." Missing: actual
|
|
15
|
+
multi-level inheritance attribute/association flow.
|
|
16
|
+
3. No spec for circular inheritance detection with actual circular graphs.
|
|
17
|
+
4. `spec/lutaml/uml_repository/validators/repository_validator_spec.rb` —
|
|
18
|
+
private method tests only assert `result.is_a?(Array)`, never assert
|
|
19
|
+
specific errors found.
|
|
20
|
+
5. No spec for `Repository#from_file_cached` cache invalidation behavior.
|
|
21
|
+
|
|
22
|
+
### Edge cases missing
|
|
23
|
+
- Self-referential associations
|
|
24
|
+
- Diamond inheritance
|
|
25
|
+
- Special regex characters in search
|
|
26
|
+
|
|
27
|
+
### Silent skip patterns to fix
|
|
28
|
+
These patterns silently pass tests when their precondition fails. They should
|
|
29
|
+
either use `skip` with a reason, or guarantee the test data:
|
|
30
|
+
|
|
31
|
+
- `spec/lutaml/uml_repository/queries/class_query_spec.rb` — `next unless`
|
|
32
|
+
silently passes ~9 tests
|
|
33
|
+
- `spec/lutaml/uml_repository/queries/inheritance_query_spec.rb` — `next unless`
|
|
34
|
+
silently passes ~4 tests
|
|
35
|
+
- `spec/lutaml/uml_repository/parsing/full_parsing_spec.rb` — `next if ...`
|
|
36
|
+
silently passes ~7 tests
|
|
37
|
+
|
|
38
|
+
## Source
|
|
39
|
+
|
|
40
|
+
Migrated from `TODO.refactor/12-add-missing-behavioral-specs.md`.
|
|
41
|
+
|
|
42
|
+
## Fix
|
|
43
|
+
|
|
44
|
+
1. Expand `uml_class_spec.rb` to cover the metamodel API surface
|
|
45
|
+
(associations, attributes, generalization, stereotypes).
|
|
46
|
+
2. Replace `next unless` patterns with either:
|
|
47
|
+
- `skip "reason"` if the data is sometimes unavailable, OR
|
|
48
|
+
- A guaranteed fixture (programmatic document via `create_simple_test_document`)
|
|
49
|
+
3. Add circular inheritance fixture (programmatic).
|
|
50
|
+
4. Add cache invalidation spec for `from_file_cached` using `sleep` + `touch`
|
|
51
|
+
to control mtimes.
|
|
52
|
+
5. Assert specific validator errors, not just result types.
|
|
53
|
+
|
|
54
|
+
## Out of scope (deferred)
|
|
55
|
+
|
|
56
|
+
Regenerating `.lur` fixtures via the `ea` gem — those are tracked separately.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# 04 - Finish Replacing Double-Based Specs
|
|
2
|
+
|
|
3
|
+
## Status: LOW PRIORITY — residue only
|
|
4
|
+
|
|
5
|
+
## Problem
|
|
6
|
+
|
|
7
|
+
The bulk of the double-elimination work is done (see
|
|
8
|
+
`TODO.refactor/11-rewrite-double-based-specs.md` history). What remains:
|
|
9
|
+
|
|
10
|
+
- `spec/lutaml/uml_repository/presenters/diagram_presenter_spec.rb` lines 7-27:
|
|
11
|
+
top-level repository/diagram doubles shared by many tests. Complex to
|
|
12
|
+
replace without rewriting the SVG-rendering assertions.
|
|
13
|
+
- 18 total `double()` calls remain in lutaml-uml specs.
|
|
14
|
+
|
|
15
|
+
These don't cause failures and aren't blocking.
|
|
16
|
+
|
|
17
|
+
## Source
|
|
18
|
+
|
|
19
|
+
Migrated from `TODO.refactor/11-rewrite-double-based-specs.md`.
|
|
20
|
+
|
|
21
|
+
## Fix
|
|
22
|
+
|
|
23
|
+
For each remaining double:
|
|
24
|
+
1. If the doubled interface is a real UML model — instantiate the real model
|
|
25
|
+
with the needed attributes.
|
|
26
|
+
2. If the doubled interface is a struct/DTO — replace with
|
|
27
|
+
`Struct.new(:attr1, :attr2).new(val1, val2)`.
|
|
28
|
+
3. Test behavior, not interactions.
|
|
29
|
+
|
|
30
|
+
## Verification
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
grep -rn 'double(' spec/ | wc -l # target: 0
|
|
34
|
+
```
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# 05 - Remove Dead Autoload Modules in UmlRepository
|
|
2
|
+
|
|
3
|
+
## Status: DONE (2026-06-27)
|
|
4
|
+
|
|
5
|
+
## Problem
|
|
6
|
+
`lib/lutaml/uml_repository.rb` had two pieces of dead code:
|
|
7
|
+
|
|
8
|
+
1. `module UmlRepositoryComponents` — autoloaded `IndexBuilder`,
|
|
9
|
+
`StatisticsCalculator`, `PackageExporter`, `PackageLoader` from the
|
|
10
|
+
same paths as the top-level autoloads already declared above it.
|
|
11
|
+
Pure DRY violation: no caller ever referenced
|
|
12
|
+
`Lutaml::UmlRepository::UmlRepositoryComponents::*`. The classes are
|
|
13
|
+
accessed via the top-level `Lutaml::UmlRepository::IndexBuilder` etc.
|
|
14
|
+
|
|
15
|
+
2. `module WebUi` with `autoload :App,
|
|
16
|
+
"lutaml/uml_repository/web_ui/app"` — the target file does not
|
|
17
|
+
exist. Any attempt to access `Lutaml::UmlRepository::WebUi::App`
|
|
18
|
+
would raise `LoadError` at runtime. No spec or lib code references
|
|
19
|
+
this module.
|
|
20
|
+
|
|
21
|
+
## Fix
|
|
22
|
+
Deleted both module blocks from `lib/lutaml/uml_repository.rb`. No
|
|
23
|
+
behavior change (the autoloads were never triggered). The real
|
|
24
|
+
IndexBuilder/StatisticsCalculator/PackageExporter/PackageLoader
|
|
25
|
+
autoloads at the top of the file are unchanged.
|
|
26
|
+
|
|
27
|
+
## Verification
|
|
28
|
+
- `bundle exec rspec` in lutaml-uml: 754 examples, 0 failures, 103
|
|
29
|
+
pending (unchanged from baseline)
|
|
30
|
+
- `grep -rn UmlRepositoryComponents lib/ spec/` → no results
|
|
31
|
+
- `grep -rn "WebUi\b" lib/ spec/` → no results
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# 06 - Clean Up Phantom Requires and Unused gemspec Dependencies
|
|
2
|
+
|
|
3
|
+
## Status: DONE (2026-06-29)
|
|
4
|
+
|
|
5
|
+
## Problem
|
|
6
|
+
`lib/lutaml/uml_repository.rb` declared two top-level requires for gems
|
|
7
|
+
that no code in `lib/` actually uses:
|
|
8
|
+
|
|
9
|
+
```ruby
|
|
10
|
+
require "liquid" # no Liquid:: namespace reference anywhere in lib/
|
|
11
|
+
require "lutaml/path" # no Lutaml::Path usage anywhere in lib/
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The gemspec mirrored this with two corresponding runtime dependencies:
|
|
15
|
+
|
|
16
|
+
```ruby
|
|
17
|
+
spec.add_dependency "liquid"
|
|
18
|
+
spec.add_dependency "lutaml-path"
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Both were residue from a Liquid-based rendering pipeline that was
|
|
22
|
+
replaced by the Vue IIFE strategy (`Output::VueInlinedStrategy`). The
|
|
23
|
+
`templates/static_site/*.liquid` files themselves remain on disk but
|
|
24
|
+
nothing loads them at runtime — see [[07-unused-liquid-templates]].
|
|
25
|
+
|
|
26
|
+
## Fix
|
|
27
|
+
- Removed `require "liquid"` and `require "lutaml/path"` from the top
|
|
28
|
+
of `lib/lutaml/uml_repository.rb`.
|
|
29
|
+
- Removed `spec.add_dependency "liquid"` and
|
|
30
|
+
`spec.add_dependency "lutaml-path"` from `lutaml-uml.gemspec`.
|
|
31
|
+
|
|
32
|
+
No behavior change. Both gems were load-time phantom requires with no
|
|
33
|
+
runtime callers.
|
|
34
|
+
|
|
35
|
+
## Verification
|
|
36
|
+
- `find lib -name '*.rb' -print0 | xargs -0 grep -l 'Liquid::'` → no results
|
|
37
|
+
- `find lib -name '*.rb' -print0 | xargs -0 grep -l 'Lutaml::Path'` → no results
|
|
38
|
+
- `bundle exec rspec` in lutaml-uml: 754 examples, 0 failures, 103 pending
|
|
39
|
+
(unchanged from baseline)
|
|
40
|
+
|
|
41
|
+
## Lesson
|
|
42
|
+
A `require` at the top of a file is a load-time dependency commitment.
|
|
43
|
+
When the code that used the required library is removed or replaced,
|
|
44
|
+
the require statement is often left behind, silently pulling in gems
|
|
45
|
+
that no caller actually needs. Audit requires the same way you audit
|
|
46
|
+
method calls.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# 07 - Unused Liquid Templates (Flag, Don't Delete)
|
|
2
|
+
|
|
3
|
+
## Status: FLAGGED — preserved per never-delete-source rule
|
|
4
|
+
|
|
5
|
+
## What
|
|
6
|
+
`templates/static_site/` contains 248K of `.liquid` template files:
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
templates/static_site/multi_file.liquid
|
|
10
|
+
templates/static_site/single_file.liquid
|
|
11
|
+
templates/static_site/components/{tree_node,diagram_viewer,diagram_list,
|
|
12
|
+
content,header,package_details,sidebar,class_details,...}.liquid
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
These were the rendering templates for a Liquid-based static site
|
|
16
|
+
generator. That pipeline was replaced by the Vue 3 IIFE strategy
|
|
17
|
+
(`lib/lutaml/uml_repository/static_site/output/vue_inlined_strategy.rb`).
|
|
18
|
+
The current generator (`static_site/generator.rb`) does not load any
|
|
19
|
+
`.liquid` files and does not reference `Liquid::` anywhere.
|
|
20
|
+
|
|
21
|
+
`grep -rln 'static_site.*liquid\|\.liquid' lib/` → no results.
|
|
22
|
+
|
|
23
|
+
## Why not delete
|
|
24
|
+
Per the global rule "NEVER DELETE source files. ANY source file." The
|
|
25
|
+
templates were authored source; their derived output (the Vue strategy)
|
|
26
|
+
existing does not make them disposable. They may be repurposed for a
|
|
27
|
+
future Liquid-rendered export path, kept as reference for templating
|
|
28
|
+
patterns, or moved to a separate gem.
|
|
29
|
+
|
|
30
|
+
## Suggested resolution (user decision required)
|
|
31
|
+
Three options, none taken yet:
|
|
32
|
+
|
|
33
|
+
1. **Keep in place** — accept that `templates/` ships unused source.
|
|
34
|
+
Zero code change; just document.
|
|
35
|
+
2. **Exclude from gem package** — add to gemspec's `spec.files` reject
|
|
36
|
+
list. Source files stay in git but `gem install` no longer ships
|
|
37
|
+
them. Minimal blast radius.
|
|
38
|
+
3. **Move to `archive/templates/`** — preserves source on disk, removes
|
|
39
|
+
from primary tree. Requires a small `spec.files` adjustment.
|
|
40
|
+
|
|
41
|
+
Until the user picks one, leave the files untouched and the gemspec
|
|
42
|
+
unchanged.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# 08 - Broken / Misplaced Executables (Flag, Don't Delete)
|
|
2
|
+
|
|
3
|
+
## Status: FLAGGED — gemspec ships broken scripts
|
|
4
|
+
|
|
5
|
+
## What
|
|
6
|
+
The gemspec declares `bindir = "exe"` and
|
|
7
|
+
`spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }`,
|
|
8
|
+
which picks up all four files in `exe/`. Two are broken; two are
|
|
9
|
+
unrelated to lutaml-uml's actual purpose.
|
|
10
|
+
|
|
11
|
+
| File | Status | Issue |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| `exe/lutaml` | BROKEN | `require "lutaml"` — no `lib/lutaml.rb` exists. `require "lutaml/cli"` — `lib/lutaml/cli.rb` was removed in commit `e7b5e68` (the EA-extraction refactor) because it was incorrectly classified as EA-specific. |
|
|
14
|
+
| `exe/lutaml-sysml` | BROKEN | `require "reeper"` (long-orphaned gem), plus same `lutaml/cli` issue. |
|
|
15
|
+
| `exe/lutaml-wsd2uml` | UNRELATED | Standalone PlantUML→LutaML converter. No `lutaml/uml` or `lutaml/uml_repository` deps. Belongs in a separate `lutaml-wsd2uml` gem or in `lutaml-lml`. |
|
|
16
|
+
| `exe/lutaml-yaml2uml` | UNRELATED | Standalone YAML→LutaML converter. Same — no lib deps, wrong gem. |
|
|
17
|
+
|
|
18
|
+
## Why this matters
|
|
19
|
+
`gem install lutaml-uml` currently installs four commands onto the
|
|
20
|
+
user's PATH. Two of them crash immediately on invocation. The other
|
|
21
|
+
two work but are misleading — they suggest the gem does PlantUML and
|
|
22
|
+
YAML conversion, which it does not.
|
|
23
|
+
|
|
24
|
+
## Root cause
|
|
25
|
+
Commit `e7b5e68` (refactor: remove EA-specific code from lutaml-uml)
|
|
26
|
+
removed `lib/lutaml/cli.rb` along with `lib/lutaml/cli/` because the
|
|
27
|
+
CLI was thought to be EA-flavored. In fact the CLI was a UML/Repository
|
|
28
|
+
CLI (`thor`-based, drove `Lutaml::UmlRepository::Repository`). It should
|
|
29
|
+
have stayed in `lutaml-uml`, or been moved to `lutaml-lml`. The exes
|
|
30
|
+
that called it were left in place, leaving the gem half-gutted.
|
|
31
|
+
|
|
32
|
+
## Why not delete
|
|
33
|
+
- **Never-delete-source rule** — these exes are source files; deleting
|
|
34
|
+
them is destructive and irreversible.
|
|
35
|
+
- **Scope uncertainty** — the right fix depends on user intent:
|
|
36
|
+
- Restore the CLI to lutaml-uml (revert part of e7b5e68)?
|
|
37
|
+
- Move the CLI to lutaml-lml?
|
|
38
|
+
- Replace with a new minimal `lutaml-uml` CLI?
|
|
39
|
+
- Just remove the broken exes from the gemspec (keep files in git)?
|
|
40
|
+
|
|
41
|
+
## Suggested resolution (user decision required)
|
|
42
|
+
Minimal safe option until user picks a path:
|
|
43
|
+
|
|
44
|
+
1. Update gemspec to NOT ship the broken/unrelated executables:
|
|
45
|
+
```ruby
|
|
46
|
+
spec.executables = [] # none of the existing exes are functional
|
|
47
|
+
```
|
|
48
|
+
Files stay in git; `gem install` no longer puts broken scripts on PATH.
|
|
49
|
+
|
|
50
|
+
OR
|
|
51
|
+
|
|
52
|
+
2. Restore `lib/lutaml/cli.rb` from `git show e7b5e68^:lib/lutaml/cli.rb`
|
|
53
|
+
and re-wire `exe/lutaml` to drive it. (The CLI uses `lutaml/converter`
|
|
54
|
+
which would also need to be restored — non-trivial.)
|
|
55
|
+
|
|
56
|
+
Either way, the standalone `exe/lutaml-wsd2uml` and `exe/lutaml-yaml2uml`
|
|
57
|
+
scripts don't belong in this gem. They should move to `lutaml-lml` or a
|
|
58
|
+
dedicated converter gem, regardless of which CLI option is chosen.
|
|
59
|
+
|
|
60
|
+
No action taken yet — waiting on user direction.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Package Metadata Configuration Example
|
|
2
|
+
#
|
|
3
|
+
# This file demonstrates how to configure package metadata for use with
|
|
4
|
+
# LutaML's PackageMetadata system.
|
|
5
|
+
#
|
|
6
|
+
# Package metadata enables external configuration of:
|
|
7
|
+
# - XSD generation: xmlns, targetNamespace, schemaLocation
|
|
8
|
+
# - Documentation: Package descriptions
|
|
9
|
+
# - Styling: Package-specific styling rules
|
|
10
|
+
# - Validation: Package constraints
|
|
11
|
+
#
|
|
12
|
+
# Format: YAML with "packages" root key
|
|
13
|
+
|
|
14
|
+
packages:
|
|
15
|
+
# Exact package path match
|
|
16
|
+
"ModelRoot::i-UR::Urban Planning ADE 3.2::uro":
|
|
17
|
+
xmlns: "http://www.kantei.go.jp/jp/singi/tiiki/toshisaisei/itoshisaisei/iur/uro/2.0"
|
|
18
|
+
targetNamespace: "http://www.kantei.go.jp/jp/singi/tiiki/toshisaisei/itoshisaisei/iur/uro/2.0"
|
|
19
|
+
schemaLocation: "../../schemas/uro/2.0/urbanObject.xsd"
|
|
20
|
+
prefix: "uro"
|
|
21
|
+
documentation: |
|
|
22
|
+
Urban Object package containing classes for urban planning and
|
|
23
|
+
infrastructure modeling in PLATEAU i-UR standard.
|
|
24
|
+
version: "2.0"
|
|
25
|
+
|
|
26
|
+
# Another exact match
|
|
27
|
+
"ModelRoot::CityGML2.0::Core":
|
|
28
|
+
xmlns: "http://www.opengis.net/citygml/2.0"
|
|
29
|
+
targetNamespace: "http://www.opengis.net/citygml/2.0/core"
|
|
30
|
+
schemaLocation: "http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd"
|
|
31
|
+
prefix: "core"
|
|
32
|
+
documentation: "CityGML 2.0 Core module - fundamental city model classes"
|
|
33
|
+
|
|
34
|
+
# Wildcard pattern: matches any direct child of ModelRoot::CityGML2.0
|
|
35
|
+
"ModelRoot::CityGML2.0::*":
|
|
36
|
+
xmlns: "http://www.opengis.net/citygml/2.0"
|
|
37
|
+
prefix: "citygml"
|
|
38
|
+
documentation: "Default CityGML 2.0 namespace"
|
|
39
|
+
|
|
40
|
+
# Multi-level wildcard: matches ModelRoot::<anything>::Common
|
|
41
|
+
"ModelRoot::*::Common":
|
|
42
|
+
documentation: "Common elements package"
|
|
43
|
+
category: "utilities"
|
|
44
|
+
|
|
45
|
+
# Package with custom metadata
|
|
46
|
+
"ModelRoot::CustomPackage":
|
|
47
|
+
xmlns: "http://example.com/custom/1.0"
|
|
48
|
+
prefix: "custom"
|
|
49
|
+
author: "Your Organization"
|
|
50
|
+
license: "Apache-2.0"
|
|
51
|
+
contact: "info@example.com"
|
|
52
|
+
|
|
53
|
+
# Notes:
|
|
54
|
+
# 1. Exact matches take precedence over wildcard patterns
|
|
55
|
+
# 2. Multiple wildcards can match the same package path
|
|
56
|
+
# 3. Metadata from all matches is merged (exact match wins)
|
|
57
|
+
# 4. Any custom keys are supported beyond the standard ones
|
|
58
|
+
# 5. Package paths use "::" as separator (UML qualified name format)
|