class NxtSchema::Template::TypeResolver

Public Instance Methods

resolve(type_system, type) click to toggle source
# File lib/nxt_schema/template/type_resolver.rb, line 4
def resolve(type_system, type)
  @resolve ||= {}
  @resolve[type] ||= begin
    if type.is_a?(Symbol)
      resolve_type_from_symbol(type, type_system)
    elsif type.respond_to?(:call)
      type
    else
      raise_type_not_resolvable_error(type)
    end
  rescue NxtRegistry::Errors::KeyNotRegisteredError => error
    raise_type_not_resolvable_error(type)
  end
end

Private Instance Methods

raise_type_not_resolvable_error(type) click to toggle source
# File lib/nxt_schema/template/type_resolver.rb, line 34
def raise_type_not_resolvable_error(type)
  raise ArgumentError, "Can't resolve type: #{type}"
end
resolve_type_from_symbol(type, type_system) click to toggle source
# File lib/nxt_schema/template/type_resolver.rb, line 21
def resolve_type_from_symbol(type, type_system)
  classified_type = type.to_s.classify

  return type_system.const_get(classified_type) if type_defined_in_type_system?(type, type_system)
  return NxtSchema::Types::Nominal.const_get(classified_type) if type_defined_in_type_system?(type, NxtSchema::Types::Nominal)

  NxtSchema::Types.registry(:types).resolve!(type)
end
type_defined_in_type_system?(type, type_system) click to toggle source
# File lib/nxt_schema/template/type_resolver.rb, line 30
def type_defined_in_type_system?(type, type_system)
  type_system.constants.include?(type)
end