Class: Lutaml::Lml::Format::Adapter::StandardAdapter

Inherits:
Document
  • Object
show all
Defined in:
lib/lutaml/lml/format/adapter/standard_adapter.rb

Constant Summary collapse

TYPE_KEY =
"__type__"

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attributes = {}, **options) ⇒ StandardAdapter

Returns a new instance of StandardAdapter.



18
19
20
# File 'lib/lutaml/lml/format/adapter/standard_adapter.rb', line 18

def initialize(attributes = {}, **options)
  super
end

Class Method Details

.instance_to_hash(instance) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/lutaml/lml/format/adapter/standard_adapter.rb', line 31

def self.instance_to_hash(instance)
  return nil unless instance

  hash = {}
  hash[TYPE_KEY] = instance.type if instance.type

  Array(instance.attributes).each do |attr|
    if attr.instances.any?
      hashes = attr.instances.map { |i| instance_to_hash(i) }
      hash[attr.name] = attr.instances.one? ? hashes.first : hashes
    elsif attr.value.is_a?(Array)
      hash[attr.name] = attr.value.map { |v| primitive_value(v) }
    elsif !attr.value.nil?
      hash[attr.name] = primitive_value(attr.value)
    end
  end

  if instance.instance
    hash.merge!(instance_to_hash(instance.instance))
  end

  hash
end

.parse(data, _options = {}) ⇒ Object



10
11
12
13
14
15
16
# File 'lib/lutaml/lml/format/adapter/standard_adapter.rb', line 10

def self.parse(data, _options = {})
  return data if data.is_a?(Hash)

  input = data.is_a?(IO) ? data : StringIO.new(data.to_s)
  doc = Lutaml::Lml::Pipeline.call(input, resolve: false)
  instance_to_hash(doc.instance)
end

.primitive_value(val) ⇒ Object



55
56
57
58
59
60
61
# File 'lib/lutaml/lml/format/adapter/standard_adapter.rb', line 55

def self.primitive_value(val)
  case val
  when TrueClass, FalseClass then val
  when Integer, Float then val
  else val.to_s
  end
end

Instance Method Details

#to_lml(_options = {}) ⇒ Object



22
23
24
25
26
27
# File 'lib/lutaml/lml/format/adapter/standard_adapter.rb', line 22

def to_lml(_options = {})
  attrs = @attributes.dup
  type_name = attrs.delete(TYPE_KEY) || "Data"
  body = hash_to_lml_body(attrs)
  "instance #{type_name} {\n#{body}\n}"
end