Sha256: d418d1436a732eb788b0e8714109b0f606d427f211a5032bf32b5f547cf47a2a
Contents?: true
Size: 1.12 KB
Versions: 1
Compression:
Stored size: 1.12 KB
Contents
module GraphQLPreview # Modify each field & argument in the schema so that # its metadata contains the preview, if there is one. class Instrumenter def initialize(enabled_previews) @enabled_previews = enabled_previews end 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 attr_reader :enabled_previews 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 obj.metadata[:preview_toggled_by] = preview if obj.respond_to?(:mutation) && (mut = obj.mutation) mut.metadata[:preview_toggled_by] = preview end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
graphql-preview-0.1.0 | lib/graphql-preview/instrumenter.rb |