Sha256: 8beaffce4ef982e115ab222b65a7b66f67df8b6db3ef4e457a0165c17d90954c
Contents?: true
Size: 1.96 KB
Versions: 2
Compression:
Stored size: 1.96 KB
Contents
# frozen_string_literal: true module GraphqlRails class Router # builds GraphQL::Schema based on previously defined grahiti data class SchemaBuilder require_relative './plain_cursor_encoder' require_relative './build_schema_action_type' attr_reader :queries, :mutations, :events, :raw_actions def initialize(queries:, mutations:, events:, raw_actions:, group: nil) @queries = queries @mutations = mutations @events = events @raw_actions = raw_actions @group = group end def call query_type = build_group_type('Query', queries) mutation_type = build_group_type('Mutation', mutations) subscription_type = build_group_type('Subscription', events) define_schema_class(query_type, mutation_type, subscription_type, raw_actions) end private attr_reader :group # rubocop:disable Metrics/MethodLength def define_schema_class(query_type, mutation_type, subscription_type, raw) Class.new(GraphQL::Schema) do connections.add( GraphqlRails::Decorator::RelationDecorator, GraphQL::Pagination::ActiveRecordRelationConnection ) cursor_encoder(Router::PlainCursorEncoder) raw.each { |action| send(action[:name], *action[:args], **action[:kwargs], &action[:block]) } query(query_type) if query_type mutation(mutation_type) if mutation_type subscription(subscription_type) if subscription_type end end # rubocop:enable Metrics/MethodLength def build_group_type(type_name, routes) group_name = group group_routes = routes .select { |route| route.show_in_group?(group_name) } .reverse .uniq(&:name) .reverse return if group_routes.empty? && type_name != 'Query' BuildSchemaActionType.call(type_name: type_name, routes: group_routes) end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
graphql_rails-3.0.0 | lib/graphql_rails/router/schema_builder.rb |
graphql_rails-2.4.0 | lib/graphql_rails/router/schema_builder.rb |