Sha256: 07366e6e77ef128d1090d310b70d336275aa93e1b811e69a913ed3ccd086bdc2

Contents?: true

Size: 1.43 KB

Versions: 1

Compression:

Stored size: 1.43 KB

Contents

require "graphql"
require "graphql-preview/instrumenter"
require "graphql-preview/version"
require "graphql-preview/schema_modification"
require "graphql-preview/mask"
require "graphql-preview/extensions/enabled_previews"

module GraphQLPreview
  def self.visible?(member, context:)
    return true unless member.respond_to?(:metadata)
    return true unless member.metadata[:preview_toggled_by]

    unless context.key?(:schema_previews)
      raise ArgumentError, "[GraphQLPreview] `:schema_previews` was not provided to the `context`"
    end

    context[:schema_previews].include?(member.metadata[:preview_toggled_by].toggled_by)
  end

  def self.use(schema_def, enabled_previews: [])
    unless enabled_previews.is_a?(Array)
      raise ArgumentError, "Expected `enabled_previews` to be an array, but it was `#{enabled_previews.class}`"
    end

    enabled_previews.each do |preview|
      unless preview < GraphQLPreview::SchemaModification
        raise ArgumentError, "Preview #{preview} must inherit from `GraphQLPreview::SchemaModification`"
      end
    end

    schema = schema_def.target
    schema_def.instrument(:field, Instrumenter.new(enabled_previews))
    enabled_previews.each { |preview| preview.apply_to_schema(schema) }
    schema.metadata[:enabled_previews] = enabled_previews
  end
end

module GraphQL
  Schema.class_eval do
    # To support `graphql-ruby`'s class-based API
    extend GraphQLPreview::Extensions::EnabledPreviews
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
graphql-preview-0.1.0 lib/graphql-preview.rb