Class: Etna::Cwl::TypedDSLLoader

Inherits:
Loader
  • Object
show all
Defined in:
lib/etna/cwl.rb

Overview

Prepares a unique set of structured nominal types for an inner loading of types

Constant Summary collapse

REGEX =
/^([^\[?]+)(\[\])?(\?)?$/
OUTER_TYPE_LOADER =
TypedDSLLoader.new(
    UnionLoader.new(
        RecordType::RecordTypeLoader.new,
        ArrayType::InnerLoader.new,
        EnumType::InnerLoader.new,
        EnumLoader::PRIMITIVE_TYPE,
        EnumLoader::NOMINAL_TYPE,
    )
)
WITH_UNIONS_TYPE_LOADER =
TypedDSLLoader.new(
    UnionLoader.new(
        OUTER_TYPE_LOADER,
        ArrayLoader.new(OUTER_TYPE_LOADER),
    )
)

Instance Method Summary collapse

Methods inherited from Loader

#as_array, #as_mapped_array, #map, #optional, #or

Constructor Details

#initialize(inner) ⇒ TypedDSLLoader

Returns a new instance of TypedDSLLoader.



437
438
439
# File 'lib/etna/cwl.rb', line 437

def initialize(inner)
  @inner = inner
end

Instance Method Details

#load(val) ⇒ Object



461
462
463
464
465
466
467
468
469
470
471
# File 'lib/etna/cwl.rb', line 461

def load(val)
  if val.is_a?(Array)
    @inner.load(val.map do |item|
      item.is_a?(String) ? resolve(item) : item
    end)
  elsif val.is_a?(String)
    @inner.load(resolve(val))
  else
    @inner.load(val)
  end
end

#resolve(val) ⇒ Object



443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
# File 'lib/etna/cwl.rb', line 443

def resolve(val)
  m = REGEX.match(val)

  unless m.nil?
    type = m[1]
    unless m[2].nil?
      type = {'type' => 'array', 'items' => type}
    end
    unless m[3].nil?
      type = ["null", type]
    end

    return type
  end

  val
end