lib/graphql-preview/instrumenter.rb in graphql-preview-0.1.0 vs lib/graphql-preview/instrumenter.rb in graphql-preview-0.1.1
- old
+ new
@@ -1,11 +1,12 @@
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)
+ def initialize(enabled_previews, possible_environments)
@enabled_previews = enabled_previews
+ @possible_environments = possible_environments
end
def instrument(type, field)
# Maybe get an isolated copy that we can modify
field_dup = nil
@@ -26,12 +27,22 @@
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
+
+ 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] = preview
+ mut.metadata[:preview_toggled_by] = value
end
end
end
end