Module: GraphQLPreview

Defined in:
lib/graphql-preview.rb,
lib/graphql-preview/mask.rb,
lib/graphql-preview/version.rb,
lib/graphql-preview/instrumenter.rb,
lib/graphql-preview/schema_modification.rb,
lib/graphql-preview/extensions/enabled_previews.rb

Defined Under Namespace

Modules: Extensions Classes: Instrumenter, Mask, SchemaModification

Constant Summary collapse

VERSION =
"0.2.0"

Class Method Summary collapse

Class Method Details

.use(schema_def, enabled_previews: [], possible_environments: [SchemaModification::DEFAULT_ENVIRONMENT]) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 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.[:enabled_previews] = enabled_previews
end

.visible?(member, context:) ⇒ Boolean

Returns:



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/graphql-preview.rb', line 9

def self.visible?(member, context:)
  return true unless member.respond_to?(:metadata)
  return true unless member.[: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.[:preview_toggled_by][schema_preview_environment]

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