57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
# File 'lib/tapioca/dsl/helpers/graphql_type_helper.rb', line 57
def type_for(type, ignore_nilable_wrapper: false, prepare_method: nil)
unwrapped_type = type.unwrap
parsed_type = case unwrapped_type
when GraphQL::Types::Boolean.singleton_class
"T::Boolean"
when GraphQL::Types::Float.singleton_class
type_for_constant(Float)
when GraphQL::Types::ID.singleton_class, GraphQL::Types::String.singleton_class
type_for_constant(String)
when GraphQL::Types::Int.singleton_class, GraphQL::Types::BigInt.singleton_class
type_for_constant(Integer)
when GraphQL::Types::ISO8601Date.singleton_class
type_for_constant(Date)
when GraphQL::Types::ISO8601DateTime.singleton_class
type_for_constant(Time)
when GraphQL::Types::JSON.singleton_class
"T::Hash[::String, T.untyped]"
when GraphQL::Schema::Enum.singleton_class
enum_values = T.cast(unwrapped_type.enum_values, T::Array[GraphQL::Schema::EnumValue])
value_types = enum_values.map { |v| type_for_constant(v.value.class) }.uniq
if value_types.size == 1
T.must(value_types.first)
else
"T.any(#{value_types.join(", ")})"
end
when GraphQL::Schema::Scalar.singleton_class
method = Runtime::Reflection.method_of(unwrapped_type, :coerce_input)
signature = Runtime::Reflection.signature_of(method)
return_type = signature&.return_type
valid_return_type?(return_type) ? return_type.to_s : "T.untyped"
when GraphQL::Schema::InputObject.singleton_class
type_for_constant(unwrapped_type)
when Module
Runtime::Reflection.qualified_name_of(unwrapped_type) || "T.untyped"
else
"T.untyped"
end
if prepare_method
prepare_signature = Runtime::Reflection.signature_of(prepare_method)
prepare_return_type = prepare_signature&.return_type
if valid_return_type?(prepare_return_type)
parsed_type = prepare_return_type&.to_s
end
end
if type.list?
parsed_type = "T::Array[#{parsed_type}]"
end
unless type.non_null? || ignore_nilable_wrapper
parsed_type = RBIHelper.as_nilable_type(parsed_type)
end
parsed_type
end
|