class GraphQL::Client::Schema::PossibleTypes

Attributes

possible_types[R]

Public Class Methods

new(type, types) click to toggle source
# File lib/graphql/client/schema/possible_types.rb, line 13
def initialize(type, types)
  @type = type

  unless types.is_a?(Enumerable)
    raise TypeError, "expected types to be Enumerable, but was #{types.class}"
  end

  @possible_types = {}
  types.each do |klass|
    unless klass.is_a?(ObjectType)
      raise TypeError, "expected type to be #{ObjectType}, but was #{type.class}"
    end
    @possible_types[klass.type.graphql_name] = klass
  end
end

Public Instance Methods

cast(value, errors) click to toggle source

Internal: Cast JSON value to wrapped value.

value - JSON value errors - Errors instance

Returns BaseType instance.

# File lib/graphql/client/schema/possible_types.rb, line 37
def cast(value, errors)
  case value
  when Hash
    typename = value["__typename"]
    if type = possible_types[typename]
      type.cast(value, errors)
    else
      raise InvariantError, "expected value to be one of (#{possible_types.keys.join(", ")}), but was #{typename.inspect}"
    end
  when NilClass
    nil
  else
    raise InvariantError, "expected value to be a Hash, but was #{value.class}"
  end
end