class GraphQLPreview::SchemaModification

Constants

DEFAULT_ENVIRONMENT

Public Class Methods

announced_on(date, url: nil) click to toggle source
# File lib/graphql-preview/schema_modification.rb, line 48
def self.announced_on(date, url: nil)
  @announcement = {
    date: date,
    url: url
  }
end
announcement() click to toggle source
# File lib/graphql-preview/schema_modification.rb, line 55
def self.announcement
  @announcement
end
apply_to_schema(schema, possible_environments) click to toggle source
# File lib/graphql-preview/schema_modification.rb, line 90
def self.apply_to_schema(schema, possible_environments)
  environments = if self.environments
    self.environments
  else
    possible_environments
  end

  value = Hash[environments.map{ |env| [env, self] }]

  set_preview_toggled_by_on_members(schema, value)
end
description(new_description = nil) click to toggle source
# File lib/graphql-preview/schema_modification.rb, line 32
def self.description(new_description = nil)
  if new_description
    @description = new_description
  else
    @description
  end
end
environments(*new_environments) click to toggle source
# File lib/graphql-preview/schema_modification.rb, line 5
def self.environments(*new_environments)
  if new_environments.length > 0
    @environments = new_environments
  else
    @environments
  end
end
title(new_title = nil) click to toggle source
# File lib/graphql-preview/schema_modification.rb, line 24
def self.title(new_title = nil)
  if new_title
    @title = new_title
  else
    @title
  end
end
to_h() click to toggle source
# File lib/graphql-preview/schema_modification.rb, line 13
def self.to_h
  {
    title: title,
    description: description,
    toggled_by: toggled_by,
    announcement: announcement,
    updates: updates,
    toggled_on: toggled_on
  }
end
toggled_by(new_toggled_by = nil) click to toggle source
# File lib/graphql-preview/schema_modification.rb, line 40
def self.toggled_by(new_toggled_by = nil)
  if new_toggled_by
    @toggled_by = new_toggled_by
  else
    @toggled_by
  end
end
toggled_on(member_paths = nil) click to toggle source
# File lib/graphql-preview/schema_modification.rb, line 72
def self.toggled_on(member_paths = nil)
  if member_paths
    member_paths.each do |path|
      unless path.is_a?(String)
        raise ArgumentError, "Provide string paths to `toggled_on`. For example, to toggle on a field called `name` on a type `Author`, use `\"Author.name\"``"
      end
    end

    @member_paths = member_paths
  else
    @member_paths
  end
end
unset(schema) click to toggle source
# File lib/graphql-preview/schema_modification.rb, line 86
def self.unset(schema)
  set_preview_toggled_by_on_members(schema, nil)
end
updated_on(date, url: nil) click to toggle source
# File lib/graphql-preview/schema_modification.rb, line 59
def self.updated_on(date, url: nil)
  @updates ||= []

  @updates <<  {
    date: date,
    url: url
  }
end
updates() click to toggle source
# File lib/graphql-preview/schema_modification.rb, line 68
def self.updates
  @updates
end

Private Class Methods

set_preview_toggled_by_on_members(schema, value) click to toggle source
# File lib/graphql-preview/schema_modification.rb, line 104
def self.set_preview_toggled_by_on_members(schema, value)
  members = @member_paths.map { |path| schema.find(path) }

  members.each do |member|
    if member.is_a?(GraphQL::Field)
      # Let fields pass; we'll apply it during instrumentation
      next
    end

    unless member.respond_to?(:metadata)
      raise NoMethodError, "`#{member}` cannot have its metadata set"
    end

    # unless we're unsetting the preview, don't allow adding a new value
    if value && member.metadata[:preview_toggled_by]
      raise ArgumentError, "Couldn't add `#{self.toggled_by}` to `#{member.name}`: it's already toggled with `#{member.metadata[:preview_toggled_by]}`"
    end

    member.metadata[:preview_toggled_by] = value

    if member.is_a?(GraphQL::InterfaceType)
      member.fields.each_value do |field|
        field.metadata[:preview_toggled_by] = value
      end
    end
  end
end