lutaml 0.10.19 → 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/CLAUDE.md +26 -19
- 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 -892
- data/Makefile +0 -2
- 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/frontend/dist/app.iife.js +0 -24
- data/frontend/dist/style.css +0 -1
- data/frontend/index.html +0 -26
- data/frontend/package-lock.json +0 -2805
- data/frontend/package.json +0 -26
- data/frontend/src/App.vue +0 -59
- data/frontend/src/app.ts +0 -8
- data/frontend/src/components/AppHeader.vue +0 -127
- data/frontend/src/components/AppSidebar.vue +0 -119
- data/frontend/src/components/ClassDetails.vue +0 -247
- data/frontend/src/components/DiagramView.vue +0 -79
- data/frontend/src/components/PackageDetails.vue +0 -92
- data/frontend/src/components/PackageTreeNode.vue +0 -64
- data/frontend/src/components/SearchResults.vue +0 -48
- data/frontend/src/components/WelcomeView.vue +0 -66
- data/frontend/src/shims-vue.d.ts +0 -5
- data/frontend/src/stores/dataStore.ts +0 -79
- data/frontend/src/stores/uiStore.ts +0 -167
- data/frontend/src/styles/main.css +0 -1566
- data/frontend/src/types.ts +0 -221
- 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 +0 -188
- data/frontend/tsconfig.json +0 -20
- data/frontend/vite.config.ts +0 -26
- data/frontend/vitest.config.ts +0 -8
- 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 -487
- 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 -223
- 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 -550
- 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 -16
- 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 -227
- data/lib/lutaml/uml/abstraction.rb +0 -12
- data/lib/lutaml/uml/action.rb +0 -17
- data/lib/lutaml/uml/activity.rb +0 -12
- data/lib/lutaml/uml/actor.rb +0 -12
- data/lib/lutaml/uml/association.rb +0 -37
- data/lib/lutaml/uml/association_generalization.rb +0 -20
- data/lib/lutaml/uml/behavior.rb +0 -12
- data/lib/lutaml/uml/cardinality.rb +0 -12
- data/lib/lutaml/uml/class.rb +0 -52
- data/lib/lutaml/uml/classifier.rb +0 -19
- data/lib/lutaml/uml/comment.rb +0 -15
- data/lib/lutaml/uml/connector.rb +0 -20
- data/lib/lutaml/uml/connector_end.rb +0 -22
- data/lib/lutaml/uml/constraint.rb +0 -24
- data/lib/lutaml/uml/data_type.rb +0 -56
- data/lib/lutaml/uml/dependency.rb +0 -20
- data/lib/lutaml/uml/diagram.rb +0 -25
- data/lib/lutaml/uml/diagram_link.rb +0 -28
- data/lib/lutaml/uml/diagram_object.rb +0 -32
- data/lib/lutaml/uml/document.rb +0 -64
- data/lib/lutaml/uml/enum.rb +0 -21
- data/lib/lutaml/uml/event.rb +0 -12
- data/lib/lutaml/uml/fidelity.rb +0 -12
- data/lib/lutaml/uml/final_state.rb +0 -12
- data/lib/lutaml/uml/fontname.rb +0 -15
- data/lib/lutaml/uml/general_attribute.rb +0 -24
- data/lib/lutaml/uml/generalization.rb +0 -37
- data/lib/lutaml/uml/group.rb +0 -21
- 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 -17
- data/lib/lutaml/uml/model.rb +0 -15
- data/lib/lutaml/uml/model_helpers.rb +0 -104
- data/lib/lutaml/uml/namespace.rb +0 -12
- 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 -12
- data/lib/lutaml/uml/operation.rb +0 -23
- data/lib/lutaml/uml/operation_parameter.rb +0 -19
- data/lib/lutaml/uml/package.rb +0 -33
- 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 -22
- data/lib/lutaml/uml/port.rb +0 -9
- data/lib/lutaml/uml/primitive_type.rb +0 -15
- data/lib/lutaml/uml/property.rb +0 -27
- data/lib/lutaml/uml/pseudostate.rb +0 -12
- data/lib/lutaml/uml/qualified_name.rb +0 -175
- data/lib/lutaml/uml/realization.rb +0 -12
- data/lib/lutaml/uml/region.rb +0 -12
- data/lib/lutaml/uml/state.rb +0 -22
- data/lib/lutaml/uml/state_machine.rb +0 -12
- data/lib/lutaml/uml/tagged_value.rb +0 -23
- data/lib/lutaml/uml/top_element.rb +0 -85
- data/lib/lutaml/uml/top_element_attribute.rb +0 -64
- data/lib/lutaml/uml/transition.rb +0 -24
- data/lib/lutaml/uml/trigger.rb +0 -18
- data/lib/lutaml/uml/validation/document_structure_validator.rb +0 -387
- data/lib/lutaml/uml/value.rb +0 -37
- data/lib/lutaml/uml/vertex.rb +0 -12
- data/lib/lutaml/uml.rb +0 -113
- data/lib/lutaml/uml_repository/class_lookup_index.rb +0 -39
- 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 -236
- 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/configuration.rb +0 -377
- data/lib/lutaml/uml_repository/static_site/data_transformer.rb +0 -135
- data/lib/lutaml/uml_repository/static_site/generator.rb +0 -120
- data/lib/lutaml/uml_repository/static_site/id_generator.rb +0 -120
- 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 -58
- 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 -28
- data/lib/lutaml/uml_repository/static_site/models/spa_class.rb +0 -60
- 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 -39
- 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 -37
- 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 -34
- data/lib/lutaml/uml_repository/static_site/models/spa_search_index.rb +0 -29
- 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 -22
- data/lib/lutaml/uml_repository/static_site/models.rb +0 -48
- data/lib/lutaml/uml_repository/static_site/output/multi_file_strategy.rb +0 -69
- data/lib/lutaml/uml_repository/static_site/output/strategy.rb +0 -36
- data/lib/lutaml/uml_repository/static_site/output/vue_inlined_strategy.rb +0 -113
- data/lib/lutaml/uml_repository/static_site/output.rb +0 -15
- data/lib/lutaml/uml_repository/static_site/search_index_builder.rb +0 -216
- data/lib/lutaml/uml_repository/static_site/serializers/association_serializer.rb +0 -70
- data/lib/lutaml/uml_repository/static_site/serializers/attribute_serializer.rb +0 -24
- data/lib/lutaml/uml_repository/static_site/serializers/base.rb +0 -66
- data/lib/lutaml/uml_repository/static_site/serializers/class_serializer.rb +0 -97
- data/lib/lutaml/uml_repository/static_site/serializers/diagram_serializer.rb +0 -59
- data/lib/lutaml/uml_repository/static_site/serializers/inheritance_resolver.rb +0 -151
- data/lib/lutaml/uml_repository/static_site/serializers/metadata_builder.rb +0 -102
- data/lib/lutaml/uml_repository/static_site/serializers/operation_serializer.rb +0 -52
- data/lib/lutaml/uml_repository/static_site/serializers/package_serializer.rb +0 -55
- data/lib/lutaml/uml_repository/static_site/serializers/package_tree_builder.rb +0 -77
- data/lib/lutaml/uml_repository/static_site/serializers.rb +0 -30
- data/lib/lutaml/uml_repository/static_site.rb +0 -92
- data/lib/lutaml/uml_repository/statistics_calculator.rb +0 -342
- data/lib/lutaml/uml_repository/validators/repository_validator.rb +0 -402
- 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 -62
- 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,100 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "sqlite3"
|
|
4
|
-
|
|
5
|
-
module Lutaml
|
|
6
|
-
module Qea
|
|
7
|
-
module Infrastructure
|
|
8
|
-
# DatabaseConnection manages the SQLite database connection lifecycle
|
|
9
|
-
# for QEA files (Enterprise Architect SQLite databases).
|
|
10
|
-
#
|
|
11
|
-
# @example Connect to a QEA file
|
|
12
|
-
# conn = DatabaseConnection.new("model.qea")
|
|
13
|
-
# conn.connect
|
|
14
|
-
# # ... use connection
|
|
15
|
-
# conn.close
|
|
16
|
-
#
|
|
17
|
-
# @example Using with_connection block
|
|
18
|
-
# conn = DatabaseConnection.new("model.qea")
|
|
19
|
-
# conn.with_connection do |db|
|
|
20
|
-
# # ... use db
|
|
21
|
-
# end
|
|
22
|
-
class DatabaseConnection
|
|
23
|
-
attr_reader :file_path, :connection
|
|
24
|
-
|
|
25
|
-
# Initialize a new database connection
|
|
26
|
-
#
|
|
27
|
-
# @param file_path [String] Path to the .qea file
|
|
28
|
-
# @raise [ArgumentError] if file_path is nil or empty
|
|
29
|
-
def initialize(file_path)
|
|
30
|
-
if file_path.nil? || file_path.empty?
|
|
31
|
-
raise ArgumentError,
|
|
32
|
-
"file_path cannot be nil or empty"
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
@file_path = file_path
|
|
36
|
-
@connection = nil
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# Connect to the database
|
|
40
|
-
#
|
|
41
|
-
# @return [SQLite3::Database] The database connection
|
|
42
|
-
# @raise [Errno::ENOENT] if the file does not exist
|
|
43
|
-
# @raise [SQLite3::Exception] if connection fails
|
|
44
|
-
def connect
|
|
45
|
-
unless File.exist?(@file_path)
|
|
46
|
-
raise Errno::ENOENT, "QEA file not found: #{@file_path}"
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
@connection = SQLite3::Database.new(@file_path, readonly: true)
|
|
50
|
-
@connection.results_as_hash = true
|
|
51
|
-
@connection
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
# Close the database connection
|
|
55
|
-
#
|
|
56
|
-
# @return [void]
|
|
57
|
-
def close
|
|
58
|
-
return unless @connection
|
|
59
|
-
|
|
60
|
-
@connection.close
|
|
61
|
-
@connection = nil
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
# Check if the connection is open
|
|
65
|
-
#
|
|
66
|
-
# @return [Boolean] true if connection is open
|
|
67
|
-
def connected?
|
|
68
|
-
!@connection.nil? && !@connection.closed?
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
# Execute a block with an active connection
|
|
72
|
-
#
|
|
73
|
-
# This method ensures the connection is properly opened and closed.
|
|
74
|
-
# If a connection already exists, it reuses it. Otherwise, it creates
|
|
75
|
-
# a new connection and closes it after the block executes.
|
|
76
|
-
#
|
|
77
|
-
# @yield [SQLite3::Database] The database connection
|
|
78
|
-
# @return [Object] The result of the block
|
|
79
|
-
# @raise [Errno::ENOENT] if the file does not exist
|
|
80
|
-
# @raise [SQLite3::Exception] if connection fails
|
|
81
|
-
#
|
|
82
|
-
# @example
|
|
83
|
-
# conn = DatabaseConnection.new("model.qea")
|
|
84
|
-
# result = conn.with_connection do |db|
|
|
85
|
-
# db.execute("SELECT COUNT(*) FROM t_object")
|
|
86
|
-
# end
|
|
87
|
-
def with_connection
|
|
88
|
-
should_close = !connected?
|
|
89
|
-
|
|
90
|
-
begin
|
|
91
|
-
connect unless connected?
|
|
92
|
-
yield @connection
|
|
93
|
-
ensure
|
|
94
|
-
close if should_close
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
end
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Lutaml
|
|
4
|
-
module Qea
|
|
5
|
-
module Infrastructure
|
|
6
|
-
# SchemaReader reads database schema information from a
|
|
7
|
-
# QEA SQLite database.
|
|
8
|
-
#
|
|
9
|
-
# This class is responsible for introspecting the database schema,
|
|
10
|
-
# including table names, column definitions, and metadata.
|
|
11
|
-
#
|
|
12
|
-
# @example Read schema information
|
|
13
|
-
# reader = SchemaReader.new(db_connection)
|
|
14
|
-
# tables = reader.tables
|
|
15
|
-
# columns = reader.columns("t_object")
|
|
16
|
-
class SchemaReader
|
|
17
|
-
attr_reader :database
|
|
18
|
-
|
|
19
|
-
# Initialize a new schema reader
|
|
20
|
-
#
|
|
21
|
-
# @param database [SQLite3::Database] The database connection
|
|
22
|
-
# @raise [ArgumentError] if database is nil
|
|
23
|
-
def initialize(database)
|
|
24
|
-
raise ArgumentError, "database cannot be nil" if database.nil?
|
|
25
|
-
|
|
26
|
-
@database = database
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# Get list of all table names in the database
|
|
30
|
-
#
|
|
31
|
-
# @param exclude_system [Boolean]
|
|
32
|
-
# Exclude SQLite system tables (default: true)
|
|
33
|
-
# @return [Array<String>] List of table names
|
|
34
|
-
def tables(exclude_system: true)
|
|
35
|
-
query = "SELECT name FROM sqlite_master WHERE type='table'"
|
|
36
|
-
query += " AND name NOT LIKE 'sqlite_%'" if exclude_system
|
|
37
|
-
query += " ORDER BY name"
|
|
38
|
-
|
|
39
|
-
@database.execute(query).map { |row| row["name"] }
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
# Get column information for a specific table
|
|
43
|
-
#
|
|
44
|
-
# @param table_name [String] The table name
|
|
45
|
-
# @return [Array<Hash>] Array of column information hashes
|
|
46
|
-
# Each hash contains: name, type, notnull, dflt_value, pk
|
|
47
|
-
#
|
|
48
|
-
# @example
|
|
49
|
-
# columns = reader.columns("t_object")
|
|
50
|
-
# # => [
|
|
51
|
-
# # {"cid"=>0, "name"=>"Object_ID", "type"=>"INTEGER",
|
|
52
|
-
# # "notnull"=>1, "dflt_value"=>nil, "pk"=>1},
|
|
53
|
-
# # ...
|
|
54
|
-
# # ]
|
|
55
|
-
def columns(table_name)
|
|
56
|
-
@database.execute("PRAGMA table_info(#{table_name})")
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
# Get just column names for a specific table
|
|
60
|
-
#
|
|
61
|
-
# @param table_name [String] The table name
|
|
62
|
-
# @return [Array<String>] List of column names
|
|
63
|
-
def column_names(table_name)
|
|
64
|
-
columns(table_name).map { |col| col["name"] }
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
# Check if a table exists in the database
|
|
68
|
-
#
|
|
69
|
-
# @param table_name [String] The table name to check
|
|
70
|
-
# @return [Boolean] true if table exists
|
|
71
|
-
def table_exists?(table_name)
|
|
72
|
-
result = @database.execute(
|
|
73
|
-
"SELECT name FROM sqlite_master WHERE type='table' AND name=?",
|
|
74
|
-
table_name,
|
|
75
|
-
)
|
|
76
|
-
!result.empty?
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
# Get primary key column name for a table
|
|
80
|
-
#
|
|
81
|
-
# @param table_name [String] The table name
|
|
82
|
-
# @return [String, nil] The primary key column name,
|
|
83
|
-
# or nil if no primary key
|
|
84
|
-
def primary_key(table_name)
|
|
85
|
-
pk_column = columns(table_name).find { |col| col["pk"] == 1 }
|
|
86
|
-
pk_column&.fetch("name", nil)
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
# Get table schema as CREATE TABLE statement
|
|
90
|
-
#
|
|
91
|
-
# @param table_name [String] The table name
|
|
92
|
-
# @return [String, nil] The CREATE TABLE SQL statement,
|
|
93
|
-
# or nil if table doesn't exist
|
|
94
|
-
def table_schema(table_name)
|
|
95
|
-
result = @database.execute(
|
|
96
|
-
"SELECT sql FROM sqlite_master WHERE type='table' AND name=?",
|
|
97
|
-
table_name,
|
|
98
|
-
)
|
|
99
|
-
result.first&.fetch("sql", nil)
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
# Get index information for a table
|
|
103
|
-
#
|
|
104
|
-
# @param table_name [String] The table name
|
|
105
|
-
# @return [Array<Hash>] Array of index information
|
|
106
|
-
def indexes(table_name)
|
|
107
|
-
@database.execute(
|
|
108
|
-
"SELECT name, sql FROM sqlite_master " \
|
|
109
|
-
"WHERE type='index' AND tbl_name=?",
|
|
110
|
-
table_name,
|
|
111
|
-
)
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
# Get row count for a table
|
|
115
|
-
#
|
|
116
|
-
# @param table_name [String] The table name
|
|
117
|
-
# @return [Integer] Number of rows in the table
|
|
118
|
-
def row_count(table_name)
|
|
119
|
-
result = @database.execute(
|
|
120
|
-
"SELECT COUNT(*) as count FROM #{table_name}",
|
|
121
|
-
)
|
|
122
|
-
result.first["count"]
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
# Get schema statistics for all tables
|
|
126
|
-
#
|
|
127
|
-
# @return [Hash] Hash mapping table names to row counts
|
|
128
|
-
def statistics
|
|
129
|
-
tables.to_h do |table_name|
|
|
130
|
-
[table_name, row_count(table_name)]
|
|
131
|
-
end
|
|
132
|
-
end
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
end
|
|
136
|
-
end
|
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Lutaml
|
|
4
|
-
module Qea
|
|
5
|
-
module Infrastructure
|
|
6
|
-
# TableReader reads data from a single table in a QEA SQLite database.
|
|
7
|
-
#
|
|
8
|
-
# This class provides methods to query and retrieve records from
|
|
9
|
-
# database tables with filtering and counting capabilities.
|
|
10
|
-
#
|
|
11
|
-
# @example Read all records from a table
|
|
12
|
-
# reader = TableReader.new(db_connection, "t_object")
|
|
13
|
-
# objects = reader.all
|
|
14
|
-
#
|
|
15
|
-
# @example Read with filtering
|
|
16
|
-
# reader = TableReader.new(db_connection, "t_object")
|
|
17
|
-
# classes = reader.where("Object_Type = ?", "Class")
|
|
18
|
-
class TableReader
|
|
19
|
-
attr_reader :database, :table_name
|
|
20
|
-
|
|
21
|
-
# Initialize a new table reader
|
|
22
|
-
#
|
|
23
|
-
# @param database [SQLite3::Database] The database connection
|
|
24
|
-
# @param table_name [String] The table name to read from
|
|
25
|
-
# @raise [ArgumentError] if database or table_name is nil
|
|
26
|
-
def initialize(database, table_name)
|
|
27
|
-
raise ArgumentError, "database cannot be nil" if database.nil?
|
|
28
|
-
|
|
29
|
-
if table_name.nil? || table_name.empty?
|
|
30
|
-
raise ArgumentError,
|
|
31
|
-
"table_name cannot be nil or empty"
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
@database = database
|
|
35
|
-
@table_name = table_name
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
# Read all records from the table
|
|
39
|
-
#
|
|
40
|
-
# @param limit [Integer, nil] Maximum number of records to return
|
|
41
|
-
# (optional)
|
|
42
|
-
# @param offset [Integer, nil] Number of records to skip (optional)
|
|
43
|
-
# @return [Array<Hash>] Array of record hashes
|
|
44
|
-
#
|
|
45
|
-
# @example
|
|
46
|
-
# reader.all
|
|
47
|
-
# # => [{"Object_ID"=>1, "Name"=>"MyClass", ...}, ...]
|
|
48
|
-
#
|
|
49
|
-
# @example With limit
|
|
50
|
-
# reader.all(limit: 10)
|
|
51
|
-
# # => Returns first 10 records
|
|
52
|
-
def all(limit: nil, offset: nil) # rubocop:disable Metrics/MethodLength
|
|
53
|
-
query = "SELECT * FROM #{@table_name}"
|
|
54
|
-
params = []
|
|
55
|
-
|
|
56
|
-
if limit
|
|
57
|
-
query += " LIMIT ?"
|
|
58
|
-
params << limit
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
if offset
|
|
62
|
-
query += " OFFSET ?"
|
|
63
|
-
params << offset
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
@database.execute(query, params)
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
# Read records matching a WHERE clause
|
|
70
|
-
#
|
|
71
|
-
# @param conditions [String] The WHERE clause
|
|
72
|
-
# (without the WHERE keyword)
|
|
73
|
-
# @param values [Array] Values for parameterized query placeholders
|
|
74
|
-
# @param limit [Integer, nil] Maximum number of records
|
|
75
|
-
# to return (optional)
|
|
76
|
-
# @param offset [Integer, nil] Number of records to skip (optional)
|
|
77
|
-
# @return [Array<Hash>] Array of matching record hashes
|
|
78
|
-
#
|
|
79
|
-
# @example Simple filter
|
|
80
|
-
# reader.where("Object_Type = ?", "Class")
|
|
81
|
-
#
|
|
82
|
-
# @example Multiple conditions
|
|
83
|
-
# reader.where("Object_Type = ? AND Package_ID = ?", "Class", 5)
|
|
84
|
-
#
|
|
85
|
-
# @example With limit
|
|
86
|
-
# reader.where("Object_Type = ?", "Class", limit: 10)
|
|
87
|
-
def where(conditions, *values, limit: nil, offset: nil) # rubocop:disable Metrics/MethodLength
|
|
88
|
-
query = "SELECT * FROM #{@table_name} WHERE #{conditions}"
|
|
89
|
-
params = values.flatten
|
|
90
|
-
|
|
91
|
-
if limit
|
|
92
|
-
query += " LIMIT ?"
|
|
93
|
-
params << limit
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
if offset
|
|
97
|
-
query += " OFFSET ?"
|
|
98
|
-
params << offset
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
@database.execute(query, params)
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
# Count all records in the table
|
|
105
|
-
#
|
|
106
|
-
# @return [Integer] Total number of records
|
|
107
|
-
def count
|
|
108
|
-
result = @database.execute(
|
|
109
|
-
"SELECT COUNT(*) as count FROM #{@table_name}",
|
|
110
|
-
)
|
|
111
|
-
result.first["count"]
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
# Count records matching a WHERE clause
|
|
115
|
-
#
|
|
116
|
-
# @param conditions [String] The WHERE clause
|
|
117
|
-
# (without the WHERE keyword)
|
|
118
|
-
# @param values [Array] Values for parameterized query placeholders
|
|
119
|
-
# @return [Integer] Number of matching records
|
|
120
|
-
#
|
|
121
|
-
# @example
|
|
122
|
-
# reader.count_where("Object_Type = ?", "Class")
|
|
123
|
-
# # => 42
|
|
124
|
-
def count_where(conditions, *values)
|
|
125
|
-
query = "SELECT COUNT(*) as count FROM #{@table_name} " \
|
|
126
|
-
"WHERE #{conditions}"
|
|
127
|
-
result = @database.execute(query, values.flatten)
|
|
128
|
-
result.first["count"]
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
# Find a single record by primary key value
|
|
132
|
-
#
|
|
133
|
-
# @param primary_key_column [String] The primary key column name
|
|
134
|
-
# @param value [Object] The primary key value to search for
|
|
135
|
-
# @return [Hash, nil] The matching record hash, or nil if not found
|
|
136
|
-
#
|
|
137
|
-
# @example
|
|
138
|
-
# reader.find_by_pk("Object_ID", 123)
|
|
139
|
-
# # => {"Object_ID"=>123, "Name"=>"MyClass", ...}
|
|
140
|
-
def find_by_pk(primary_key_column, value)
|
|
141
|
-
query = "SELECT * FROM #{@table_name} " \
|
|
142
|
-
"WHERE #{primary_key_column} = ? LIMIT 1"
|
|
143
|
-
result = @database.execute(query, [value])
|
|
144
|
-
result.first
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
# Find first record matching a WHERE clause
|
|
148
|
-
#
|
|
149
|
-
# @param conditions [String] The WHERE clause
|
|
150
|
-
# (without the WHERE keyword)
|
|
151
|
-
# @param values [Array] Values for parameterized query placeholders
|
|
152
|
-
# @return [Hash, nil] The first matching record hash,
|
|
153
|
-
# or nil if not found
|
|
154
|
-
#
|
|
155
|
-
# @example
|
|
156
|
-
# reader.find_first("Name = ?", "MyClass")
|
|
157
|
-
# # => {"Object_ID"=>123, "Name"=>"MyClass", ...}
|
|
158
|
-
def find_first(conditions, *values)
|
|
159
|
-
query = "SELECT * FROM #{@table_name} WHERE #{conditions} LIMIT 1"
|
|
160
|
-
result = @database.execute(query, values.flatten)
|
|
161
|
-
result.first
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
# Execute a custom SQL query on this table
|
|
165
|
-
#
|
|
166
|
-
# @param sql [String] The SQL query (should reference the table)
|
|
167
|
-
# @param params [Array] Parameters for the query
|
|
168
|
-
# @return [Array<Hash>] Query results
|
|
169
|
-
#
|
|
170
|
-
# @example
|
|
171
|
-
# reader.execute_query(
|
|
172
|
-
# "SELECT Name, COUNT(*) as count FROM #{reader.table_name}
|
|
173
|
-
# GROUP BY Name"
|
|
174
|
-
# )
|
|
175
|
-
def execute_query(sql, params = [])
|
|
176
|
-
@database.execute(sql, params)
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
# Check if any records match the given conditions
|
|
180
|
-
#
|
|
181
|
-
# @param conditions [String] The WHERE clause
|
|
182
|
-
# (without the WHERE keyword)
|
|
183
|
-
# @param values [Array] Values for parameterized query placeholders
|
|
184
|
-
# @return [Boolean] true if at least one record matches
|
|
185
|
-
#
|
|
186
|
-
# @example
|
|
187
|
-
# reader.exists?("Name = ?", "MyClass")
|
|
188
|
-
# # => true or false
|
|
189
|
-
def exists?(conditions, *values)
|
|
190
|
-
count_where(conditions, *values).positive?
|
|
191
|
-
end
|
|
192
|
-
|
|
193
|
-
# Read records with custom column selection
|
|
194
|
-
#
|
|
195
|
-
# @param columns [Array<String>] Column names to select
|
|
196
|
-
# @param conditions [String, nil] Optional WHERE clause
|
|
197
|
-
# @param values [Array] Values for parameterized query placeholders
|
|
198
|
-
# @param limit [Integer, nil] Maximum number of records to return
|
|
199
|
-
# @return [Array<Hash>] Array of record hashes with selected columns
|
|
200
|
-
#
|
|
201
|
-
# @example
|
|
202
|
-
# reader.select(["Object_ID", "Name"], "Object_Type = ?", "Class")
|
|
203
|
-
# # => [{"Object_ID"=>1, "Name"=>"Class1"}, ...]
|
|
204
|
-
def select(columns, conditions = nil, *values, limit: nil) # rubocop:disable Metrics/MethodLength
|
|
205
|
-
column_list = columns.join(", ")
|
|
206
|
-
query = "SELECT #{column_list} FROM #{@table_name}"
|
|
207
|
-
|
|
208
|
-
params = []
|
|
209
|
-
if conditions
|
|
210
|
-
query += " WHERE #{conditions}"
|
|
211
|
-
params = values.flatten
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
if limit
|
|
215
|
-
query += " LIMIT ?"
|
|
216
|
-
params << limit
|
|
217
|
-
end
|
|
218
|
-
|
|
219
|
-
@database.execute(query, params)
|
|
220
|
-
end
|
|
221
|
-
end
|
|
222
|
-
end
|
|
223
|
-
end
|
|
224
|
-
end
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Lutaml
|
|
4
|
-
module Qea
|
|
5
|
-
module Infrastructure
|
|
6
|
-
autoload :DatabaseConnection,
|
|
7
|
-
"lutaml/qea/infrastructure/database_connection"
|
|
8
|
-
autoload :SchemaReader, "lutaml/qea/infrastructure/schema_reader"
|
|
9
|
-
autoload :TableReader, "lutaml/qea/infrastructure/table_reader"
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "lutaml/model"
|
|
4
|
-
|
|
5
|
-
module Lutaml
|
|
6
|
-
module Qea
|
|
7
|
-
module Models
|
|
8
|
-
# Abstract base model for all QEA database models
|
|
9
|
-
# Provides common behavior and interface for domain models
|
|
10
|
-
class BaseModel < Lutaml::Model::Serializable
|
|
11
|
-
# Abstract method to be implemented by subclasses
|
|
12
|
-
# @return [Symbol] the primary key column name
|
|
13
|
-
def self.primary_key_column
|
|
14
|
-
raise NotImplementedError,
|
|
15
|
-
"#{self} must implement .primary_key_column"
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# Abstract method to be implemented by subclasses
|
|
19
|
-
# @return [String] the database table name
|
|
20
|
-
def self.table_name
|
|
21
|
-
raise NotImplementedError,
|
|
22
|
-
"#{self} must implement .table_name"
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# Returns the primary key value for this instance
|
|
26
|
-
# @return [Object] the primary key value
|
|
27
|
-
def primary_key
|
|
28
|
-
public_send(self.class.primary_key_column)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# Create instance from database row hash
|
|
32
|
-
# Handles case-insensitive column name mapping from database
|
|
33
|
-
# @param row [Hash] database row with string keys
|
|
34
|
-
# @return [BaseModel] new instance
|
|
35
|
-
def self.from_db_row(row)
|
|
36
|
-
return nil if row.nil?
|
|
37
|
-
|
|
38
|
-
# Convert database column names to attribute names
|
|
39
|
-
attrs = row.transform_keys do |key|
|
|
40
|
-
key.to_s.downcase.to_sym
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
new(attrs)
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Lutaml
|
|
4
|
-
module Qea
|
|
5
|
-
module Models
|
|
6
|
-
# Represents an attribute from the t_attribute table in EA database
|
|
7
|
-
# This represents class attributes/properties
|
|
8
|
-
class EaAttribute < BaseModel
|
|
9
|
-
attribute :ea_object_id, Lutaml::Model::Type::Integer
|
|
10
|
-
attribute :name, Lutaml::Model::Type::String
|
|
11
|
-
attribute :scope, Lutaml::Model::Type::String
|
|
12
|
-
attribute :stereotype, Lutaml::Model::Type::String
|
|
13
|
-
attribute :containment, Lutaml::Model::Type::String
|
|
14
|
-
attribute :isstatic, Lutaml::Model::Type::Integer
|
|
15
|
-
attribute :iscollection, Lutaml::Model::Type::Integer
|
|
16
|
-
attribute :isordered, Lutaml::Model::Type::Integer
|
|
17
|
-
attribute :allowduplicates, Lutaml::Model::Type::Integer
|
|
18
|
-
attribute :lowerbound, Lutaml::Model::Type::String
|
|
19
|
-
attribute :upperbound, Lutaml::Model::Type::String
|
|
20
|
-
attribute :container, Lutaml::Model::Type::String
|
|
21
|
-
attribute :notes, Lutaml::Model::Type::String
|
|
22
|
-
attribute :derived, Lutaml::Model::Type::String
|
|
23
|
-
attribute :id, Lutaml::Model::Type::Integer
|
|
24
|
-
attribute :pos, Lutaml::Model::Type::Integer
|
|
25
|
-
attribute :genoption, Lutaml::Model::Type::String
|
|
26
|
-
attribute :length, Lutaml::Model::Type::Integer
|
|
27
|
-
attribute :precision, Lutaml::Model::Type::Integer
|
|
28
|
-
attribute :scale, Lutaml::Model::Type::Integer
|
|
29
|
-
attribute :const, Lutaml::Model::Type::Integer
|
|
30
|
-
attribute :style, Lutaml::Model::Type::String
|
|
31
|
-
attribute :classifier, Lutaml::Model::Type::String
|
|
32
|
-
attribute :default, Lutaml::Model::Type::String
|
|
33
|
-
attribute :type, Lutaml::Model::Type::String
|
|
34
|
-
attribute :ea_guid, Lutaml::Model::Type::String
|
|
35
|
-
attribute :styleex, Lutaml::Model::Type::String
|
|
36
|
-
|
|
37
|
-
def self.primary_key_column
|
|
38
|
-
:id
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def self.table_name
|
|
42
|
-
"t_attribute"
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# Create from database row
|
|
46
|
-
#
|
|
47
|
-
# @param row [Hash] Database row with string keys
|
|
48
|
-
# @return [EaAttribute, nil] New instance or nil if row is nil
|
|
49
|
-
def self.from_db_row(row) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
|
|
50
|
-
return nil if row.nil?
|
|
51
|
-
|
|
52
|
-
new(
|
|
53
|
-
ea_object_id: row["Object_ID"],
|
|
54
|
-
name: row["Name"],
|
|
55
|
-
scope: row["Scope"],
|
|
56
|
-
stereotype: row["Stereotype"],
|
|
57
|
-
containment: row["Containment"],
|
|
58
|
-
isstatic: row["IsStatic"],
|
|
59
|
-
iscollection: row["IsCollection"],
|
|
60
|
-
isordered: row["IsOrdered"],
|
|
61
|
-
allowduplicates: row["AllowDuplicates"],
|
|
62
|
-
lowerbound: row["LowerBound"],
|
|
63
|
-
upperbound: row["UpperBound"],
|
|
64
|
-
container: row["Container"],
|
|
65
|
-
notes: row["Notes"],
|
|
66
|
-
derived: row["Derived"],
|
|
67
|
-
id: row["ID"],
|
|
68
|
-
pos: row["Pos"],
|
|
69
|
-
genoption: row["GenOption"],
|
|
70
|
-
length: row["Length"],
|
|
71
|
-
precision: row["Precision"],
|
|
72
|
-
scale: row["Scale"],
|
|
73
|
-
const: row["Const"],
|
|
74
|
-
style: row["Style"],
|
|
75
|
-
classifier: row["Classifier"],
|
|
76
|
-
default: row["Default"],
|
|
77
|
-
type: row["Type"],
|
|
78
|
-
ea_guid: row["ea_guid"],
|
|
79
|
-
styleex: row["StyleEx"],
|
|
80
|
-
)
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
# Check if attribute is static
|
|
84
|
-
# @return [Boolean]
|
|
85
|
-
def static?
|
|
86
|
-
isstatic == 1
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
# Check if attribute is a collection
|
|
90
|
-
# @return [Boolean]
|
|
91
|
-
def collection?
|
|
92
|
-
iscollection == 1
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
# Check if attribute is ordered
|
|
96
|
-
# @return [Boolean]
|
|
97
|
-
def ordered?
|
|
98
|
-
isordered == 1
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
# Check if attribute allows duplicates
|
|
102
|
-
# @return [Boolean]
|
|
103
|
-
def allow_duplicates?
|
|
104
|
-
allowduplicates == 1
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
# Check if attribute is constant
|
|
108
|
-
# @return [Boolean]
|
|
109
|
-
def constant?
|
|
110
|
-
const == 1
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
# Check if attribute is public
|
|
114
|
-
# @return [Boolean]
|
|
115
|
-
def public?
|
|
116
|
-
scope&.downcase == "public"
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
# Check if attribute is private
|
|
120
|
-
# @return [Boolean]
|
|
121
|
-
def private?
|
|
122
|
-
scope&.downcase == "private"
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
# Check if attribute is protected
|
|
126
|
-
# @return [Boolean]
|
|
127
|
-
def protected?
|
|
128
|
-
scope&.downcase == "protected"
|
|
129
|
-
end
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
end
|
|
133
|
-
end
|