This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "bundler/inline" | |
gemfile do | |
gem "graphql", "1.12.20" | |
gem "graphql-pro", "1.20.2" | |
gem "rails" | |
gem "sqlite3" | |
end | |
require "active_record" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "bundler/inline" | |
require "logger" | |
gemfile do | |
gem "graphql", "1.12.19" | |
gem "graphql-pro", "1.20.1" | |
gem "redis" | |
end | |
# Here's an example of caching parsed AST documents for persisted queries. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "bundler/inline" | |
gemfile do | |
gem "graphql", "1.12.18" | |
end | |
class Schema < GraphQL::Schema | |
class Thing < GraphQL::Schema::Object | |
field :name, String, null: true | |
field :other_thing, self, null: true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# frozen_string_literal: true | |
# | |
# LRU cache based on Ruby 1.9+ ordered hash inspired by Sam Saffron: https://stackoverflow.com/a/16161783 | |
# | |
# @example Caching valid query documents in a Rails controller | |
# | |
# class GraphqlController < ApplicationController | |
# # TODO: not thread-safe. See https://github.com/samsaffron/lru_redux for a thread-safe LRU cache | |
# PARSED_QUERY_CACHE = GraphQLParseAndValidateCache.new(schema: MySchema, max_entries: 20) | |
# |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "bundler/inline" | |
gemfile do | |
gem "graphql", "~>1.12.0" | |
end | |
class BaseField < GraphQL::Schema::Field | |
def initialize(*args, federated: true, **kwargs, &block) | |
@federated = federated | |
super(*args, **kwargs, &block) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "bundler/inline" | |
gemfile do | |
gem "pundit", "2.1.0" | |
gem "graphql", "1.12.5" | |
source "https://gems.graphql.pro" do | |
gem "graphql-pro", "1.17.6" | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "fiber" | |
# Set up a pretend database | |
DATA = { | |
1 => "Hannah Coulter", | |
2 => "Jayber Crow", | |
3 => "That Distant Land" | |
} | |
# This loader will fetch items in batches of IDs |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
inputs = [ | |
# These inputs are "like" GraphQL queries because: | |
# - Some keys are scalars, others are nested hashes | |
# - Keys may be repeated | |
# | |
# Pretend they're like `{ field => complexity }` pairs. | |
[{ a: 1, b: 1 }], | |
[{ a: 1, b: 1 }, { b: 1 }], | |
[{ a: 1, b: 1, c: { d: 1 } }, { c: { d: 1, e: 1 } }] | |
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# A base mutation that adds an errors field to all subclasses, and before resolving, it checks to make sure that the caller selected `errors`. | |
# | |
# (You could use `GraphQL::Schema::Mutation` as a base class, too.) | |
class Mutations::BaseMutation < GraphQL::Schema::RelayClassicMutation | |
# Add the errors field to all mutations | |
field :errors, [Types::MutationError], null: false | |
# Inject `lookahead` to the resolve method | |
extras [:lookahead] | |
def resolve_with_support(lookahead:, **kwargs) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "graphql" | |
# A schema definition with field-level directives | |
schema = GraphQL::Schema.from_definition <<-GRAPHQL | |
type Query { | |
totalScore: Int! @mock | |
} | |
type Mutation { | |
incrementScore(by: Int = 1): Int! @mock(with: "SomeClassName") |