Module: ArSerializer::GraphQL

Defined in:
lib/ar_serializer/graphql.rb,
lib/ar_serializer/graphql/types.rb

Defined Under Namespace

Classes: ArgClass, FieldClass, HashTypeClass, ListTypeClass, OptionalTypeClass, OrTypeClass, Parser, ScalarTypeClass, SchemaClass, SerializableTypeClass, TypeClass

Class Method Summary collapse

Class Method Details

._definition(klass) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/ar_serializer/graphql.rb', line 9

def self._definition(klass)
  schema = SchemaClass.new(klass)
  definitions = schema.types.map do |type|
    next "scalar #{type.name}" if type.is_a? ScalarTypeClass
    fields = type.fields.map do |field|
      args = field.args.map { |arg| "#{arg.name}: #{arg.type.gql_type}" }
      args_exp = "(#{args.join(', ')})" unless args.empty?
      "  #{field.name}#{args_exp}: #{field.type.gql_type}"
    end
    <<~TYPE
      type #{type.name} {
      #{fields.join("\n")}
      }
    TYPE
  end
  <<~SCHEMA
    schema {
      query: #{schema.query_type.name}
    }

    #{definitions.map(&:strip).join("\n\n")}
  SCHEMA
end

.definition(klass, use: nil) ⇒ Object



5
6
7
# File 'lib/ar_serializer/graphql.rb', line 5

def self.definition(klass, use: nil)
  ArSerializer::Serializer.with_namespaces(use) { _definition klass }
end

.serialize(schema, gql_query, operation_name: nil, variables: {}, **args) ⇒ Object



33
34
35
36
37
38
39
40
# File 'lib/ar_serializer/graphql.rb', line 33

def self.serialize(schema, gql_query, operation_name: nil, variables: {}, **args)
  query = ArSerializer::GraphQL::Parser.parse(
    gql_query,
    operation_name: operation_name,
    variables: variables
  )
  { data: ArSerializer::Serializer.serialize(schema, query, **args) }
end