Class: GraphQL::Introspection::InputValueType

Inherits:
Introspection::BaseObject
  • Object
show all
Defined in:
lib/graphql/introspection/input_value_type.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.resolve_default_value(object, context) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/graphql/introspection/input_value_type.rb', line 24

def self.resolve_default_value(object, context)
  if object.default_value?
    value = object.default_value
    if value.nil?
      'null'
    else
      if (object.type.kind.list? || (object.type.kind.non_null? && object.type.of_type.kind.list?)) && !value.respond_to?(:map)
        # This is a bit odd -- we expect the default value to be an application-style value, so we use coerce result below.
        # But coerce_result doesn't wrap single-item lists, which are valid inputs to list types.
        # So, apply that wrapper here if needed.
        value = [value]
      end
      coerced_default_value = object.type.coerce_result(value, context)
      serialize_default_value(coerced_default_value, object.type, context)
    end
  else
    nil
  end
end

.resolve_is_deprecated(object, context) ⇒ Object



16
17
18
# File 'lib/graphql/introspection/input_value_type.rb', line 16

def self.resolve_is_deprecated(object, context)
  !!object.deprecation_reason
end

.serialize_default_value(value, type, context) ⇒ Object

Recursively serialize, taking care not to add quotes to enum values



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/graphql/introspection/input_value_type.rb', line 52

def self.serialize_default_value(value, type, context)
  if value.nil?
    'null'
  elsif type.kind.list?
    inner_type = type.of_type
    "[" + value.map { |v| serialize_default_value(v, inner_type, context) }.join(", ") + "]"
  elsif type.kind.non_null?
    serialize_default_value(value, type.of_type, context)
  elsif type.kind.enum?
    value
  elsif type.kind.input_object?
    "{" +
      value.map do |k, v|
        arg_defn = type.get_argument(k, context)
        "#{k}: #{serialize_default_value(v, arg_defn.type, context)}"
      end.join(", ") +
      "}"
  else
    GraphQL::Language.serialize(value)
  end
end

Instance Method Details

#default_valueObject



44
45
46
# File 'lib/graphql/introspection/input_value_type.rb', line 44

def default_value
  self.class.resolve_default_value(object, context)
end

#is_deprecatedObject



20
21
22
# File 'lib/graphql/introspection/input_value_type.rb', line 20

def is_deprecated
  self.class.resolve_is_deprecated(object, context)
end