Skip to content

Instantly share code, notes, and snippets.

@rmosolgo
rmosolgo / union_spread.rb
Last active October 11, 2022 12:56
Spreading an inteface fragment inside a union
require "bundler/inline"
gemfile do
gem "graphql", "1.11.2"
end
class Schema < GraphQL::Schema
class Error < GraphQL::Schema::Object
field :message, String, null: false
end
@rmosolgo
rmosolgo / example.js
Last active May 24, 2022 15:45
urql subscription exchange from GraphQL-Ruby pusher subscriptions
import { Client, defaultExchanges, subscriptionExchange } from 'urql'
import Pusher from "pusher"
const pusherClient = new Pusher("your-app-key", { cluster: "us2" })
const forwardSubscriptionToPusher = (operation) => {
// urql will call `.subscribe` on the returned object:
// https://github.com/FormidableLabs/urql/blob/f89cfd06d9f14ae9cb3be10b21bd5cbd12ca275c/packages/core/src/exchanges/subscription.ts#L68-L73
// https://github.com/FormidableLabs/urql/blob/f89cfd06d9f14ae9cb3be10b21bd5cbd12ca275c/packages/core/src/exchanges/subscription.ts#L82-L97
return {
subscribe: ({next, error, complete}) => {
@rmosolgo
rmosolgo / inline_fragments.rb
Last active May 30, 2022 18:27
Inline Fragments
require "bundler/inline"
gemfile do
gem "graphql", "~>2.0"
end
# This visitor will inline any fragment definitions in the document.
# It assumes that the document is valid; it will :boom: if there are
# cycles in the fragment spreads.
@rmosolgo
rmosolgo / caching_test.rb
Created March 5, 2022 14:32
ObjectCache with __typename
require "bundler/inline"
gemfile do
gem "graphql", "1.13.10"
gem "graphql-pro", "1.21.4"
gem "graphql-enterprise", "1.1.3"
end
class CachingSchema < GraphQL::Schema
@rmosolgo
rmosolgo / relation_cache.rb
Last active January 28, 2022 18:24
Cached ActiveRecord Connection
require "bundler/inline"
gemfile do
gem "graphql"
gem "graphql-pro"
gem "sqlite3"
gem "rails"
end
require "rails/all"
require "logger"
@rmosolgo
rmosolgo / global_id_changeset.rb
Created January 4, 2022 14:54
Versioning a global ID field in GraphQL-Ruby
require "bundler/inline"
gemfile do
gem "graphql", "1.13.2"
gem "graphql-enterprise", "1.1.0"
end
class BaseField < GraphQL::Schema::Field
include GraphQL::Enterprise::Changeset::FieldIntegration
end
@rmosolgo
rmosolgo / scoping.rb
Created December 17, 2021 14:31
List scoping with GraphQL-Pro Pundit integration
require "bundler/inline"
gemfile do
gem "graphql", "1.13.1"
gem "graphql-pro"
end
class Schema < GraphQL::Schema
class BaseObject < GraphQL::Schema::Object
include GraphQL::Pro::PunditIntegration::ObjectIntegration
@rmosolgo
rmosolgo / example.rb
Last active February 21, 2024 20:32
GraphQL-Ruby in-memory query cache with OperationStore and a custom analyzer
require "bundler/inline"
require "logger"
gemfile do
gem "graphql", "2.2.10"
gem "graphql-pro", "1.26.3"
gem "redis"
end
# In-memory cache: populate the cache after queries are run.
@rmosolgo
rmosolgo / loads_auth.rb
Created December 1, 2021 15:17
Argument auth with loads
require "bundler/inline"
gemfile do
gem "graphql", "1.13.0"
gem "graphql-pro", "1.20.3"
gem "pundit"
end
require "ostruct"
@rmosolgo
rmosolgo / nested_list_test.rb
Last active December 8, 2021 16:13
Preventing access to nested lists in GraphQL-ruby
require "bundler/inline"
gemfile do
gem "graphql", "1.12.20"
end
class PreventNestedCards < GraphQL::Analysis::AST::Analyzer
def initialize(query)
super
@inside_players_selection = false