module ArSerializer::GraphQL

Public Class Methods

_definition(klass) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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