Module: Ea::Transformers::QeaToXmi::GuidFormat

Defined in:
lib/ea/transformers/qea_to_xmi/guid_format.rb

Overview

Pure conversions between Sparx EA GUID strings and XMI identifier strings. No state, no I/O — same input always yields same output.

EA stores identifiers as {ABCD-1234-...} braced GUID strings. XMI serializations use unbraced, dash→underscore forms prefixed with EAID_ (most elements) or EAPK_ (packages at the model root).

Constant Summary collapse

SEP =

Braces and dashes both become underscores; collapse runs of consecutive underscores so {AB-CD}AB_CD (not _AB_CD_).

/[-{}]/

Class Method Summary collapse

Class Method Details

.connector_end_xmi_id(connector_xmi_id, side:) ⇒ String

Build a member-end xmi:id for one side of a connector.

Sparx EA's convention: take the connector's GUID, drop the first two hex characters of its first segment, and prepend src or dst.

Parameters:

  • connector_xmi_id (String)

    e.g. "EAID_AB12CDEF_..."

  • side (Symbol)

    :source or :destination

Returns:

  • (String)

    e.g. "EAID_src2CDEF_..."



46
47
48
49
50
51
52
# File 'lib/ea/transformers/qea_to_xmi/guid_format.rb', line 46

def connector_end_xmi_id(connector_xmi_id, side:)
  tag = side == :source ? "src" : "dst"
  body = connector_xmi_id.sub(/\A(?:EAID|EAPK)_/, "")
  first_segment, rest = body.split("_", 2)
  trimmed = first_segment.length > 2 ? first_segment[2..] : first_segment
  rest ? "EAID_#{tag}#{trimmed}_#{rest}" : "EAID_#{tag}#{trimmed}"
end

.ea_guid_to_xmi_id(ea_guid, prefix: "EAID") ⇒ String?

Returns e.g. "EAID_AB_CD_EF".

Parameters:

  • ea_guid (String, nil)

    e.g. "AB-CD-EF"

  • prefix (String) (defaults to: "EAID")

    "EAID" (default) or "EAPK"

Returns:

  • (String, nil)

    e.g. "EAID_AB_CD_EF"



22
23
24
25
26
27
# File 'lib/ea/transformers/qea_to_xmi/guid_format.rb', line 22

def ea_guid_to_xmi_id(ea_guid, prefix: "EAID")
  return nil if ea_guid.nil? || ea_guid.empty?

  clean = ea_guid.gsub(SEP, "_").gsub(/_+/, "_").gsub(/\A_/, "").gsub(/_\z/, "")
  "#{prefix}_#{clean}"
end

.xmi_id_to_ea_guid(xmi_id) ⇒ String?

Returns e.g. "AB-CD-EF".

Parameters:

  • xmi_id (String, nil)

    e.g. "EAID_AB_CD_EF"

Returns:

  • (String, nil)

    e.g. "AB-CD-EF"



31
32
33
34
35
36
# File 'lib/ea/transformers/qea_to_xmi/guid_format.rb', line 31

def xmi_id_to_ea_guid(xmi_id)
  return nil if xmi_id.nil? || xmi_id.empty?

  body = xmi_id.sub(/\A(?:EAID|EAPK)_/, "")
  "{#{body.tr('_', '-')}}"
end