module GraphQLPreview

Constants

VERSION

Public Class Methods

use(schema_def, enabled_previews: [], possible_environments: [SchemaModification::DEFAULT_ENVIRONMENT]) click to toggle source
# File lib/graphql-preview.rb, line 28
def self.use(schema_def, enabled_previews: [], possible_environments: [SchemaModification::DEFAULT_ENVIRONMENT])
  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, possible_environments))
  enabled_previews.each { |preview| preview.apply_to_schema(schema, possible_environments) }
  schema.metadata[:enabled_previews] = enabled_previews
end
visible?(member, context:) click to toggle source
# File lib/graphql-preview.rb, line 9
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

  schema_preview_environment = context[:schema_preview_environment] || SchemaModification::DEFAULT_ENVIRONMENT

  toggled_by_preview = member.metadata[:preview_toggled_by][schema_preview_environment]

  if toggled_by_preview
    context[:schema_previews].include?(toggled_by_preview.toggled_by)
  else
    false
  end
end