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