class Lutaml::Model::Type::Reference

def self.cast_with_metadata(value, model_class, key_attribute)

Enhanced casting method that receives metadata
def self.cast_with_metadata(value, model_class, key_attribute)
  return value if value.is_a?(Reference)
  new(model_class, key_attribute, value)
end

def self.serialize(value)

def self.serialize(value)
  case value
  when Reference
    value.key
  else
    value.to_s
  end
end

def self.xsd_type(target_xsd_type = nil)

Returns:
  • (String) - xs:IDREF or xs:string

Parameters:
  • target_xsd_type (String, nil) -- the XSD type of the target attribute
def self.xsd_type(target_xsd_type = nil)
  target_xsd_type == "xs:ID" ? "xs:IDREF" : "xs:string"
end

def initialize(model_class, key_attribute, key = nil)

def initialize(model_class, key_attribute, key = nil)
  @model_class = model_class.to_s
  @key_attribute = key_attribute
  @key = key
  super(object)
end

def model_instance?(value)

def model_instance?(value)
  return false unless value
  klass = Object.const_get(@model_class)
  value.instance_of?(klass)
rescue NameError
  false
end

def object

def object
  return @value if resolved?
  return nil unless @key
  @value = Lutaml::Model::Store.resolve(@model_class, @key_attribute,
                                        @key)
  @value
end

def pretty_print_instance_variables

def pretty_print_instance_variables
  (instance_variables - %i[@value @key_attribute @model_class]).sort
end

def resolved?

def resolved?
  model_instance?(@value)
end