class GraphQLPreview::Instrumenter
Modify each field & argument in the schema so that its metadata contains the preview, if there is one.
Attributes
enabled_previews[R]
Public Class Methods
new(enabled_previews, possible_environments)
click to toggle source
# File lib/graphql-preview/instrumenter.rb, line 5 def initialize(enabled_previews, possible_environments) @enabled_previews = enabled_previews @possible_environments = possible_environments end
Public Instance Methods
instrument(type, field)
click to toggle source
# File lib/graphql-preview/instrumenter.rb, line 10 def instrument(type, field) # Maybe get an isolated copy that we can modify field_dup = nil if (preview = enabled_previews.find { |prev| prev.toggled_on.include?("#{type.name}.#{field.name}")}) field_dup = field.dup assign_preview(field_dup, preview) end # Return the modified copy if we made one, # otherwise return the original field_dup || field end
Private Instance Methods
assign_preview(obj, preview)
click to toggle source
# File lib/graphql-preview/instrumenter.rb, line 28 def assign_preview(obj, preview) if obj.metadata[:preview_toggled_by] raise ArgumentError, "Couldn't add `#{preview}` to `#{obj.name}`: it's already toggled with `#{obj.metadata[:preview_toggled_by].toggled_by}`" end environments = if preview.environments preview.environments else @possible_environments end value = Hash[environments.map{ |env| [env, preview] }] obj.metadata[:preview_toggled_by] = value if obj.respond_to?(:mutation) && (mut = obj.mutation) mut.metadata[:preview_toggled_by] = value end end